<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

e f                 @   s  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 d d d g Z	 e j
 d	 k p e e d
  o e e d  o e e j d  Z Gd d   d e j  Z e j Z d d d  Z e j
 d	 k rfe	 d d d g 7Z	 d  d l Z d d d d  Z d d   Z d d   Z d d   Z Gd d   d e  Z nj e	 d d d g 7Z	 d  d l Z e j
 d k Z d d   Z d d   Z d d   Z d d   Z d  d   Z d! d"   Z Gd# d$   d$  Z e e e   j   e  d% d&   Z! e e e" j#  e!  e e e$ j%  e!  d' d(   Z& d) d*   Z' e e j( e&  e j
 d	 k rd+ d,   Z) d- d.   Z* e e j e)  n( d/ d,   Z) d0 d.   Z* e e j e)  d S)1    N   )contextsend_handlerecv_handleForkingPicklerregisterdumpwin32CMSG_LEN
SCM_RIGHTSsendmsgc                   sg   e  Z d  Z d Z i  Z e j Z   f d d   Z e	 d d    Z
 e	 d d d   Z e j Z   S)	r   z)Pickler subclass used by multiprocessing.c                s9   t    j |   |  j j   |  _ |  j j |  j  d  S)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs)	__class__ >/opt/alt/python34/lib64/python3.4/multiprocessing/reduction.pyr   %   s    zForkingPickler.__init__c             C   s   | |  j  | <d S)z&Register a reduce function for a type.N)r   )clstypereducer   r   r   r   *   s    zForkingPickler.registerNc             C   s,   t  j   } |  | |  j |  | j   S)N)ioBytesIOr   	getbuffer)r   objprotocolZbufr   r   r   dumps/   s    zForkingPickler.dumps)__name__
__module____qualname____doc__r   copyregr   r   r   classmethodr   r!   pickleloadsr   r   )r   r   r       s   	c             C   s   t  | |  j |   d S)z3Replacement for pickle.dump() using ForkingPickler.N)r   r   )r   filer    r   r   r   r   9   s    	DupHandle	duplicatesteal_handleFc             C   s@   | d k r t  j   } n  t  j t  j   |  | d | t  j  S)z<Duplicate a handle.  (target_process is a handle not a pid!)Nr   )_winapiGetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handleZtarget_processZinheritabler   r   r   r,   F   s
    c             C   s]   t  j t  j d |   } z0 t  j | | t  j   d d t  j t  j B SWd t  j |  Xd S)z5Steal a handle from process identified by source_pid.Fr   N)r.   OpenProcessPROCESS_DUP_HANDLEr0   r/   r1   DUPLICATE_CLOSE_SOURCECloseHandle)Z
source_pidr2   Zsource_process_handler   r   r   r-   N   s    c             C   s&   t  | t j |  } |  j |  d S)z&Send a handle over a local connection.N)r+   r.   r1   send)connr2   destination_pidZdhr   r   r   r   Z   s    c             C   s   |  j    j   S)z)Receive a handle over a local connection.)recvdetach)r8   r   r   r   r   _   s    c               @   s1   e  Z d  Z d Z d d d  Z d d   Z d S)r+   zPicklable wrapper for a handle.Nc             C   s   | d  k r t  j   } n  t j t j d |  } z+ t j t j   | | | d d  |  _ Wd  t j |  X| |  _	 | |  _
 d  S)NFr   )osgetpidr.   r3   r4   r0   r/   _handler6   _access_pid)r   r2   accesspidprocr   r   r   r   e   s    		zDupHandle.__init__c             C   s{   |  j  t j   k r |  j St j t j d |  j   } z/ t j | |  j t j   |  j	 d t j
  SWd t j |  Xd S)z1Get the handle.  This should only be called once.FN)r@   r<   r=   r>   r.   r3   r4   r0   r/   r?   r5   r6   )r   rC   r   r   r   r;   t   s    zDupHandle.detach)r"   r#   r$   r%   r   r;   r   r   r   r   r+   c   s   DupFdsendfdsrecvfdsdarwinc             C   s~   t  j  d |  } t t |  d g  } |  j | g t j t j | f g  t rz |  j d  d k rz t	 d   n  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   ACKNOWLEDGEr:   RuntimeError)sockZfdsmsgr   r   r   rE      s
    %c             C   sT  t  j  d  } | j | } |  j d t j |   \ } } } } | rZ | rZ t  n  y t rs |  j d  n  t |  d k r t	 d t |    n  | d \ } }	 }
 | t j
 k r(|	 t j k r(t |
  | j d k r t  n  | j |
  t |  d | d k st  t |  SWn t t f k
 rCYn Xt	 d   d S)	z/Receive an array of fds over an AF_UNIX socket.rH   r   rJ   zreceived %d items of ancdatar   rI   zInvalid data receivedN)rK   itemsizeZrecvmsgrN   r
   EOFErrorrP   r7   rM   rQ   rO   r   
