
    Sf                        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 ddl	mZm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 ej        dk    rej        Zej        Zej        Zej        Zn# e$ r ej        dk    r dZY nw xY wg dZ eed          ZdZ dZ! ej"                    Z#dZ$dgZ% eed          rdZ$e%dgz  Z%ej        dk    rdZ$e%dgz  Z%e!fdZ&d Z'd Z(d Z)d Z* G d d          Z+ G d d          Z,er G d de,          Z- G d de,          Z. G d  d!          Z/dGd"Z0d# Z1ej        dk    rdHd&Z2ndHd'Z2 G d( d)          Z3d* Z4ej        dk    r G d+ d,          Z5ej6        ej7        ffd-Z8d.Z9d/Z:d0Z;d1Z<d2 Z=d3 Z> G d4 d5          Z?d6 Z@d7 ZA G d8 d9e/          ZBd: ZCej        dk    rd; ZDejE        ejF        hZGdId<ZHn eed=          rd> ZInd? ZIdId@ZHej        dk    r0dA ZJdB ZK e
jL        e.eJ           dC ZMdD ZN e
jL        e-eM           dS dE ZJdF ZK e
jL        e.eJ           dS )J    N   )	reduction)util)AuthenticationErrorBufferTooShort)	_billiard)setblockingsend_offset	monotonic)ForkingPickler)_winapiwin32)ClientListenerPipewaitpypy_version_infoi    g      4@AF_INETAF_UNIXAF_PIPEc                 $    t                      | z   S Nr   )timeouts    E/var/www/html/env/lib/python3.11/site-packages/billiard/connection.py_init_timeoutr   E   s    ;;      c                 &    t                      | k    S r   r   )ts    r   _check_timeoutr    I   s    ;;?r   c                    | dk    rdS | dk    r't          j        dt          j                              S | dk    r>t          j        dt	          j                    t          t                    fz  d          S t          d	          )
z?
    Return an arbitrary free address for the given family
    r   )	localhostr   r   z	listener-)prefixdirr   z\\.\pipe\pyc-%d-%d- zunrecognized family)	tempfilemktempr   get_temp_dirosgetpidnext_mmap_counter
