
    Sf$                     j   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 g dZej	        d          dk    Z
ej        dk    p( eed          o eed          o eej        d	          Ze
rd dlZ G d
 dej                  Zn G d dej                  Zej        Zd(dZej        dk    r(eg dz  ZddlmZ d)dZd Zd Zd Z G d d          Zn%eg dz  Zd dlZej        dk    Zd Zd Zd Zd Zd Zd Z G d d           Z  e e! e             j"                  e           d! Z# e e!e$j%                  e#            e e!e&j'                  e#           d" Z(d# Z) ee j*        e(           ej        dk    rd$ Z+d% Z, eej        e+           dS d& Z+d' Z, eej        e+           dS )*    N   )context)send_handlerecv_handleForkingPicklerregisterdump   win32CMSG_LEN
SCM_RIGHTSsendmsgc                        e Zd ZdZi Zej        Z fdZe	d             Z
e	dd            Ze	dd            Zej        Z xZS )r   )Pickler subclass used by multiprocessing.c                      t          t          |           j        |  | j                                        | _        | j                            | j                   d S N)superr   __init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs	__class__s     D/var/www/html/env/lib/python3.11/site-packages/billiard/reduction.pyr   zForkingPickler.__init__*   sT    0E.$''0$77"&">"C"C"E"ED&&t';<<<<<    c                     || j         |<   dS )&Register a reduce function for a type.N)r   )clstypereduces      r   r   zForkingPickler.register/   s     )/C%%%r   Nc                     t          j                    } | ||                              |           |                                S r   )ioBytesIOr	   	getbufferr!   objprotocolbufs       r   dumpszForkingPickler.dumps4   s;    *,,CCX##C(((==??"r   c                 P    |                      |                                          S r   )loadsr'   r!   r+   r*   s      r   loadbufzForkingPickler.loadbuf:   s    99S]]__---r   r   )__name__
__module____qualname____doc__r   copyregr   r   r   classmethodr   r,   r0   pickler.   __classcell__)r   s   @r   r   r   %   s        77")"8	= 	= 	= 	= 	=
 
	/ 	/ 
	/ 
	# 	# 	# 
	#
 
	. 	. 	. 
	. r   r   c                       e Zd ZdZej        j                                        Zed             Z	edd            Z
edd            Zeej        fd            ZdS )r   r   c                 &    fd}|| j         |<   dS )r    c                 8     |          } | j         |d|i d S )Nr)   )save_reduce)r   r)   rvr#   s      r   
dispatcherz+ForkingPickler.register.<locals>.dispatcherI   s.    VC[[  2.S.....r   N)dispatch)r!   r"   r#   r>   s     ` r   r   zForkingPickler.registerF   s0    / / / / / ",CLr   Nc                     t          j                    } | ||                              |           |                                S r   )r%   r&   r	   getvaluer(   s       r   r,   zForkingPickler.dumpsN   s;    *,,CCX##C(((<<>>!r   c                 P    |                      |                                          S r   )r.   rA   r/   s      r   r0   zForkingPickler.loadbufT   s    99S\\^^,,,r   c                 t    t          |t          j                  r|                                } ||          S r   )
isinstancer%   r&   rA   )r!   r+   r.   s      r   r.   zForkingPickler.loadsX   s1    #rz** %llnn5::r   r   )r1   r2   r3   r4   r7   Picklerr?   r   r6   r   r,   r0   r.    r   r   r   r   B   s        77>*//11		, 	, 
	, 
	" 	" 	" 
	"
 
	- 	- 	- 
	- 
