
    ds{                        g d Z ddlZddlZddlZddlZddlZddlZddlZddl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	 ddlZddlmZmZmZmZ n# e$ r ej        dk    r dZY nw xY w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%er G d de%          Z& G d de%          Z' G d de(          Z)d<dZ*ej        dk    rd=dZ+nd=dZ+ G d d e(          Z,d! Z-ej        dk    r G d" d#e(          Z.d$ Z/d%Z0d&Z1d'Z2d(Z3d) Z4d* Z5 G d+ d,e(          Z6d- Z7d. Z8 G d/ d0e)          Z9d1 Z:ej        dk    rd2 Z;ej<        ej=        hZ>d>d3Z?n#ddl@Z@ ee@d4          re@jA        ZBne@jC        ZBd>d5Z?ej        dk    r0d6 ZDd7 ZE ejF        e'eD           d8 ZGd9 ZH ejF        e&eG           dS d: ZDd; ZE ejF        e'eD           dS )?)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                 .    t          j                    | z   S Ntime	monotonic)timeouts    ,  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/multiprocessing/connection.py_init_timeoutr   ;   s    >g%%    c                 0    t          j                    | k    S r   r   )ts    r   _check_timeoutr   >   s    >a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_addressr/   E   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_familyr5   S   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 st	          j        |           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   is_abstract_socket_namespacer,   )addresss    r   address_typer=   _   s}     G}}y	g#		'"4"4V"<"<	y	g#		!B7!K!K	y:WDEEEr   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S )_ConnectionBaseNTc                     |                                 }|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writables       r   __init__z_ConnectionBase.__init__u   sm    !!##A::-... 	J 	JHJ J J!!r   c                 @    | j         |                                  d S d S r   rB   _closerE   s    r   __del__z_ConnectionBase.__del__   s#    <#KKMMMMM $#r   c                 2    | j         t          d          d S )Nzhandle is closed)rB   OSErrorrM   s    r   _check_closedz_ConnectionBase._check_closed   s!    <,---  r   c                 2    | j         st          d          d S )Nzconnection is write-only)rC   rP   rM   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)rD   rP   rM   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)rD   rC   closerP   rM   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rB   rM   s    r   closedz_ConnectionBase.closed   s     |t##r   c                     | j         S )z"True if the connection is readable)rC   rM   s    r   rG   z_ConnectionBase.readable        ~r   c                     | j         S )z"True if the connection is writable)rD   rM   s    r   rH   z_ConnectionBase.writable   r]   r   c                 8    |                                   | j        S )z+File descriptor or handle of the connection)rQ   rB   rM   s    r   filenoz_ConnectionBase.fileno   s    |r   c                 h    | j         *	 |                                  d| _         dS # d| _         w xY wdS )zClose the connectionNrK   rM   s    r   rW   z_ConnectionBase.close   sB    <#$#t####	 $#s   & 	/r   c                    |                                   |                                  t          |          }|j        dk    r|                    d          }|j        }|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   Br   zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rQ   rU   
memoryviewitemsizecastnbytesr,   _send_bytes)rE   bufoffsetsizemns         r   
send_bytesz_ConnectionBase.send_bytes   s    sOO:>>sAH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                              |                     dS )zSend a (picklable) objectN)rQ   rU   rh   _ForkingPicklerdumpsrE   objs     r   sendz_ConnectionBase.send   sN    ..s3344444r   c                     |                                   |                                  ||dk     rt          d          |                     |          }||                                  |                                S )z7
        Receive bytes data as a bytes object.
        Nr   znegative maxlength)rQ   rS   r,   _recv_bytesrX   getvalue)rE   	maxlengthri   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)rQ   rS   rd   re   lenr,   rv   tellr
   rw   seekreadinto)rE   ri   rj   rl   re   bytesizeresultrk   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OOAf0%}9: ; < < <!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   CDDDc                     |                                   |                                  |                                 }t                              |                                          S )zReceive a (picklable) object)rQ   rS   rv   rp   loads	getbuffer)rE   ri   s     r   recvz_ConnectionBase.recv   sS      $$S]]__555r           c                 |    |                                   |                                  |                     |          S )z/Whether there is any input available to be read)rQ   rS   _pollrE   r   s     r   pollz_ConnectionBase.poll   s8    zz'"""r   c                     | S r    rM   s    r   	__enter__z_ConnectionBase.__enter__      r   c                 .    |                                   d S r   rW   rE   exc_type	exc_valueexc_tbs       r   __exit__z_ConnectionBase.__exit__      