ValueErrorfamilys    r   arbitrary_addressr0   Q   s     	9		kt7H7J7JKKKK	9		&< "	T--@-@A'BGIK K K 	K .///r   c                     t           j        dk    r| dk    rt          d| z            t           j        dk    r-| dk    r)t          t          |           st          d| z            dS dS dS )zD
    Checks if the family is valid for the current environment.
    r   r   zFamily %s is not recognized.r   N)sysplatformr-   hasattrsocketr.   s    r   _validate_familyr6   `   s     |w6Y#6#67&@AAA
|w6Y#6#6vv&& 	F;fDEEE #6#6	F 	Fr   c                     t          |           t          k    rdS t          |           t          u r|                     d          rdS t          |           t          u rdS t	          d| z            )z]
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    r   z\\r   r   zaddress type of %r unrecognized)typetuplestr
startswithr-   )addresss    r   address_typer=   m   sm     G}}y	g#		'"4"4V"<"<	y	g#		y:WDEEEr   c                       e Zd Zd ZdS )_SocketContainerc                     || _         d S r   sock)selfrB   s     r   __init__z_SocketContainer.__init__   s    			r   N)__name__
__module____qualname__rD    r   r   r?   r?      s#            r   r?   c                       e Zd ZdZddZd Zd Zd Zd Zd Z	e
d	             Ze
d
             Ze
d             Zd Zd ZddZd ZddZddZd ZddZd Zd Zd Zd ZdS )_ConnectionBaseNTc                    t          |t                    r%|j        | _        |j                                        }|                                }|dk     rt          d          |s|st          d          || _        || _        || _	        d S )Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)

isinstancer?   rB   _socketfileno	__index__r-   _handle	_readable	_writable)rC   handlereadablewritables       r   rD   z_ConnectionBase.__init__   s    f.// 	*!;DL[''))F!!##A::-... 	J 	JHJ J J!!r   c                 @    | j         |                                  d S d S r   rP   _closerC   s    r   __del__z_ConnectionBase.__del__   s#    <#KKMMMMM $#r   c                 2    | j         t          d          d S )Nzhandle is closed)rP   OSErrorrY   s    r   _check_closedz_ConnectionBase._check_closed   s!    <,---  r   c                 2    | j         st          d          d S )Nzconnection is write-only)rQ   r\   rY   s    r   _check_readablez_ConnectionBase._check_readable   s%    ~ 	64555	6 	6r   c                 2    | j         st          d          d S )Nzconnection is read-only)rR   r\   rY   s    r   _check_writablez_ConnectionBase._check_writable   s%    ~ 	53444	5 	5r   c                 f    | j         rd| _        n|                                  t          d          )NFzbad message length)rR   rQ   closer\   rY   s    r   _bad_message_lengthz#_ConnectionBase._bad_message_length   s1    > 	"DNNJJLLL*+++r   c                     | j         du S )z True if the connection is closedNrP   rY   s    r   closedz_ConnectionBase.closed   s     |t##r   c                     | j         S )z"True if the connection is readable)rQ   rY   s    r   rT   z_ConnectionBase.readable        ~r   c                     | j         S )z"True if the connection is writable)rR   rY   s    r   rU   z_ConnectionBase.writable   ri   r   c                 8    |                                   | j        S )z+File descriptor or handle of the connection)r]   rP   rY   s    r   rN   z_ConnectionBase.fileno   s    |r   c                 h    | j         *	 |                                  d| _         dS # d| _         w xY wdS )zClose the connectionNrW   rY   s    r   rc   z_ConnectionBase.close   sB    <#$#t####	 $#s   & 	/r   c                    |                                   |                                  t          |          }|j        dk    rt          t	          |                    }t          |          }|dk     rt          d          ||k     rt          d          |||z
  }n-|dk     rt          d          ||z   |k    rt          d          |                     ||||z                       dS )z,Send the bytes data from a bytes-like objectr   r   zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)r]   ra   
memoryviewitemsizebyteslenr-   _send_bytes)rC   bufoffsetsizemns         r   
send_bytesz_ConnectionBase.send_bytes   s    sOO:>>588$$AFFA::1222v::5666<v:DDAXX/000d]Q<===6&4-/011111r   c                     |                                   |                                  |                     t          j        |                     dS )zSend a (picklable) objectN)r]   ra   rr   r   dumpsrC   objs     r   sendz_ConnectionBase.send   sK    -c2233333r   c                     |                                   |                                  ||dk     rt          d          |                     |          }||                                  |                                S )z7
        Receive bytes data as a bytes object.
        Nr   znegative maxlength)r]   r_   r-   _recv_bytesrd   getvalue)rC   	maxlengthrs   s      r   
recv_bytesz_ConnectionBase.recv_bytes   s}     	 Y]]1222y));$$&&&||~~r   c                 H   |                                   |                                  t          |          5 }|j        }|t	          |          z  }|dk     rt          d          ||k    rt          d          |                                 }|                                }|||z   k     r!t          |	                                          |
                    d           |                    |||z  ||z   |z                      |cddd           S # 1 swxY w Y   dS )zq
        Receive bytes data into a writeable bytes-like object.
        Return the number of bytes read.
        r   znegative offsetzoffset too largeN)r]   r_   rn   ro   rq   r-   r   tellr   r   seekreadinto)rC   rs   rt   rv   ro   bytesizeresultru   s           r   recv_bytes_intoz_ConnectionBase.recv_bytes_into   sj   
 	__ 	zH#a&&(Hzz !2333("" !3444%%''F;;==D&4-''$V__%6%6777KKNNNOOA("FTMh#>>    #	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   CDDDc                     |                                   |                                  |                                 }t          j        |          S )zReceive a (picklable) object)r]   r_   r   r   loadbuf)rC   rs   s     r   recvz_ConnectionBase.recv  sH      %c***r           c                 |    |                                   |                                  |                     |          S )z/Whether there is any input available to be read)r]   r_   _pollrC   r   s     r   pollz_ConnectionBase.poll  s8    zz'"""r   c                     | S r   rH   rY   s    r   	__enter__z_ConnectionBase.__enter__      r   c                 .    |                                   d S r   rc   rC   exc_type	exc_valueexc_tbs       r   __exit__z_ConnectionBase.__exit__      

r   c                 H    t          |                                 ||          S r   )r
   rN   )rC   rs   rt   s      r   r
   z_ConnectionBase.send_offset"  s    4;;==#v666r   c                 J    t          |                                 |           d S r   )r	   rN   )rC   blockings     r   r	   z_ConnectionBase.setblocking%  s     DKKMM8,,,,,r   )TT)r   Nr   )r   )r   )rE   rF   rG   rP   rD   rZ   r]   r_   ra   rd   propertyrg   rT   rU   rN   rc   rx   r}   r   r   r   r   r   r   r
   r	   rH   r   r   rJ   rJ      s       G" " " "   . . .6 6 65 5 5, , , $ $ X$   X   X  
$ $ $2 2 2 2*4 4 4      4+ + +# # # #    7 7 7- - - - -r   rJ   c                   D    e Zd ZdZdZej        fdZd Zd	dZ	d Z
d ZdS )
PipeConnectionz
        Connection class based on a Windows named pipe.
        Overlapped I/O is used, so the handles must have been created
        with FILE_FLAG_OVERLAPPED.
        Fc                 &     || j                    d S r   rf   )rC   _CloseHandles     r   rX   zPipeConnection._close3  s    L&&&&&r   c                    t          j        | j        |d          \  }}	 |t           j        k    r.t          j        |j        gdt                    }|t          k    sJ n#  |                                  xY w|	                    d          \  }}n# |	                    d          \  }}w xY w|dk    sJ |t          |          k    sJ d S )NT
overlappedFr   )r   	WriteFilerP   ERROR_IO_PENDINGWaitForMultipleObjectseventINFINITEWAIT_OBJECT_0cancelGetOverlappedResultrq   )rC   rs   overrwaitresnwrittens         r   rr   zPipeConnection._send_bytes6  s    'cdKKKGB
='222%<
E85 5G #m3333		 " 6 6t < <## 6 6t < <#<<<<!8888s3xx''''''s   >A  B  A77B B-Nc                    | j         rd| _         t          j                    S |dnt          |d          }	 t	          j        | j        |d          \  }}	 |t          j        k    r.t	          j        |j	        gdt                    }|t          k    sJ n#  |                                  xY w|                    d          \  }}|dk    r<t          j                    }|                    |                                           |S |t          j        k    r|                     ||          S n# |                    d          \  }}|dk    r@t          j                    }|                    |                                           |c cY S |t          j        k    r|                     ||          c cY S w xY wn/# t$          $ r"}|j        t          j        k    rt*           d }~ww xY wt-          d          )NF   Tr   r   z.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminr   ReadFilerP   r   r   r   r   r   r   r   write	getbufferERROR_MORE_DATA_get_more_datar\   winerrorERROR_BROKEN_PIPEEOFErrorRuntimeError)	rC   maxsizebsizer   r   r   nreadfes	            r   r   zPipeConnection._recv_bytesF  s   & */'z||#&C4E4E%.e  GBD'":::&-&D!#
E8'= '=G#*m#;#;#;#;		%'%;%;D%A%A
s!88 "
AGGBLLNN333#$H G$;;;#'#6#6r7#C#CC < &(%;%;D%A%A
s!88 "
AGGBLLNN333#$HHHHH G$;;;#'#6#6r7#C#CCCCCCCCCC <   zW%>>>&	
 @B B Bsg   F? >B D1 B--D1 0AF? 
%F? 0F? 1AF;F? (F;8F? :F;;F? ?
G+	G&&G+c                     | j         s#t          j        | j                  d         dk    rdS t	          t          | g|                    S )Nr   T)r   r   PeekNamedPiperP   boolr   r   s     r   r   zPipeConnection._pollh  sI    ' )$,77:a??tdVW--...r   c                     |                                 }t          j                    }|                    |           t	          j        | j                  d         }|dk    sJ |*t          |          |z   |k    r|                                  t	          j	        | j        |d          \  }}|
                    d          \  }}|dk    sJ ||k    sJ |                    |                                            |S )Nr   r   Tr   )r   r   r   r   r   r   rP   rq   rd   r   r   )rC   r   r   rs   r   leftr   rbytess           r   r   zPipeConnection._get_more_datan  s    ,,..C
AGGCLLL(66q9D!8888"s3xx$'@'@((***&t|TdKKKGB0066KFC!8888T>>>>GGBLLNN###Hr   r   )rE   rF   rG   __doc__r   r   CloseHandlerX   rr   r   r   r   rH   r   r   r   r   +  s        	 	
 #&-&9 	' 	' 	' 	'	( 	( 	(  	B  	B  	B  	BD	/ 	/ 	/	 	 	 	 	r   r   c                       e Zd ZdZerej        fdZej        Z	ej
        Znej        fdZej        Z	ej        Ze	fdZefdZefdZd
dZd	 ZdS )
Connectionzo
    Connection class based on an arbitrary file descriptor (Unix only), or
    a socket handle (Windows).
    c                 &     || j                    d S r   rf   rC   rX   s     r   rX   zConnection._close      F4<     r   c                 &     || j                    d S r   rf   r   s     r   rX   zConnection._close  r   r   c                 
   t          |          }	 	  || j        |          }||z  }|dk    rd S ||d          }nI# t          t          t          j        f$ r*}t          |dd           t          j        k    r Y d }~nd }~ww xY wt)NTr   errno)	rq   rP   r\   IOErrorr5   errorgetattrr   EINTR)rC   rs   r   	remainingrw   excs         r   _sendzConnection._send  s    HH	
		E$,,,
 Q	>>E!""g Wfl3   3..%+== >====
	s   ; B A<<Bc                    t          j                    }| j        }|}|dk    r	  |||          }t          |          }|dk    r||k    rt          t          d          |                    |           ||z  }nI# t
          t          t          j	        f$ r*}t          |dd           t          j        k    r Y d }~nd }~ww xY w|dk    |S )Nr   zgot end of file during messager   )r   r   rP   rq   r   r\   r   r   r5   r   r   r   r   )	rC   ru   readrs   rS   r   chunkrw   r   s	            r   _recvzConnection._recv  s    jll	!mmVY//
 JJ66 D((&%&FGGG		%   Q		 Wfl3   3..%+== >==== !mm 
s   A< <C B==Cc                 *   t          |          }t          j        d|          }|dk    r,|                     |           |                     |           d S t	          ||          r|                                }|                     ||z              d S )N!ii @  )rq   structpackr   rL   tobytes)rC   rs   rn   rw   headers        r   rr   zConnection._send_bytes  s    HHT1%%u99 JJvJJsOOOOO #z** $kkmmJJv|$$$$$r   Nc                     |                      d          }t          j        d|                                          \  }|||k    rd S |                      |          S )N   r   )r   r   unpackr   )rC   r   rs   ru   s       r   r   zConnection._recv_bytes  sQ    jjmmdCLLNN334'>>4zz$r   c                 B    t          | g|          }t          |          S r   )r   r   )rC   r   rs      r   r   zConnection._poll  s    $!!Awwr   r   )rE   rF   rG   r   r   r   closesocketrX   r}   _writer   _readr)   rc   r   r   r   r   rn   rr   r   r   rH   r   r   r   r   ~  s         
  	 ) 5 	! 	! 	! 	! " 	! 	! 	! 	!%      %    * +5 % % % %$           r   r   c                   b    e Zd ZdZddZd Zd Z ed           Z ed           Z	d	 Z
d
 ZdS )r   z
    Returns a listener object.

    This is a wrapper for a bound socket which is 'listening' for
    connections, or for a Windows named pipe.
    Nr   c                 8   |p|ot          |          pt          }|pt          |          }t          |           |dk    rt	          ||          | _        nt          |||          | _        |$t          |t                    st          d          || _
        d S )Nr   authkey should be a byte string)r=   default_familyr0   r6   PipeListener	_listenerSocketListenerrL   rp   	TypeError_authkey)rC   r<   r/   backlogauthkeys        r   rD   zListener.__init__  s     H4|G44H9G 	6.v66   Y)'7;;DNN+GVWEEDNz'5'A'A=>>>r   c                     | j         t          d          | j                                         }| j        r*t	          || j                   t          || j                   |S )zz
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        Nzlistener is closed)r   r\   acceptr   deliver_challengeanswer_challenge)rC   cs     r   r   zListener.accept  sa     >!.///N!!##= 	/a///Q...r   c                 R    | j         }|d| _         |                                 dS dS )zA
        Close the bound socket or named pipe of `self`.
        N)r   rc   )rC   listeners     r   rc   zListener.close  s6     >!DNNN  r   c                     | j         j        S r   )r   _addressrY   s    r   <lambda>zListener.<lambda>  s    DN$; r   c                     | j         j        S r   )r   _last_acceptedrY   s    r   r  zListener.<lambda>  s    $.*G r   c                     | S r   rH   rY   s    r   r   zListener.__enter__  r   r   c                 .    |                                   d S r   r   r   s       r   r   zListener.__exit__  r   r   )NNr   N)rE   rF   rG   r   rD   r   rc   r   r<   last_acceptedr   r   rH   r   r   r   r     s                      h;;<<GHGGHHM      r   r   c                     |pt          |           }t          |           |dk    rt          |           }nt          |           }|$t	          |t
                    st          d          | t          ||           t          ||           |S )z=
    Returns a connection to the address of a `Listener`
    r   Nr   )	r=   r6   
PipeClientSocketClientrL   rp   r   r   r   )r<   r/   r   r   s       r   r   r     s     ,|G,,FVw!!:gu#=#=9:::G$$$!W%%%Hr   c                 h    t          | d          r|                                 S t          |           S )Ndetach)r4   r  r?   rA   s    r   r  r  !  s2    tX {{}} D!!!r   TFc                    | r{t          j                    \  }}|                    |            |                    |            t          t	          |                    }t          t	          |                    }n\t          j                    \  }}|rt          |d           |rt          |d           t          |d          }t          |d          }||fS )L
        Returns pair of connection objects at either end of a pipe
        r   FrU   rT   )r5   
socketpairr	   r   r  r)   pipe)	duplex	rnonblock	wnonblocks1s2c1c2fd1fd2s	            r   r   r   +  s      	1&((FBNNy=)))NNy=)))F2JJ''BF2JJ''BBwyyHC $C### $C###C%000BC%000B2vr   c           
      V   |r
J d            |r
J d            t          d          }| r4t          j        }t          j        t          j        z  }t
          t
          }}n!t          j        }t          j        }dt
          }}t          j        ||t          j        z  t          j	        z  t          j
        t          j        z  t          j        z  d||t          j        t          j                  }t          j        ||dt          j        t          j        t          j        t          j                  }	t          j        |	t          j        dd           t          j        |d          }
|
                    d          \  }}|dk    sJ t)          || 	          }t)          |	| 
          }||fS )r  z"rnonblock not supported on windowsz"wnonblock not supported on windowsr   r   r   NTr   r  r  )r0   r   PIPE_ACCESS_DUPLEXGENERIC_READGENERIC_WRITEBUFSIZE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ConnectNamedPiper   r   )r  r  r  r<   openmodeaccessobsizeibsizeh1h2r   _r   r  r  s                  r   r   r   B  s    BBBBB}BBBBB}#I.. 	(1H)G,AAF$gFFF2H*FFF$X <<12%(EEvvw;L
 
 VQg.C(',
 
 	'-tT	
 	
 	
 -bTBBB
//553axxxxB000B0002vr   c                   &    e Zd ZdZddZd Zd ZdS )r   zO
    Representation of a socket which is bound to an address and listening
    r   c                    t          j         t          t           |                    | _        	 t          j        dk    r0| j                            t           j        t           j        d           | j                            d           | j        	                    |           | j        
                    |           | j                                        | _        n(# t          $ r | j                                          w xY w|| _        d | _        |dk    r*t#          j        | t          j        |fd          | _        d S d | _        d S )Nposixr   Tr   r   argsexitpriority)r5   r   rM   r)   name
setsockopt
SOL_SOCKETSO_REUSEADDRr	   bindlistengetsocknamer  r\   rc   _familyr  r   Finalizeunlink_unlink)rC   r<   r/   r   s       r   rD   zSocketListener.__init__u  s6   }WVV%<%<==	w'!!''(9(.(;Q@ @ @L$$T***Lg&&&L((( L4466DMM 	 	 	L   	 "Y=biwjq  DLLL  DLLLs   B,C %D c                 @   	 	 | j                                         \  }| _        nJ# t          t          t
          j        f$ r*}t          |dd           t          j	        k    r Y d }~nd }~ww xY wm|
                    d           t          t          |                    S )NTr   )rM   r   r  r\   r   r5   r   r   r   r   r	   r   r  )rC   sr   s      r   r   zSocketListener.accept  s    	)-)<)<)>)>&4&
 	 Wfl3   3..%+== >====	 	
d&))$$$s   !% A+ A&&A+c                     	 | j                                          | j        }|d | _         |             d S d S # | j        }|d | _         |             w w xY wr   )rM   rc   rH  )rC   rG  s     r   rc   zSocketListener.close  sr    	L   \F!# "! \F!# "s	   9 AN)r   )rE   rF   rG   r   rD   r   rc   rH   r   r   r   r   q  sP                0
% 
% 
%    r   r   c                     t          |           }t          j        t          t          |                    }|                    d           |                    |            t          t          |                    S )zO
    Return a connection object connected to the socket given by `address`
    T)r=   r5   r   r	   connectr   r  )r<   r/   rJ  s      r   r  r    sb     '""Fgff--..AMM$IIgfQii   r   c                   >    e Zd ZdZddZd	dZd Zed             ZdS )
r   z0
        Representation of a named pipe
        Nc                     || _         |                     d          g| _        d | _        t	          j        d| j                    t	          j        | t          j        | j        | j         fd          | _	        d S )NT)firstz listener created with address=%rr   r;  )
r  _new_handle_handle_queuer  r   	sub_debugrF  r   _finalize_pipe_listenerrc   )rC   r<   r   s      r   rD   zPipeListener.__init__  su    #DM"&"2"2"2">">!?D"&DN=t}MMMl:($-8q  DJJJr   Fc           
      .   t           j        t           j        z  }|r|t           j        z  }t          j        | j        |t           j        t           j        z  t           j        z  t           j	        t          t          t           j        t           j                  S r   )r   r   r&  r'  r%  r  r(  r)  r*  PIPE_UNLIMITED_INSTANCESr#  r+  r,  )rC   rP  flagss      r   rQ  zPipeListener._new_handle  sp    .1MME ?>>*u)G,II!"0'7,gl  r   c                 d   | j                             |                                            | j                             d          }	 t	          j        |d          }	 t	          j        |j        gdt                     n.#  |	                                 t	          j
        |            xY w	 |                    d          \  }}|dk    sJ nR# |                    d          \  }}|dk    sJ w xY w# t          $ r }|j        t          j        k    r Y d }~nd }~ww xY wt          |          S )Nr   Tr   F)rR  appendrQ  popr   r0  r   r   r   r   r   r   r\   r   ERROR_NO_DATAr   )rC   rS   r   r7  r   r   s         r   r   zPipeListener.accept  sZ   %%d&6&6&8&8999'++A..F$-fFFF	$2
E85 5 5 5IIKKK'///5  33D99FAs!88888  33D99FAs!88888888    :!666 76666  "&)))s6   C6 !B  C +B,,C "C36
D  DD c                 b    t          j        d|           | D ]}t          j        |           d S )Nz closing listener with address=%r)r   rS  r   r   )queuer<   rS   s      r   rT  z$PipeListener._finalize_pipe_listener  sB    N=wGGG , ,#F++++, ,r   r   )F)	rE   rF   rG   r   rD   rQ  r   staticmethodrT  rH   r   r   r   r     sp        	 			 		 		 		
	 
	 
	 
		* 	* 	*. 
	, 	, 
	, 	, 	,r   r   c           	         t                      }	 	 t          j        | d           t          j        | t          j        t          j        z  dt          j        t          j        t          j        t          j                  }n1# t          $ r#}|j
        |vst          |          r Y d}~nd}~ww xY wt          j        |t          j        dd           t          |          S )zU
        Return a connection object connected to the pipe given by `address`
        r     r   N)r   r   WaitNamedPiper-  r!  r"  r,  r.  r&  r\   r   r    r/  r)  r   )r<   _ignorer   hr   s        r   r  r    s    
 OO	%gt444&W1G4IIw|W%:0',  	    :W,,q0A0A, -,,,,	  	'w,dD	
 	
 	
 a   s   A.B   
B-
B((B-   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c                    dd l }t          |t                    sJ t          j        t
                    }|                     t          |z              |                    ||d          	                                }| 
                    d          }||k    r|                     t                     d S |                     t                     t          d          )Nr   md5   zdigest received was wrong)hmacrL   rp   r)   urandomMESSAGE_LENGTHrx   	CHALLENGEnewdigestr   WELCOMEFAILUREr   
connectionr   rh  messagerm  responses         r   r   r     s    KKKgu%%%%%j((G)g-...XXgw..5577F$$S))H6g&&&&&g&&&!"=>>>r   c                    dd l }t          |t                    sJ |                     d          }|d t	          t
                             t
          k    sJ d|z              |t	          t
                    d          }|                    ||d                                          }|                     |           |                     d          }|t          k    rt          d          d S )Nr   rg  zmessage = %rrf  zdigest sent was rejected)rh  rL   rp   r   rq   rk  rl  rm  rx   rn  r   rp  s         r   r   r     s    KKKgu%%%%%##C((G?C	NN?#y000.72J000c)nnoo&GXXgw..5577F&!!!$$S))H7!"<=== r   c                        e Zd Zd Zd Zd ZdS )ConnectionWrapperc                 |    || _         || _        || _        dD ]#}t          ||          }t	          | ||           $d S )N)rN   rc   r   r   rx   )_conn_dumps_loadsr   setattr)rC   connrz   loadsattrr|   s         r   rD   zConnectionWrapper.__init__2  sT    
K 	% 	%D$%%CD$$$$$	% 	%r   c                 d    |                      |          }| j                            |           d S r   )ry  rx  rx   )rC   r|   rJ  s      r   r}   zConnectionWrapper.send:  s/    KK
a     r   c                 ^    | j                                         }|                     |          S r   )rx  r   rz  )rC   rJ  s     r   r   zConnectionWrapper.recv>  s%    J!!##{{1~~r   N)rE   rF   rG   rD   r}   r   rH   r   r   rv  rv  0  sA        % % %! ! !    r   rv  c                 j    t                               | fd d d d          }|                    d          S )Nr   utf-8)	xmlrpclibrz   encode)r|   os     r   
_xml_dumpsr  C  s/    tT155A88Gr   c                 j    t                               |                     d                    \  \  }}|S )Nr  )r  r}  decode)rJ  r|   methods      r   
_xml_loadsr  H  s*    __QXXg%6%677NFSFJr   c                       e Zd Zd ZdS )XmlListenerc                 x    dd l ma t                              |           }t          |t          t                    S Nr   )xmlrpc.clientclientr  r   r   rv  r  r  r{   s     r   r   zXmlListener.acceptO  s7    ))))))ood## j*===r   N)rE   rF   rG   r   rH   r   r   r  r  M  s#        > > > > >r   r  c                  X    dd l ma t          t	          | i |t
          t                    S r  )r  r  r  rv  r   r  r  )r<  kwdss     r   	XmlClientr  V  s3    %%%%%%VT2T22J
KKKr   c                    t          |           }g }|rt          j        |d|          }|t          k    rnt          |cxk    rt          t          |          z   k     rn n|t          z  }nDt          |cxk    rt          t          |          z   k     rn n|t          z  }nt          d          |                    ||                    ||dz   d          }d}||S )NFzShould not get herer   r   )	listr   r   WAIT_TIMEOUTr   rq   WAIT_ABANDONED_0r   rY  )handlesr   Lreadyress        r   _exhaustive_waitr  a  s     MM 	0E7CCCl""#>>>>A(>>>>>>}$!SDDDD+;c!ff+DDDDDD''"#8999LL3   #'((AG  	 r   c                   
 |t           }n|dk     rd}nt          |dz  dz             }t          |           } i g }t                      
t                      }	 | D ]}	 t	          |d          }	 t          j         |            dd          \  }}n(# t          $ r}|j        }|t          vr Y d}~nd}~ww xY w|t
          j
        k    r |                    |           ||j        <   
                    |           d}# t          $ r ||                                <   Y w xY wt!                                          |          }|D ]}|                                 |D ]}	 |                    d          \  }	}n(# t          $ r}|j        }|t          vr Y d}~nd}~ww xY w|t
          j        k    r?|j                 }
                    |           |dk    rt+          |d          rd|_        n# |D ]}|                                 |D ]}	 |                    d          \  }	}n(# t          $ r}|j        }|t          vr Y d}~nd}~ww xY w|t
          j        k    r?|j                 }
                    |           |dk    rt+          |d          rd|_        w xY w
                    fd|D                        
fd	| D             S )

        Wait till an object in object_list is ready/readable.

        Returns list of those objects in object_list which are ready/readable.
        Nr   r`  g      ?rN   Tr   c              3   (   K   | ]}|         V  d S r   rH   ).0rc  waithandle_to_objs     r   	<genexpr>zwait.<locals>.<genexpr>  s)      IIa.q1IIIIIIr   c                     g | ]}|v |	S rH   rH   )r  pready_objectss     r   
