U e5d(%ã@sddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z ddddd gZ ej d kp†e ed ƒo†e ed ƒo†e ejd ƒZGdd„dejƒZejZd6dd „Zej d k�re dddg7Z ddlZd7ddœdd„Zdd„Zdd„Zdd„ZGdd„deƒZnHe dddg7Z ddlZej dkZdd„Zdd„Zd d„Zd!d„Zd"d„Zd#d$„ZGd%d&„d&ƒZ ee!e ƒj"ƒeƒd'd(„Z#ee!e$j%ƒe#ƒee!e&j'ƒe#ƒd)d*„Z(d+d,„Z)eej*e(ƒej d k�räd-d.„Z+d/d0„Z,eeje+ƒnd1d.„Z+d2d0„Z,eeje+ƒGd3d4„d4ed5�Z-dS)8é)ÚABCMetaNé)ÚcontextÚ send_handleÚ recv_handleÚForkingPicklerÚregisterÚdumpÚwin32ZCMSG_LENÚ SCM_RIGHTSÚsendmsgcsFeZdZiZejZ‡fdd„Zedd„ƒZ eddd„ƒZ e j Z ‡Z S) rcs*tƒj|Ž|j ¡|_|j |j¡dS©N)ÚsuperÚ__init__Ú_copyreg_dispatch_tableÚcopyÚdispatch_tableÚupdateÚ_extra_reducers©ÚselfÚargs©Ú __class__©ú1/usr/lib64/python3.8/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dSr )r)ÚclsÚtypeÚreducerrrr+szForkingPickler.registerNcCs t ¡}|||ƒ |¡| ¡Sr )ÚioÚBytesIOr Ú getbuffer)rÚobjÚprotocolZbufrrrÚdumps0szForkingPickler.dumps)N)Ú__name__Ú __module__Ú __qualname__rÚcopyregrrrÚ classmethodrr$ÚpickleÚloadsÚ __classcell__rrrrr!s   cCst||ƒ |¡dSr )rr )r"Úfiler#rrrr :sÚ DupHandleÚ duplicateÚ steal_handleF)Úsource_processcCs6t ¡}|dkr|}|dkr |}t |||d|tj¡S)Nr)Ú_winapiÚGetCurrentProcessÚDuplicateHandleÚDUPLICATE_SAME_ACCESS)ÚhandleZtarget_processZ inheritabler1Zcurrent_processrrrr/Gsþc CsFt tjd|¡}z$t ||t ¡ddtjtjB¡W¢St |¡XdS©NFr)r2Ú OpenProcessÚPROCESS_DUP_HANDLEÚ CloseHandler4r3r5ÚDUPLICATE_CLOSE_SOURCE)Z source_pidr6Zsource_process_handlerrrr0Ssÿ ýcCst|tj|ƒ}| |¡dSr )r.r2r5Úsend)Úconnr6Údestination_pidZdhrrrr_scCs | ¡ ¡Sr )ÚrecvÚdetach)r=rrrrdsc@seZdZddd„Zdd„ZdS)r.Nc Cs\|dkrt ¡}t tjd|¡}zt t ¡|||dd¡|_W5t |¡X||_ ||_ dSr7) ÚosÚgetpidr2r8r9r:r4r3Ú_handleÚ_accessÚ_pid)rr6ÚaccessÚpidÚprocrrrrjsþ  zDupHandle.__init__c CsZ|jt ¡kr|jSt tjd|j¡}z"t ||jt  ¡|j dtj ¡W¢St |¡XdS)NF) rErArBrCr2r8r9r:r4r3rDr;)rrHrrrr@ys ÿþzDupHandle.detach)N)r%r&r'rr@rrrrr.hs ÚDupFdÚsendfdsÚrecvfdsÚdarwincCsVt d|¡}tt|ƒdgƒ}| |gtjtj|fg¡trR| d¡dkrRt dƒ‚dS)NÚiéróAz%did not receive acknowledgement of fd) ÚarrayÚbytesÚlenr ÚsocketÚ SOL_SOCKETr Ú ACKNOWLEDGEr?Ú RuntimeError)ÚsockZfdsÚmsgrrrrJ‘s  c Cst d¡}|j|}| dt |¡¡\}}}}|s:|s:t‚z¦trJ| d¡t|ƒdkrft dt|ƒƒ‚|d\}} } |tj krÞ| tj krÞt| ƒ|jdkržt ‚|  | ¡t|ƒd|dkrÔtd t|ƒ|d¡ƒ‚t|ƒWSWnt tfk røYnXt dƒ‚dS) NrMrrOzreceived %d items of ancdatarrNz Len is {0:n} but msg[0] is {1!r}zInvalid data received)rPÚitemsizeZrecvmsgrSZ CMSG_SPACEÚEOFErrorrUr<rRrVrTr Ú ValueErrorZ frombytesÚAssertionErrorÚformatÚlistÚ IndexError) rWÚsizeÚaZ bytes_sizerXZancdataÚflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrK™s<    ÿ ÿ ÿÿc Cs2t | ¡tjtj¡�}t||gƒW5QRXdSr )rSÚfromfdÚfilenoÚAF_UNIXÚ SOCK_STREAMrJ)r=r6r>Úsrrrrµsc Cs<t | ¡tjtj¡�}t|dƒdW5QR£SQRXdS)Nrr)rSrcrdrerfrK)r=rgrrrrºscCsFt ¡}|dk r | | |¡¡Str:ddlm}| |¡Stdƒ‚dS)Nr)Úresource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrIZduplicate_for_childÚHAVE_SEND_HANDLEÚrhr[)ÚfdZ popen_objrhrrrrI¿s  cCs2|jdkrt|j|jjffSt|j|jjffSdSr )Ú__self__ÚgetattrrÚ__func__r%©ÚmrrrÚ_reduce_methodÎs rqc@seZdZdd„ZdS)Ú_CcCsdSr r)rrrrÚfÔsz_C.fN)r%r&r'rsrrrrrrÓsrrcCst|j|jffSr )rmÚ __objclass__r%rorrrÚ_reduce_method_descriptorÙsrucCst|j|j|jpiffSr )Ú_rebuild_partialÚfuncrÚkeywords)ÚprrrÚ_reduce_partialßsrzcCstj|f|ž|ŽSr )Ú functoolsÚpartial)rwrrxrrrrvásrvcCsddlm}t||ƒffS)Nr)Ú DupSocket)rhr}Ú_rebuild_socket)rgr}rrrÚ_reduce_socketês rcCs| ¡Sr )r@)Zdsrrrr~ísr~cCs"t| ¡ƒ}t||j|j|jffSr )rIrdr~ÚfamilyrÚproto)rgÚdfrrrròs cCs| ¡}tj||||d�S)N)rd)r@rS)r‚r€rr�rkrrrr~õsc@s`eZdZeZeZeZeZeZej dkr4e Z e Z e Z n e Z eZeZeZeZeZeZeZdd„ZdS)ÚAbstractReducerr cGsNtttƒjƒtƒtttjƒtƒtttj ƒtƒtt j t ƒtt j tƒdSr )rrrrrsrqr^ÚappendruÚintÚ__add__r{r|rzrSrrrrrrs  zAbstractReducer.__init__N)r%r&r'rrr rrÚsysÚplatformr0r/r.rJrKrIrqrurvrr~rrrrrrƒûs$ rƒ)Ú metaclass)N)NF).Úabcrr(r{rrAr*rSr‡rjrÚ__all__rˆÚhasattrriZPicklerrrr r2r/r0rrÚobjectr.rPrUrJrKrIrqrrrrsrur^r„r…r†rzrvr|rr~rƒrrrrÚ sj    ÿ ý   ÿ  #