r   )TT)r   Nr   )r   )r   )__name__
__module____qualname__rB   rI   rN   rQ   rS   rU   rX   propertyr[   rG   rH   r`   rW   rn   rt   ry   r   r   r   r   r   r   r   r   r?   r?   r   ss       G	" 	" 	" 	"  . . .6 6 65 5 5, , , $ $ X$   X   X  
$ $ $2 2 2 2(5 5 5      26 6 6# # # #      r   r?   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   rZ   )rE   _CloseHandles     r   rL   zPipeConnection._close  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   )_winapi	WriteFilerB   ERROR_IO_PENDINGWaitForMultipleObjectseventr   r   cancelGetOverlappedResultr{   )rE   ri   overrwaitresnwrittens         r   rh   zPipeConnection._send_bytes  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   ReadFilerB   r   r   r   r   r   r   r   writer   ERROR_MORE_DATA_get_more_datarP   winerrorERROR_BROKEN_PIPEEOFErrorRuntimeError)	rE   maxsizebsizer   r   r   nreadfes	            r   rv   zPipeConnection._recv_bytes%  s   & */'z||#&C4E4E%.t|U;?A A A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%>>>&	
 OPPPsg   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   PeekNamedPiperB   boolr   r   s     r   r   zPipeConnection._pollE  sI    ' -dl;;A>!CC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   rB   r{   rX   r   r   )rE   r   r   ri   r   leftr   rbytess           r   r   zPipeConnection._get_more_dataK  s    ,,..C
AGGCLLL(66q9D!8888"s3xx$'@'@((***&t|TdKKKGB0066KFC!8888T>>>>GGBLLNN###Hr   r   )r   r   r   __doc__r   r   CloseHandlerL   rh   rv   r   r   r   r   r   r   r     s        	 	
 #&-&9 	' 	' 	' 	'	( 	( 	(	Q 	Q 	Q 	Q@	/ 	/ 	/	 	 	 	 	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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   rZ   rE   rL   s     r   rL   zConnection._closeb      F4<     r   c                 &     || j                    d S r   rZ   r   s     r   rL   zConnection._closeg  r   r   c                 t    t          |          }	  || j        |          }||z  }|dk    rd S ||d          }))NTr   )r{   rB   )rE   ri   r   	remainingrm   s        r   _sendzConnection._sendl  sN    HH		dlC((ANIA~~abb'C	r   c                    t          j                    }| j        }|}|dk    r] |||          }t          |          }|dk    r||k    rt          t          d          |                    |           ||z  }|dk    ]|S )Nr   zgot end of file during message)r   r   rB   r{   r   rP   r   )rE   rk   readri   rF   r   chunkrm   s           r   _recvzConnection._recvu  s    jll	!mmD++EE

AAvv$$"N!"BCCCIIeNI !mm 
r   c                    t          |          }|dk    rkt          j        dd          }t          j        d|          }|                     |           |                     |           |                     |           d S t          j        d|          }|dk    r,|                     |           |                     |           d S |                     ||z              d S )Ni!i!Qi @  )r{   structpackr   )rE   ri   rm   
pre_headerheaders        r   rh   zConnection._send_bytes  s    HHz>>T2..J[q))FJJz"""JJvJJsOOOOO [q))F5yy 

6"""

3 

6C<(((((r   Nc                 D   |                      d          }t          j        d|                                          \  }|dk    r>|                      d          }t          j        d|                                          \  }|||k    rd S |                      |          S )N   r   r      r   )r   r   unpackrw   )rE   r   ri   rk   s       r   rv   zConnection._recv_bytes  s    jjmmdCLLNN332::**Q--CM$77ED4'>>4zz$r   c                 B    t          | g|          }t          |          S r   )r   r   )rE   r   rs      r   r   zConnection._poll  s    $!!Awwr   r   )r   r   r   r   r   _multiprocessingclosesocketrL   rt   _writer   _readr(   rW   r   r   r   r   rh   rv   r   r   r   r   r   r   [  s         
  	 0 < 	! 	! 	! 	!!& % " 	! 	! 	! 	!%      %     ) ) ).           r   r   c                   ^    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|r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_familyr/   r5   PipeListener	_listenerSocketListener
isinstancebytes	TypeError_authkey)rE   r<   r.   backlogauthkeys        r   rI   zListener.__init__  s     #G=W(=(= #" 	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   rP   acceptr   deliver_challengeanswer_challenge)rE   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   rW   )rE   listeners     r   rW   zListener.close  s6     >!DNNN  r   c                     | j         j        S r   )r   _addressrM   s    r   r<   zListener.address  s    ~&&r   c                     | j         j        S r   )r   _last_acceptedrM   s    r   last_acceptedzListener.last_accepted  s    ~,,r   c                     | S r   r   rM   s    r   r   zListener.__enter__  r   r   c                 .    |                                   d S r   r   r   s       r   r   zListener.__exit__  r   r   )NNr   N)r   r   r   r   rI   r   rW   r   r<   r   r   r   r   r   r   r   r     s                      ' ' X' - - X-      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=   r5   
PipeClientSocketClientr   r   r   r   r   )r<   r.   r   r   s       r   r   r     s     ,|G,,FVw!!:gu#=#=9:::G$$$!W%%%Hr   Tc                    | rt          j                    \  }}|                    d           |                    d           t          |                                          }t          |                                          }n8t          j                    \  }}t          |d          }t          |d          }||fS )L
        Returns pair of connection objects at either end of a pipe
        TFrH   rG   )r4   
socketpairsetblockingr   detachr(   pipe)duplexs1s2c1c2fd1fd2s          r   r   r     s      		1&((FBNN4   NN4   BIIKK((BBIIKK((BBwyyHCC%000BC%000B2vr   c           
      &   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  r   r   r   NTr   r  r  )r/   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<   openmodeaccessobsizeibsizeh1h2r   _r   r  r  s                r   r   r     sb    $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        |          s*t#          j        | t          j        |fd          | _        d S d | _        d S )Nposixr   Tr   r   argsexitpriority)r4   getattr_socketr(   name
setsockopt
SOL_SOCKETSO_REUSEADDRr
  bindlistengetsocknamer   rP   rW   _familyr   r   r;   Finalizeunlink_unlink)rE   r<   r.   r   s       r   rI   zSocketListener.__init__F  sF   }WVV%<%<==	w'!!''(9(.(;Q@ @ @L$$T***Lg&&&L((( L4466DMM 	 	 	L   	 "Yt'H'Q'Q=biwjq  DLLL  DLLLs   B,C %D c                     | j                                         \  }| _        |                    d           t	          |                                          S )NT)r4  r   r   r
  r   r  rE   ss     r   r   zSocketListener.accept_  sE    !%!4!4!6!64	d!((**%%%r   c                     	 | j                                          | j        }|d | _         |             d S d S # | j        }|d | _         |             w w xY wr   )r4  rW   r?  )rE   r>  s     r   rW   zSocketListener.closed  sr    	L   \F!# "! \F!# "s	   9 AN)r   )r   r   r   r   rI   r   rW   r   r   r   r   r   B  sP                2& & &
    r   r   c                 8   t          |           }t          j        t          t          |                    5 }|                    d           |                    |            t          |                                          cddd           S # 1 swxY w Y   dS )zO
    Return a connection object connected to the socket given by `address`
    TN)r=   r4   r3  r
  connectr   r  )r<   r.   rB  s      r   r  r  n  s     '""F	//	1	1 &Q	d			'!((**%%& & & & & & & & & & & & & & & & & &s   ABBB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   r0  )
r   _new_handle_handle_queuer   r   	sub_debugr=  r   _finalize_pipe_listenerrW   )rE   r<   r   s      r   rI   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!  )rE   rH  flagss      r   rI  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)rJ  appendrI  popr   r%  r   r   r   r   r   r   rP   r   ERROR_NO_DATAr   )rE   rF   r   resr,  r   r   s          r   r   zPipeListener.accept  sT   %%d&6&6&8&8999'++A..F$-fFFF	$!8
E85 5CCIIKKK'///   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   rK  r   r   )queuer<   rF   s      r   rL  z$PipeListener._finalize_pipe_listener  sB    N=wGGG , ,#F++++, ,r   r   )F)	r   r   r   r   rI   rI  r   staticmethodrL  r   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                  }nG# t          $ r9}|j
        t          j        t          j        f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  rP   r   ERROR_SEM_TIMEOUTERROR_PIPE_BUSYr   r$  r  r   )r<   r   hr   s       r   r  r    s    OO	%gt444&W1G4IIw|W%:0',      :g&?&-&=&? ? ?BPQRBSBS?? ? ? ? ?	" 	'w,dD	 	 	 a   s   A.B   
C
/B>>C   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c                    dd l }t          |t                    s/t          d                    t          |                              t          j        t                    }| 	                    t          |z              |                    ||d                                          }|                     d          }||k    r| 	                    t                     d S | 	                    t                     t!          d          )Nr    Authkey must be bytes, not {0!s}md5   zdigest received was wrong)hmacr   r   r,   formatr7   r(   urandomMESSAGE_LENGTHrn   	CHALLENGEnewdigestry   WELCOMEFAILUREr	   
connectionr   rc  messageri  responses         r   r   r     s    KKKgu%% F.55d7mmDDF F 	Fj((G)g-...XXgw..5577F$$S))H6g&&&&&g&&&!"=>>>r   c                 6   dd l }t          |t                    s/t          d                    t          |                              |                     d          }|d t          t                             t          k    sJ d|z              |t          t                    d          }|	                    ||d          
                                }|                     |           |                     d          }|t          k    rt          d          d S )Nr   r`  rb  zmessage = %rra  zdigest sent was rejected)rc  r   r   r,   rd  r7   ry   r{   rg  rh  ri  rn   rj  r	   rl  s         r   r   r     s   KKKgu%% F.55d7mmDDF F 	F##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)r`   rW   r   ry   rn   )_conn_dumps_loadsr3  setattr)rE   connrq   r   attrrs   s         r   rI   zConnectionWrapper.__init__  sT    
K 	% 	%D$%%CD$$$$$	% 	%r   c                 d    |                      |          }| j                            |           d S r   )ru  rt  rn   )rE   rs   rB  s      r   rt   zConnectionWrapper.send  s/    KK
a     r   c                 ^    | j                                         }|                     |          S r   )rt  ry   rv  rA  s     r   r   zConnectionWrapper.recv  s%    J!!##{{1~~r   N)r   r   r   rI   rt   r   r   r   r   rr  rr    sA        % % %! ! !    r   rr  c                 f    t                               | fd d d d                              d          S )Nr   utf-8)	xmlrpclibrq   encode)rs   s    r   
_xml_dumpsr    s,    ??C64tQ77>>wGGGr   c                 j    t                               |                     d                    \  \  }}|S )Nr}  )r~  r   decode)rB  rs   methods      r   
_xml_loadsr    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   rr  r  r  rr   s     r   r   zXmlListener.accept  s7    ))))))ood## j*===r   N)r   r   r   r   r   r   r   r  r    s#        > > > > >r   r  c                  X    dd l ma t          t	          | i |t
          t                    S r  )r  r  r~  rr  r   r  r  )r1  kwdss     r   	XmlClientr    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   r   r   r{   r   r   rQ  )handlesr   LreadyrT  s        r   _exhaustive_waitr  $  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%&&	AG  	 r   c                   
 |t           }n|dk     rd}nt          |dz  dz             }t          |           } i g }t                      