ValueErrorZ	frombytesAssertionErrorlist
IndexError)rR   sizeaZ
bytes_sizerS   ZancdataflagsZaddrZ
cmsg_levelZ	cmsg_typeZ	cmsg_datar   r   r   rF      s,    '		 c          
   C   s>   t  j |  j   t  j t  j   } t | | g  Wd QXd S)z&Send a handle over a local connection.N)rN   fromfdfilenoAF_UNIXSOCK_STREAMrE   )r8   r2   r9   sr   r   r   r      s    $c          
   C   s?   t  j |  j   t  j t  j   } t | d  d SWd QXd S)z)Receive a handle over a local connection.r   r   N)rN   r]   r^   r_   r`   rF   )r8   ra   r   r   r   r      s    $c             C   sa   t  j   } | d k	 r. | j | j |    St rQ d d l m } | j |   St d   d S)zReturn a wrapper for an fd.Nr   )resource_sharerz&SCM_RIGHTS appears not to be available)r   Zget_spawning_popenrD   Zduplicate_for_childHAVE_SEND_HANDLE rb   rV   )fdZ	popen_objrb   r   r   r   rD      s    c             C   sE   |  j  d  k r( t |  j |  j j f f St |  j  |  j j f f Sd  S)N)__self__getattrr   __func__r"   )mr   r   r   _reduce_method   s    rj   c               @   s   e  Z d  Z d d   Z d S)_Cc             C   s   d  S)Nr   )r   r   r   r   f   s    z_C.fN)r"   r#   r$   rl   r   r   r   r   rk      s   rk   c             C   s   t  |  j |  j f f S)N)rg   __objclass__r"   )ri   r   r   r   _reduce_method_descriptor   s    rn   c             C   s"   t  |  j |  j |  j p i  f f S)N)_rebuild_partialfuncr   keywords)pr   r   r   _reduce_partial   s    rs   c             C   s   t  j |  | |  S)N)	functoolspartial)rp   r   rq   r   r   r   ro      s    ro   c             C   s#   d d l  m } t | |   f f S)Nr   )	DupSocket)rb   rv   _rebuild_socket)ra   rv   r   r   r   _reduce_socket   s    rx   c             C   s
   |  j    S)N)r;   )Zdsr   r   r   rw      s    rw   c             C   s1   t  |  j    } t | |  j |  j |  j f f S)N)rD   r^   rw   familyr   proto)ra   dfr   r   r   rx      s    c             C   s%   |  j    } t j | | | d | S)Nr^   )r;   rN   )r{   ry   r   rz   re   r   r   r   rw      s    )+r&   rt   r   r<   r(   rN   sysrd   r   __all__platformhasattrrc   ZPicklerr   r   r   r.   r,   r-   r   r   objectr+   rK   rP   rE   rF   rD   rj   rk   r   rl   rn   rX   appendint__add__rs   ro   ru   rx   rw   r   r   r   r   <module>
   s^   	#