<listcomp>zwait.<locals>.<listcomp>  s#    ===a!}*<*<*<*<*<r   )r   intr  setr   r   r   r\   r   _ready_errorsr   rY  r   addAttributeErrorrO   r  keysr   r   ERROR_OPERATION_ABORTEDr4   r   update)object_listr   ov_listready_handlesr  rN   r   r   r   r7  r  r  s             @@r   r   r   w  s    ?GGq[[GG'D.3.//G;''-	8  $ $$$Q11F
"")"26688Q"E"ECC" " " "jm33! 43333" g666r***67)"(33
 &))!,,,"#% & 9 9 978%akkmm4449( -->-C-C-E-EwOOM   		  8 833D99FAss   *C-// 0//// '999)"(3A!%%a(((axx #1&:;; 837A08	   		  8 833D99FAss   *C-// 0//// '999)"(3A!%%a(((axx #1&:;; 837A08  	IIII=IIIIII====;====s   G<  D1!BG< 
B8B3.G< 3B88AG< !D'$G< &D''%G< *F
F(F##F(<J-H43J-4
I	>I	J-I	AJ-r   c                    |t          |dz            }i }t          j                    }| D ]O}|                    |t          j                   t          |d          r|||                                <   J|||<   Pg }|                    |          D ]A\  }}|t          j        z  rt          d|z            |	                    ||                    B|S )Nr`  rN   zinvalid file descriptor %i)
r  selectr   registerPOLLINr4   rN   POLLNVALr-   rY  )fdsr   fd_mappollsterfdlsr   s          r   r   r     s    "gn--F{}}H $ $!!"fm4442x(( $*,F299;;''!#F2JJB%]]733 & &	E6?* H$%AB%FGGG		&*%%%%Ir   c                 <    t          j         | g g |          d         S r  )r  )r  r   s     r   r   r     s    =b"g66q99r   c                    |'|dk    rt          | d          S t                      |z   }	 	 t          | |          S # t          t          t          j        f$ r }|j        t          j        k    r Y d}~nd}~ww xY w||t                      z
  }d)r  Nr   )r   r   r\   r   r5   r   r   r   )r  r   deadliner   s       r   r   r     s     !||[!,,,$;;0	1['222Wfl3   7ek)) *)))) ""Y[[0	1s   < A8A33A8c                    |                                  }t          j        |t          j        t          j                  5 }ddlm} |                    |          }t          || j	        | j
        ffcd d d            S # 1 swxY w Y   d S )Nr   )resource_sharer)rN   r5   fromfdr   SOCK_STREAMr%   r  	DupSocketrebuild_connectionrT   rU   )r|  rS   rJ  r  dss        r   reduce_connectionr    s    ]66>63EFF 	J!)))))) **1--B%DM4='II	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js   1A==BBc                 f    |                                  }t          t          |          ||          S r   )r  r   )r  rT   rU   rB   s       r   r  r    s'    yy{{&,,(;;;r   c                     | j         rt          j        nd| j        rt          j        ndz  }t          j        |                                 |          }t          || j         | j        ffS r  )	rT   r   FILE_GENERIC_READrU   FILE_GENERIC_WRITEr   	DupHandlerN   rebuild_pipe_connection)r|  r2  dhs      r   reduce_pipe_connectionr    s^    04D7,,115E7--AG 77&T]DM(JJJr   c                 >    t          t          |           ||          S r   )r   r  )r  rT   rU   s      r   r  r    s    fRjj(H===r   c                 z    t          j        |                                           }t          || j        | j        ffS r   )r   DupFdrN   r  rT   rU   )r|  dfs     r   r  r    s/    _T[[]]++!Bt}#EEEr   c                 >    t          t          |           ||          S r   )r   r  )r  rT   rU   s      r   r  r    s    &**h999r   )NN)TFFr   )Or   r   r)   r2   r5   r  r   r&   	itertoolsr%   r   r   r   r   _extr   compatr	   r
   timer   r   r   r3   r   r  r  r   ImportError__all__r4   is_pypyr#  CONNECTION_TIMEOUTcountr,   r   familiesr   r    r0   r6   r=   r?   rJ   r   r   r   r   r  r   r   r  r   ERROR_SEM_TIMEOUTERROR_PIPE_BUSYr  rj  rk  rn  ro  r   r   rv  r  r  r  r  r  r   ERROR_NETNAME_DELETEDr  r   r   r  r  r  r  r  rH   r   r   <module>r     sF    				 				 



                     1 1 1 1 1 1 1 1       , , , , , , , ,       % % % % % %$ |w-"3+#    
|wGGG 1
0
0
'#*
+
+  	!!;
769 NH<7NH - ! ! ! !  0 0 0
F 
F 
FF F F(       _- _- _- _- _- _- _- _-D  RP P P P P P P PfO O O O O O O Ol5 5 5 5 5 5 5 5p   *" " " <7    .( ( ( (^/ / / / / / / /d! ! ! <76, 6, 6, 6, 6, 6, 6, 6,p &-%>%,%<%> ! ! ! !> 	

? ? ?
> 
> 
>"       &  
  
> > > > >( > > >L L L <7  ( .0MNMC> C> C> C> C>N wvv :	 	 	 	$	: 	: 	:1 1 1 10 <7J J J< < < Iz#4555K K K> > >I~'=>>>>>F F F: : :Iz#455555s   B BB