t                      }	 | D ]B}	 t	          |d          }	 t          j         |            dd          \  }}n*# t          $ r}d|j        }}|t          vr Y d}~nd}~ww xY w|t
          j
        k    r |                    |           ||j        <   |rpt          j                    dd         dk    rQ	 |                    d	          \  }	}n# t          $ r}|j        }Y d}~nd}~ww xY w|st!          |d
          rd|_        
                    |           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   rY  g      ?r`   T   )   r  Fr   c              3   (   K   | ]}|         V  d S r   r   ).0r]  waithandle_to_objs     r   	<genexpr>zwait.<locals>.<genexpr>  s)      IIa.q1IIIIIIr   c                     g | ]}|v |	S r   r   )r  oready_objectss     r   
<listcomp>zwait.<locals>.<listcomp>  s#    ===a!}*<*<*<*<*<r   )r   intr  setr3  r   r   rP   r   _ready_errorsr   rQ  r   r1   getwindowsversionr   r3   r   addAttributeErrorrA   r  keysr   ERROR_OPERATION_ABORTEDupdate)object_listr   ov_listready_handlesr  r`   r   r   r   r,  r  r  s             @@r   r   r   :  sX    ?GGq[[GG'D.3.//G;''6	8  $ $$$Q11F
"")"26688Q"E"ECC" " " ""&
Cm33! 43333" g666r***67)"(33
  <#"7"9"9"1""="G"G1)+)?)?)F)F33#* 1 1 1&'j1#& <716J+K+K <7; 4%))!,,,"#7 & 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   I3 !E92!BI3 
B;B61I3 6B;;AI3 D)(I3 )
E3D?:I3 ?E5I3 9!FI3 F%I3 !G::
HHH3L$J+*L$+
K	5K	L$K	AL$PollSelectorc                 n   t                      5 }| D ]"}|                    |t          j                   #|t	          j                    |z   }	 |                    |          }|rd |D             cddd           S |*|t	          j                    z
  }|dk     r|cddd           S \# 1 swxY w Y   dS )r  NTc                 "    g | ]\  }}|j         S r   )fileobj)r  keyeventss      r   r  zwait.<locals>.<listcomp>  s    CCCMS&CKCCCr   r   )_WaitSelectorregister	selectors