"(, 	 	 	 
	 	 	r   c                 L    t          ||                              |            dS )z3Replacement for pickle.dump() using ForkingPickler.N)r   r	   )r)   filer*   s      r   r	   r	   `   s&    4""'',,,,,r   )	DupHandle	duplicatesteal_handle)_winapiFc                     |t          j                    }t          j        t          j                    | |d|t           j                  S )z<Duplicate a handle.  (target_process is a handle not a pid!)Nr   )rL   GetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handletarget_processinheritables      r   rJ   rJ   m   sE    !$688N&%''{G9; ; 	;r   c           	          t          j        t           j        d|           }	 t          j        ||t          j                    ddt           j        t           j        z            t          j        |           S # t          j        |           w xY w)z5Steal a handle from process identified by source_pid.Fr   )rL   OpenProcessPROCESS_DUP_HANDLErO   rN   rP   DUPLICATE_CLOSE_SOURCECloseHandle)
source_pidrQ   source_process_handles      r   rK   rK   u   s     ' 3&z!; !;	7*%v)++Q-0NNP P
  56666G 56666s   A A7 7Bc                 f    t          |t          j        |          }|                     |           dS z&Send a handle over a local connection.N)rI   rL   rP   send)connrQ   destination_piddhs       r   r   r      s)    vw<oNN		"r   c                 N    |                                                                  S ))Receive a handle over a local connection.)recvdetach)r^   s    r   r   r      s    yy{{!!###r   c                        e Zd ZdZddZd ZdS )rI   zPicklable wrapper for a handle.Nc                 H   |t          j                    }t          j        t          j        d|          }	 t          j        t          j                    |||dd          | _        t          j        |           n# t          j        |           w xY w|| _	        || _
        d S )NFr   )osgetpidrL   rU   rV   rO   rN   _handlerX   _access_pid)r   rQ   accesspidprocs        r   r   zDupHandle.__init__   s    { ikk&w'A5#NND*&6-//D&% 4  4 #D))))#D))))!DLDIIIs   /A; ;Bc                 j   | j         t          j                    k    r| j        S t	          j        t          j        d| j                   }	 t	          j        || j        t	          j                    | j	        dt          j
                  t	          j        |           S # t	          j        |           w xY w)z1Get the handle.  This should only be called once.F)rk   rg   rh   ri   rL   rU   rV   rO   rN   rj   rW   rX   )r   rn   s     r   rd   zDupHandle.detach   s     yBIKK''|#&w'A5'+y2 2D*.$,(A(C(CL%)GI I #D))))#D))))s   
=B B2r   )r1   r2   r3   r4   r   rd   rF   r   r   rI   rI      s=        --	 	 	 		* 	* 	* 	* 	*r   rI   )DupFdsendfdsrecvfdsdarwinc                 0   t          j         d|          }t          t          |          dz  g          }|                     |gt          j        t          j        |fg           t          r(|                     d          dk    rt          d          dS dS )z,Send an array of fds over an AF_UNIX socket.i   r      Az%did not receive acknowledgement of fdN)
arraybyteslenr   socket
SOL_SOCKETr   ACKNOWLEDGErc   RuntimeError)sockfdsmsgs      r   rq   rq      s    k#s##SXX^$%%cUf/1BCHIJJJ 	H499Q<<4//FGGG	H 	H//r   c                    t          j         d          }|j        |z  }|                     dt          j        |                    \  }}}}|s	|st
          	 t          r|                     d           t          |          dk    rt          dt          |          z            |d         \  }}	}
|t          j
        k    rt|	t          j        k    rdt          |
          |j        z  dk    rt          |                    |
           t          |          dz  |d         k    sJ t          |          S n# t          t          f$ r Y nw xY wt          d          )z/Receive an array of fds over an AF_UNIX socket.ru   r   rw   zreceived %d items of ancdatar   rv   zInvalid data received)rx   itemsizerecvmsgr{   r   EOFErrorr}   r]   rz   r~   r|   r   
ValueError	frombyteslist
IndexError)r   sizea
bytes_sizer   ancdataflagsaddr
cmsg_level	cmsg_type	cmsg_datas              r   rr   rr      sh   KZ$&
$(LLvz**%
 %
!WeT  	7 	N	  		$7||q  "2S\\A   07qz,J	9f///!222y>>AJ.!33$$I&&&1vv|s1v----AwwJ' 	 	 	D	2333s   CD7 7E
Ec                     |                                  }t          j        |t          j        t          j                  5 }t          ||g           ddd           dS # 1 swxY w Y   dS r\   )filenor{   fromfdAF_UNIXSOCK_STREAMrq   )r^   rQ   r_   fdss        r   r   r      s    [[]]]2v~v/ABB 	!aAx   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   AA"%A"c                     |                                  }t          j        |t          j        t          j                  5 }t          |d          d         cddd           S # 1 swxY w Y   dS )rb   r   r   N)r   r{   r   r   r   rr   )r^   r   r   s      r   r   r      s    [[]]]2v~v/ABB 	$a1a==#	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   A""A&)A&c                     t          j                    }|(|                    |                    |                     S t          rddlm} |                    |           S t          d          )zReturn a wrapper for an fd.Nr   )resource_sharerz&SCM_RIGHTS appears not to be available)r   get_spawning_popenrp   duplicate_for_childHAVE_SEND_HANDLE r   r   )r   	popen_objr   s      r   rp   rp      st    .00	 ??9#@#@#D#DEEE 	G))))))"((,,,EFFFr   c                 x    | j         t          | j        | j        j        ffS t          | j         | j        j        ffS r   )__self__getattrr   __func__r1   ms    r   _reduce_methodr      s8    zaj&9:::QZ%8999r   c                       e Zd Zd ZdS )_Cc                     d S r   rF   )r   s    r   fz_C.f   s    r   N)r1   r2   r3   r   rF   r   r   r   r      s#            r   r   c                 ,    t           | j        | j        ffS r   )r   __objclass__r1   r   s    r   _reduce_method_descriptorr      s    Q^QZ000r   c                 <    t           | j        | j        | j        pi ffS r   )_rebuild_partialfuncr   keywords)ps    r   _reduce_partialr     s    afafaj.>B???r   c                 ,    t          j        | g|R i |S r   )	functoolspartial)r   r   r   s      r   r   r   
  s#    T5D555H555r   c                 4    ddl m} t           ||           ffS )Nr   )	DupSocket)r   r   _rebuild_socket)r   r   s     r   _reduce_socketr     s)    ......1//r   c                 *    |                                  S r   )rd   )dss    r   r   r     s    yy{{r   c                 |    t          |                                           }t          || j        | j        | j        ffS r   )rp   r   r   familyr"   proto)r   dfs     r   r   r     s1    188::QXqvqw ???r   c                 Z    |                                  }t          j        ||||          S )N)r   )rd   r{   )r   r   r"   r   r   s        r   r   r   "  s(    YY[[}VT5<<<<r   r   )NF)-r   r%   rg   r7   r{   sysr   r   __all__version_infoPY3platformhasattrr   r5   rE   r   r   r	   compatrL   rJ   rK   r   r   rI   rx   r}   rq   rr   rp   r   r   r"   r   r   r   appendint__add__r   r   r   r   r   rF   r   r   <module>r      s       				 				   



      
N
N
N	qQ LG+ 8WVZ00 7WV\227WV]I66   :NNN        :       6 "- - - - <79999G; ; ; ;
7 
7 
7  
$ $ $* * * * * * * * *F ....GLLL ,(*KH H H4 4 48! ! !$ $ $	G 	G 	G : : :        	bbddf~ & & &1 1 1 dk		5 6 6 6 ck		5 6 6 6@ @ @6 6 6 	O , , , <70 0 0  HV]N+++++@ @ @= = = HV]N+++++r   