EVENT_READr   r   select)r  r   selectorrs   deadliner  s         r   r   r     s4    __ 	)" = =!!#y';<<<<">++g5) 00 )CCUCCC	) 	) 	) 	) 	) 	) 	) 	) *"*T^-=-="="Q;;#(	) 	) 	) 	) 	) 	) 	) 	))	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   A!B*=B*)B**B.1B.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)r`   r4   fromfdr   SOCK_STREAMr$   r  	DupSocketrebuild_connectionrG   rH   )rx  rF   rB  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                 p    |                                  }t          |                                 ||          S r   r  r   )r  rG   rH   socks       r   r  r    s)    yy{{$++--8<<<r   c                     | j         rt          j        nd| j        rt          j        ndz  }t          j        |                                 |          }t          || j         | j        ffS r  )	rG   r   FILE_GENERIC_READrH   FILE_GENERIC_WRITEr   	DupHandler`   rebuild_pipe_connection)rx  r'  dhs      r   reduce_pipe_connectionr    s^    04D7,,115E7--AG 77&T]DM(JJJr   c                 L    |                                  }t          |||          S r   )r  r   )r  rG   rH   rF   s       r   r  r    s!    fh999r   c                 z    t          j        |                                           }t          || j        | j        ffS r   )r   DupFdr`   r  rG   rH   )rx  dfs     r   r  r    s/    _T[[]]++!Bt}#EEEr   c                 L    |                                  }t          |||          S r   r  )r  rG   rH   fds       r   r  r    s!    YY[["h111r   )NN)Tr   )I__all__r   r(   r1   r4   r   r   r%   	itertoolsr   r$   r   r	   r
   contextr   ForkingPicklerrp   r   r   r   r   r   ImportErrorr2   r  CONNECTION_TIMEOUTcountr+   r   familiesr3   r   r   r/   r5   r=   r?   r   r   objectr   r   r   r   r  r   r  rf  rg  rj  rk  r   r   rr  r  r  r  r  r  r   ERROR_NETNAME_DELETEDr  r   r  r  r  SelectSelectorr  r  r  r  r  r   r   r   <module>r     s   3
2
2 				 				 



                   1 1 1 1 1 1 1 1      *NNNOOOOOOOOOOOOO   
|wGGG  	!!;
769 NH<7NH - & & & &     0 0 0
F 
F 
FF F F&T T T T T T T Tn  OM M M M M M M M`M M M M M M M Mh: : : : :v : : :z   * <7    && & & &X) ) ) ) )V ) ) )X& & & <76, 6, 6, 6, 6,v 6, 6, 6,p! ! !> 	

? ? ?> > >$       H H H  > > > > >( > > >L L L <7  ( .0MNML> L> L> L> L>` 
 wy.)) 1!.!0) ) ) )6 <7J J J= = = Iz#4555K K K
: : : I~'=>>>>>F F F2 2 2 Iz#455555s   A A,+A,