Ë
    òT•j º  ã            
       ó  — 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m	Z	 ddl
mZ ddlmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ 	 ddlmZ dZe j1                  d«       d„ Z ej6                  ej                  e«       dD � cg c]  }  e  ei | «      «       «      ‘Œ c} Zd„ ZeD ]  Z  ej6                  e e«       Œ [ [ G d„ de!«      Z"di fd„Z#d„ Z$ G d„ de%«      Z&d„ Z'd„ Z( G d„ de!«      Z) G d„ de!«      Z*ejV                  ejX                  fejZ                  ej\                  fd œZ/ G d!„ d"e!«      Z0 G d#„ d$e1«      Z2 G d%„ d&e!«      Z3d'„ Z4i fd(„Z5	 	 dbd)„Z6 G d*„ d+e!«      Z7 G d,„ d-e!«      Z8dcd.„Z9 G d/„ d0e3«      Z: G d1„ d2e3«      Z; G d3„ d4e;«      Z< G d5„ d6e3«      Z= G d7„ d8e3«      Z> G d9„ d:e3«      Z? G d;„ d<e3«      Z@ e5d=d>«      ZA G d?„ d@eA«      ZB e5dAdB«      ZCdCdDieC_D         e5dEdF«      ZE e5dGdH«      ZFdIdIdIdDdDdJœeF_D         G dK„ dGeF«      ZG G dL„ dMe0«      ZHeHj7                  dNej’                  «       eHj7                  dOej’                  «       eHj7                  dPej”                  e=«       eHj7                  dQej–                  e;«       eHj7                  dRej˜                  e;«       eHj7                  dSejš                  e;«       eHj7                  dTejœ                  e;«       eHj7                  dUejž                  e<«       eHj7                  dVej                   e>«       eHj7                  dWej¢                  eG«       eHj7                  dXeReB«       eHj7                  dYeSeC«       eHj7                  d-e8e@«       eHj7                  dZe9eE«       eHj7                  d+e7e?«       eHj7                  dDe:d¬[«       eHj7                  dId¬\«       er! G d]„ d^«      ZT G d_„ d`e)«      ZU G da„ de0«      ZVyy# e$ r dZY �Œ’w xY wc c} w )d)ÚBaseManagerÚSyncManagerÚ	BaseProxyÚTokené    N)Úgetpid)Ú
format_excé   )Ú
connection)Ú	reductionÚget_spawning_popenÚProcessError)Úpool)Úprocess)Úutil)Úget_context)Úshared_memoryTÚSharedMemoryManagerFc                 óZ   — t         j                   | j                  | j                  «       ffS ©N)ÚarrayÚtypecodeÚtobytes)Úas    ú//usr/lib/python3.12/multiprocessing/managers.pyÚreduce_arrayr   /   s    € Ü�;‰;˜Ÿ™ Q§Y¡Y£[Ð1Ð1Ð1ó    )ÚitemsÚkeysÚvaluesc                 ó&   — t         t        | «      ffS r   )Úlist©Úobjs    r   Úrebuild_as_listr$   4   s   € Ü”$�s“)�ÐÐr   c                   ó,   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zy)r   z3
    Type to uniquely identify a shared object
    ©ÚtypeidÚaddressÚidc                 ó0   — |||c| _         | _        | _        y r   r&   )Úselfr'   r(   r)   s       r   Ú__init__zToken.__init__D   s   € Ø06¸ÀÐ,ˆŒ�d”l D¥Gr   c                 óH   — | j                   | j                  | j                  fS r   r&   ©r+   s    r   Ú__getstate__zToken.__getstate__G   s   € Ø—‘˜TŸ\™\¨4¯7©7Ð3Ð3r   c                 ó.   — |\  | _         | _        | _        y r   r&   ©r+   Ústates     r   Ú__setstate__zToken.__setstate__J   s   € Ø/4Ñ,ˆŒ�d”l D¥Gr   c                 ó‚   — | j                   j                  ›d| j                  ›d| j                  ›d| j                  ›d�S )Nz(typeid=z
, address=z, id=ú))Ú	__class__Ú__name__r'   r(   r)   r.   s    r   Ú__repr__zToken.__repr__M   s-   € à—‘×'Ó'¨¯«°d·l³lÀDÇGÃGðMð 	Mr   N)	r7   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r,   r/   r3   r8   © r   r   r   r   >   s$   „ ñð ,€IòEò4ò5óMr   r   r=   c                 óx   — | j                  ||||f«       | j                  «       \  }}|dk(  r|S t        ||«      ‚)zL
    Send a message to manager using connection `c` and return response
    ú#RETURN)ÚsendÚrecvÚconvert_to_error)Úcr)   Ú
methodnameÚargsÚkwdsÚkindÚresults          r   ÚdispatchrI   U   sB   € ð ‡F�FˆB�
˜D $Ð'Ô(Ø—6‘6“8�L€Dˆ&ØˆyÒØˆÜ
˜4 Ó
(Ð(r   c           	      óò   — | dk(  r|S | dv rSt        |t        «      s%t        dj                  || t	        |«      «      «      ‚| dk(  rt        d|z  «      S t        |«      S t        dj                  | «      «      S )Nú#ERROR)ú
#TRACEBACKú#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrM   zUnserializable message: %s
zUnrecognized message type {!r})Ú
isinstanceÚstrÚ	TypeErrorÚformatÚtypeÚRemoteErrorÚ
ValueError)rG   rH   s     r   rB   rB   _   s†   € ØˆxÒØˆØ	Ð2Ñ	2Ü˜&¤#Ô&ÜØ@×GÑGØ˜D¤$ v£,ó0ó1ð 1ð Ð$Ò$ÜÐ=ÀÑFÓGÐGä˜vÓ&Ð&äÐ:×AÑAÀ$ÓGÓHÐHr   c                   ó   — e Zd Zd„ Zy)rS   c                 ó>   — dt        | j                  d   «      z   dz   S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rO   rE   r.   s    r   Ú__str__zRemoteError.__str__o   s   € Ø$¤s¨4¯9©9°Q©<Ó'8Ñ8¸6ÑAÐBr   N)r7   r9   r:   rW   r=   r   r   rS   rS   n   s   „ óCr   rS   c                 ó|   — g }t        | «      D ]+  }t        | |«      }t        |«      sŒ|j                  |«       Œ- |S )z4
    Return a list of names of methods of `obj`
    )ÚdirÚgetattrÚcallableÚappend)r#   ÚtempÚnameÚfuncs       r   Úall_methodsr`   v   sB   € ð €DÜ�C“ò ˆÜ�s˜DÓ!ˆÜ�D�>Ø�K‰K˜Õðð €Kr   c                 óP   — t        | «      D �cg c]  }|d   dk7  sŒ|‘Œ c}S c c}w )zP
    Return a list of names of methods of `obj` which do not start with '_'
    r   Ú_)r`   )r#   r^   s     r   Úpublic_methodsrc   �   s'   € ô )¨Ó-Ö@�T°°a±¸C³ŠDÒ@Ð@ùÒ@s   Ž#œ#c                   ó�   — e Zd ZdZg d¢Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZeeedœZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚServerzM
    Server class which runs in a process controlled by a manager object
    )	ÚshutdownÚcreateÚaccept_connectionÚget_methodsÚ
debug_infoÚnumber_of_objectsÚdummyÚincrefÚdecrefc                 óz  — t        |t        «      s$t        dj                  |t	        |«      «      «      ‚|| _        t        j                  |«      | _        t        |   \  }} ||d¬«      | _
        | j                  j                  | _        ddi| _        i | _        i | _        t        j                   «       | _        y )Nz&Authkey {0!r} is type {1!s}, not bytesé€   )r(   ÚbacklogÚ0©Nr=   )rN   ÚbytesrP   rQ   rR   Úregistryr   ÚAuthenticationStringÚauthkeyÚlistener_clientÚlistenerr(   Ú	id_to_objÚid_to_refcountÚid_to_local_proxy_objÚ	threadingÚLockÚmutex)r+   ru   r(   rw   Ú
serializerÚListenerÚClients          r   r,   zServer.__init__’   s¥   € Ü˜'¤5Ô)ÜØ8×?Ñ?ØœT '›]ó,ó-ð -ð !ˆŒÜ×3Ñ3°GÓ<ˆŒÜ*¨:Ñ6Ñˆ�&ñ !¨¸#Ô>ˆŒØ—}‘}×,Ñ,ˆŒà˜zÐ*ˆŒØ ˆÔØ%'ˆÔ"Ü—^‘^Ó%ˆ�
r   c                 ó¢  — t        j                  «       | _        | t        j                  «       _        	 t        j                  | j                  ¬«      }d|_        |j                  «        	 | j                  j                  «       s6| j                  j                  d«       | j                  j                  «       sŒ6t        j                  t        j                   k7  rGt#        j$                  d«       t        j                   t        _        t        j&                  t        _        t        j*                  d«       y# t        t        f$ r Y Œ�w xY w# t        j                  t        j                   k7  rGt#        j$                  d«       t        j                   t        _        t        j&                  t        _        t        j*                  d«       w xY w)z(
        Run the server forever
        )ÚtargetTr	   zresetting stdout, stderrr   N)r}   ÚEventÚ
stop_eventr   Úcurrent_processÚ_manager_serverÚThreadÚaccepterÚdaemonÚstartÚis_setÚwaitÚKeyboardInterruptÚ
SystemExitÚsysÚstdoutÚ
__stdout__r   ÚdebugÚ
__stderr__ÚstderrÚexit)r+   rŠ   s     r   Úserve_foreverzServer.serve_forever¤   s   € ô $Ÿ/™/Ó+ˆŒØ48Œ×ÑÓ!Ô1ð	Ü ×'Ñ'¨t¯}©}Ô=ˆHØ"ˆHŒOØ�N‰NÔðØŸ/™/×0Ñ0Ô2Ø—O‘O×(Ñ(¨Ô+ð Ÿ/™/×0Ñ0Õ2ô
 �z‰zœSŸ^™^Ò+Ü—
‘
Ð5Ô6Ü Ÿ^™^””
Ü Ÿ^™^””
Ü�H‰H�Q�Køô &¤zÐ2ò Ùðûô �z‰zœSŸ^™^Ò+Ü—
‘
Ð5Ô6Ü Ÿ^™^””
Ü Ÿ^™^””
Ü�H‰H�Q�Kús+   ´7E Á,AD: Ä:EÅ	E ÅEÅE ÅA?Gc                 óÌ   — 	 	 | j                   j                  «       }t        j                  | j
                  |f¬«      }d|_        |j                  «        ŒU# t        $ r Y Œaw xY w)NT©r„   rE   )ry   ÚacceptÚOSErrorr}   r‰   Úhandle_requestr‹   rŒ   )r+   rC   Úts      r   rŠ   zServer.accepterº   sa   € ØðØ—M‘M×(Ñ(Ó*�ô × Ñ ¨×(;Ñ(;À1À$ÔGˆAØˆAŒHØ�G‰GŒIð øô ò Ùðús   ƒA Á	A#Á"A#c                 óº  — d }	 t        j                  || j                  «       t        j                  || j                  «       |j	                  «       }|\  }}}}|| j
                  v s
J d|z  «       ‚t        | |«      }	  ||g|¢­i |¤Ž}d|f}		 |j                  |	«       y # t        $ r dt        «       f}	Y Œ*w xY w# t        $ r dt        «       f}	Y ŒEw xY w# t        $ rx}
	 |j                  dt        «       f«       n# t        $ r Y nw xY wt        j                  d|	«       t        j                  d|«       t        j                  d|
«       Y d }
~
y d }
~
ww xY w)Nz%r unrecognizedr?   rL   zFailure to send message: %rz ... request was %rú ... exception was %r)r
   Údeliver_challengerw   Úanswer_challengerA   ÚpublicrZ   Ú	Exceptionr   r@   r   Úinfo)r+   rC   ÚrequestÚignoreÚfuncnamerE   rF   r_   rH   ÚmsgÚes              r   Ú_handle_requestzServer._handle_requestÄ   sO  € Øˆð	*Ü×(Ñ(¨¨D¯L©LÔ9Ü×'Ñ'¨¨4¯<©<Ô8Ø—f‘f“hˆGØ+2Ñ(ˆF�H˜d DØ˜tŸ{™{Ñ*ÐHÐ,=ÀÑ,HÓHÐ*Ü˜4 Ó*ˆDð*Ù˜aÐ/ $Ò/¨$Ñ/�ð ! &Ð)�ð		2Ø�F‰F�3�Køô ò 3Ø#¤Z£\Ð2’ð3ûô ò 	/Ø¤£Ð.ŠCð	/ûô ò 	2ðØ—‘˜¤j£lÐ3Õ4øÜò Ùðúä�I‰IÐ3°SÔ9Ü�I‰IÐ+¨WÔ5Ü�I‰IÐ-¨q×1Ñ1ûð	2ús[   „A;B> Â B# ÂC Â#B;Â:B;Â>CÃCÃ	EÃ#C?Ã>EÃ?	DÄEÄ
DÄAEÅEc                 ó�   — 	 | j                  |«       |j                  «        y# t        $ r Y Œw xY w# |j                  «        w xY w)z)
        Handle a new connection
        N)r«   r�   Úclose©r+   Úconns     r   r�   zServer.handle_requestâ   s@   € ð	Ø× Ñ  Ô&ð
 �J‰J�Løô	 ò 	áð	ûð �J‰J�Lús   ‚$ ¤	0­3 ¯0°3 ³Ac                 ó$  — t        j                  dt        j                  «       j                  «       |j
                  }|j                  }| j                  }| j                  j                  «       sÊ	 dx}} |«       }|\  }}}	}
	 ||   \  }}}||vrt        d|›dt        |«      ›d|›�«      ‚t        ||«      }	  ||	i |
¤Ž}|xr |j                  |d«      }|r4| j!                  |||«      \  }}t#        || j$                  |«      }d||ff}nd|f}	 	 	  |«       | j                  j                  «       sŒÉyy# t        $ r.}	 | j                  |   \  }}}n# t        $ r |‚w xY wY d}~Œàd}~ww xY w# t&        $ r}d|f}Y d}~Œsd}~ww xY w# t        $ rQ €d	t)        «       f}n?	 | j*                  |   } || |g	¢­i 
¤Ž}d|f}n# t&        $ r d	t)        «       f}Y nw xY wY ŒÔt,        $ rK t        j                  d
t        j                  «       j                  «       t/        j0                  d«       Y �Œ&t&        $ r d	t)        «       f}Y �Œ=w xY w# t&        $ r  |dt)        «       f«       Y �ŒUw xY w# t&        $ rŽ}t        j2                  dt        j                  «       j                  «       t        j2                  d«       t        j2                  d|«       |j5                  «        t/        j0                  d«       Y d}~�Œëd}~ww xY w)zQ
        Handle requests from the proxies in a particular process/thread
        z$starting server thread to service %rNzmethod z of z object is not in exposed=ú#PROXYr?   rK   rL   z$got EOF -- exiting thread serving %rr   rM   zexception in thread serving %rz ... message was %rr    r	   )r   r”   r}   Úcurrent_threadr^   rA   r@   rz   r†   r�   ÚKeyErrorr|   ÚAttributeErrorrR   rZ   Úgetrg   r   r(   r¤   r   Úfallback_mappingÚEOFErrorr‘   r—   r¥   r­   )r+   r¯   rA   r@   rz   rD   r#   r¦   ÚidentrE   rF   ÚexposedÚ	gettypeidÚkeÚfunctionÚresr'   ÚridentÚrexposedÚtokenr©   rª   Úfallback_funcrH   s                           r   Úserve_clientzServer.serve_clientî   s  € ô 	�
‰
Ð9Ü×+Ñ+Ó-×2Ñ2ô	4ð �y‰yˆØ�y‰yˆØ—N‘Nˆ	à—/‘/×(Ñ(Ô*ð53Ø#'Ð'�
˜SÙ›&�Ø07Ñ-��z 4¨ð!Ø.7¸Ñ.>Ñ+�C˜ )ð  WÑ,Ý(â#¤T¨#¥Y±ð9óð ô
 # 3¨
Ó3�ð/Ù" DÐ1¨DÑ1�Cð 'ÒJ¨9¯=©=¸ÀTÓ+J�FÙØ+/¯;©;°t¸VÀSÓ+IÑ(˜ Ü % f¨d¯l©l¸FÓ C˜Ø'¨(°EÐ):Ð;™à(¨#Ð.™ð.ð<Ù˜”Iðw —/‘/×(Ñ(×*øô  ò !ð!à ×6Ñ6°uÑ=ñ 0˜˜W¡iøä#ò !Ø ˜ð!úô '0ûð!ûô" !ò (Ø# Q˜-•Cûð(ûô "ò ;ØÐ%Ø'¬«Ð6‘Cð;Ø(,×(=Ñ(=¸jÑ(I˜Ù!.Ø  $¨¨sð"Ø59ò"Ø=Añ"˜ð  )¨&Ð1™øÜ$ò ;Ø+¬Z«\Ð:šð;üô ò Ü—
‘
ÐAÜ$×3Ñ3Ó5×:Ñ:ô<ä—‘˜—äò 3Ø#¤Z£\Ð2“ð3ûô !ò <ÙÐ+¬Z«\Ð:×;ð<ûäò Ü—	‘	Ð:Ü!×0Ñ0Ó2×7Ñ7ô9ä—	‘	Ð/°Ô5Ü—	‘	Ð1°1Ô5Ø—
‘
”Ü—‘˜—’ûðúsÛ   Á2F Â	D< Â-F Â<E6 ÃAF ÄI Ä<	E3ÅEÅE.ÅE&Å&E.Å)F Å.E3Å3F Å6	FÅ?FÆF ÆFÆF ÆIÆ)"GÇIÇG$Ç!IÇ#G$Ç$IÇ)AIÈ;IÉIÉI5É1I8 É4I5É5I8 É8	LÊBL
Ì
Lc                 ó   — |S r   r=   ©r+   r¯   r¸   r#   s       r   Úfallback_getvaluezServer.fallback_getvalue?  s   € Øˆ
r   c                 ó   — t        |«      S r   ©rO   rÄ   s       r   Úfallback_strzServer.fallback_strB  s   € Ü�3‹xˆr   c                 ó   — t        |«      S r   )ÚreprrÄ   s       r   Úfallback_reprzServer.fallback_reprE  s   € Ü�C‹yÐr   )rW   r8   ú	#GETVALUEc                  ó   — y r   r=   ©r+   rC   s     r   rl   zServer.dummyN  s   € Ør   c                 ór  — | j                   5  g }t        | j                  j                  «       «      }|j	                  «        |D ]K  }|dk7  sŒ	|j                  d|›d| j                  |   ›dt        | j                  |   d   «      dd ›�«       ŒM dj                  |«      cddd«       S # 1 sw Y   yxY w)	zO
        Return some info --- useful to spot problems with refcounting
        rr   z  z:       refcount=z
    r   NéK   ú
)	r   r!   r{   r   Úsortr\   rO   rz   Újoin)r+   rC   rH   r   r¸   s        r   rj   zServer.debug_infoQ  s­   € ð
 �Z‰Zñ 		%ØˆFÜ˜×+Ñ+×0Ñ0Ó2Ó3ˆDØ�I‰IŒKØò H�Ø˜C“<Ø—M’MÚ#(¨$×*=Ñ*=¸eÓ*DÜ#& t§~¡~°eÑ'<¸QÑ'?Ó#@ÀÀ"Ñ#Eð#Gõ HðHð
 —9‘9˜VÓ$÷		%÷ 		%ò 		%ús   �A B-ÁAB-Â-B6c                 ó,   — t        | j                  «      S )z*
        Number of shared objects
        )Úlenr{   rÎ   s     r   rk   zServer.number_of_objectsa  s   € ô
 �4×&Ñ&Ó'Ð'r   c                 óú   — 	 t        j                  d«       |j                  d«       | j
                  j                  «        y#  ddl}|j	                  «        Y Œ3xY w# | j
                  j                  «        w xY w)z'
        Shutdown this process
        z!manager received shutdown message©r?   Nr   N)r   r”   r@   Ú	tracebackÚ	print_excr†   Úset)r+   rC   rØ   s      r   rf   zServer.shutdownh  sZ   € ð	"Ü�J‰JÐ:Ô;Ø�F‰FÐ$Ô%ð
 �O‰O×ÑÕ!øð		"ÛØ×ÑÖ!ûà�O‰O×ÑÕ!ús   ‚&A ÁAÁA ÁA:c          	      ón  — | j                   5  | j                  |   \  }}}}|€!|st        |«      dk7  rt        d«      ‚|d   }	n ||i |¤Ž}	|€t	        |	«      }|�Kt        |t        «      s$t        dj                  |t        |«      «      «      ‚t        |«      t        |«      z   }dt        |	«      z  }
t        j                  d||
«       |	t        |«      |f| j                  |
<   |
| j                   vrd| j                   |
<   ddd«       | j#                  |
«       |
t%        «      fS # 1 sw Y   Œ(xY w)z>
        Create a new shared object and return its id
        Nr	   z4Without callable, must have one non-keyword argumentr   z,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)r   ru   rÕ   rT   rc   rN   ÚdictrP   rQ   rR   r!   r)   r   r”   rÚ   rz   r{   rm   Útuple)r+   rC   r'   rE   rF   r[   r¹   Úmethod_to_typeidÚ	proxytyper#   r¸   s              r   rg   zServer.createu  sM  € ð �Z‰Zñ 	/à—m‘m FÑ+ñ ;ˆH�gÐ/°ð ÐÙœC ›I¨šNÜ$ØNóPð Pà˜1‘g‘á Ð-¨Ñ-�àˆÜ(¨Ó-�ØÐ+Ü!Ð"2´DÔ9Ü#ØF×MÑMØ,¬dÐ3CÓ.DóFóGð Gô ˜w›-¬$Ð/?Ó*@Ñ@�àœ2˜c›7‘NˆEä�J‰JÐ?ÀÈÔOà%(¬#¨g«,Ð8HÐ$IˆD�N‰N˜5Ñ!Ø˜D×/Ñ/Ñ/Ø-.�×#Ñ# EÑ*÷7	/ð: 	�‰�A�uÔØ”e˜G“nÐ$Ð$÷=	/ð 	/ús   �C7D+Ä+D4c                 óL   — t        | j                  |j                     d   «      S )zL
        Return the methods of the shared object indicated by token
        r	   )rÝ   rz   r)   )r+   rC   rÀ   s      r   ri   zServer.get_methods™  s!   € ô �T—^‘^ E§H¡HÑ-¨aÑ0Ó1Ð1r   c                 óz   — |t        j                  «       _        |j                  d«       | j	                  |«       y)z=
        Spawn a new thread to serve this connection
        r×   N)r}   r²   r^   r@   rÂ   )r+   rC   r^   s      r   rh   zServer.accept_connectionŸ  s0   € ð +/Œ	× Ñ Ó"Ô'Ø	�‰Ð Ô!Ø×Ñ˜!Õr   c                 óF  — | j                   5  	 | j                  |xx   dz  cc<   d d d «       y # t        $ r\}|| j                  v rBd| j                  |<   | j                  |   | j                  |<   t        j                  d|«       n|‚Y d }~Œid }~ww xY w# 1 sw Y   y xY w)Nr	   z&Server re-enabled tracking & INCREF %r)r   r{   r³   r|   rz   r   r”   )r+   rC   r¸   r»   s       r   rm   zServer.incref§  s¦   € Ø�Z‰Zñ 	ðØ×#Ñ# EÓ*¨aÑ/Ó*÷	ð 	øô ò ð
 ˜D×6Ñ6Ñ6Ø12�D×'Ñ'¨Ñ.à×2Ñ2°5Ñ9ð —N‘N 5Ñ)ä—J‘JÐGÈÕOà�Hô Pûðú÷	ð 	ús,   �B�/¯	B¸ABÂ
BÂBÂBÂB c           	      ól  — || j                   vr%|| j                  v rt        j                  d|«       y | j                  5  | j                   |   dk  r6t        dj                  || j                  |   | j                   |   «      «      ‚| j                   |xx   dz  cc<   | j                   |   dk(  r| j                   |= d d d «       || j                   vrHd| j                  |<   t        j                  d|«       | j                  5  | j                  |= d d d «       y y # 1 sw Y   Œ`xY w# 1 sw Y   y xY w)NzServer DECREF skipping %rr   z+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r	   )Nr=   Nzdisposing of obj with id %r)r{   r|   r   r”   r   ÚAssertionErrorrQ   rz   )r+   rC   r¸   s      r   rn   zServer.decref¸  s0  € Ø˜×+Ñ+Ñ+Ø�T×/Ñ/Ñ/Ü�J‰JÐ2°EÔ:Øà�Z‰Zñ 	/Ø×"Ñ" 5Ñ)¨QÒ.Ü$ØA×HÑHØ˜tŸ~™~¨eÑ4Ø×+Ñ+¨EÑ2ó4ó5ð 5ð ×Ñ Ó&¨!Ñ+Ó&Ø×"Ñ" 5Ñ)¨QÒ.Ø×'Ñ'¨Ð.÷	/ð ˜×+Ñ+Ñ+ð %5ˆD�N‰N˜5Ñ!Ü�J‰JÐ4°eÔ<Ø—‘ñ *Ø—N‘N 5Ð)÷*ð *ð ,÷	/ð 	/ú÷$*ð *ús   Á A?DÄD*ÄD'Ä*D3N)r7   r9   r:   r;   r£   r,   r˜   rŠ   r«   r�   rÂ   rÅ   rÈ   rË   r¶   rl   rj   rk   rf   rg   ri   rh   rm   rn   r=   r   r   re   re   ‹   s   „ ñòN€Fò&ò$ò,ò2ò<
òOòbòòð Ø Ø%ñ
Ðòò%ò (ò"ò"%òH2òòó"*r   re   c                   ó   — e Zd ZdgZdZdZdZy)ÚStateÚvaluer   r	   é   N)r7   r9   r:   r<   ÚINITIALÚSTARTEDÚSHUTDOWNr=   r   r   ræ   ræ   Ø  s   „ Ø�	€IØ€GØ€GØ�Hr   ræ   )ÚpickleÚ	xmlrpclibc                   ó®   — e Zd ZdZi ZeZ	 	 dddœd„Zd„ Zd„ Z	dd„Z
e	 dd	„«       Zd
„ Zdd„Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Ze	 	 dd„«       Zy)r   z!
    Base class for managers
    Ng      ð?)Úshutdown_timeoutc                óP  — |€t        j                  «       j                  }|| _        t        j                  |«      | _        t        «       | _        t        j                  | j                  _	        || _
        t        |   \  | _        | _        |xs
 t        «       | _        || _        y r   )r   r‡   rw   Ú_addressrv   Ú_authkeyræ   Ú_stateré   rç   Ú_serializerrx   Ú	_ListenerÚ_Clientr   Ú_ctxÚ_shutdown_timeout)r+   r(   rw   r€   Úctxrï   s         r   r,   zBaseManager.__init__ò  s~   € àˆ?Ü×-Ñ-Ó/×7Ñ7ˆGØˆŒÜ×4Ñ4°WÓ=ˆŒÜ“gˆŒÜ!ŸM™Mˆ�‰ÔØ%ˆÔÜ'6°zÑ'BÑ$ˆŒ˜œØÒ(œ;›=ˆŒ	Ø!1ˆÕr   c                 óà  — | j                   j                  t        j                  k7  r’| j                   j                  t        j                  k(  rt        d«      ‚| j                   j                  t        j                  k(  rt        d«      ‚t        dj                  | j                   j                  «      «      ‚t        | j                  | j                  | j                  | j                  «      S )zX
        Return server object with serve_forever() method and address attribute
        úAlready started serverúManager has shut downúUnknown state {!r})ró   rç   ræ   ré   rê   r   rë   rQ   re   Ú	_registryrñ   rò   rô   r.   s    r   Ú
get_serverzBaseManager.get_serverÿ  s­   € ð �;‰;×Ñ¤§¡Ò-Ø�{‰{× Ñ ¤E§M¡MÒ1Ü"Ð#;Ó<Ð<Ø—‘×"Ñ"¤e§n¡nÒ4Ü"Ð#:Ó;Ð;ä"Ø(×/Ñ/°·±×0AÑ0AÓBóDð Dä�d—n‘n d§m¡mØ—m‘m T×%5Ñ%5ó7ð 	7r   c                 óÄ   — t         | j                     \  }} || j                  | j                  ¬«      }t	        |dd«       t
        j                  | j                  _        y)z>
        Connect manager object to the server process
        ©rw   Nrl   )	rx   rô   rñ   rò   rI   ræ   rê   ró   rç   )r+   r�   r‚   r¯   s       r   ÚconnectzBaseManager.connect  sI   € ô +¨4×+;Ñ+;Ñ<Ñˆ�&Ù�d—m‘m¨T¯]©]Ô;ˆÜ��t˜WÔ%Ü!ŸM™Mˆ�‰Õr   c           
      ó  — | j                   j                  t        j                  k7  r’| j                   j                  t        j                  k(  rt        d«      ‚| j                   j                  t        j                  k(  rt        d«      ‚t        dj                  | j                   j                  «      «      ‚|�t        |«      st        d«      ‚t        j                  d¬«      \  }}| j                  j                  t        | «      j                  | j                   | j"                  | j$                  | j&                  |||f¬«      | _        d	j+                  d
„ | j(                  j,                  D «       «      }t        | «      j.                  dz   |z   | j(                  _        | j(                  j3                  «        |j5                  «        |j7                  «       | _        |j5                  «        t        j                  | j                   _        t9        j:                  | t        | «      j<                  | j(                  | j"                  | j$                  | j                   | j>                  | j@                  fd¬«      | _!        y)z@
        Spawn a server process for this manager object
        rû   rü   rý   Nzinitializer must be a callableF)Úduplexrš   ú:c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   rÇ   )Ú.0Úis     r   ú	<genexpr>z$BaseManager.start.<locals>.<genexpr>0  s   è ø€ ÒA Aœ˜QŸÑAùs   ‚ú-r   ©rE   Úexitpriority)"ró   rç   ræ   ré   rê   r   rë   rQ   r[   rP   r
   ÚPiper÷   ÚProcessrR   Ú_run_serverrþ   rñ   rò   rô   Ú_processrÓ   Ú	_identityr7   r^   rŒ   r­   rA   r   ÚFinalizeÚ_finalize_managerrö   rø   rf   )r+   ÚinitializerÚinitargsÚreaderÚwriterr¸   s         r   rŒ   zBaseManager.start  sØ  € ð �;‰;×Ñ¤§¡Ò-Ø�{‰{× Ñ ¤E§M¡MÒ1Ü"Ð#;Ó<Ð<Ø—‘×"Ñ"¤e§n¡nÒ4Ü"Ð#:Ó;Ð;ä"Ø(×/Ñ/°·±×0AÑ0AÓBóDð Dð Ð"¬8°KÔ+@ÜÐ<Ó=Ð=ô $Ÿ™°Ô6‰ˆ�ð Ÿ	™	×)Ñ)Ü˜“:×)Ñ)Ø—.‘. $§-¡-°·±Ø×"Ñ" F¨K¸ðCð *ó ˆŒð
 —‘ÑA¨¯©×)@Ñ)@ÔAÓAˆÜ! $›Z×0Ñ0°CÑ7¸%Ñ?ˆ�‰ÔØ�‰×ÑÔð 	�‰ŒØŸ™›ˆŒØ�‰Œô "ŸM™Mˆ�‰ÔÜŸ™Ø”$�t“*×.Ñ.Ø—-‘- §¡°·±¸t¿{¹{Ø—,‘, × 6Ñ 6ð8àô	ˆ�r   c                 óT  — t        j                   t         j                  t         j                  «       |� ||Ž  | j                  ||||«      }|j	                  |j
                  «       |j                  «        t        j                  d|j
                  «       |j                  «        y)z@
        Create a server, report its address and run it
        Nzmanager serving at %r)
ÚsignalÚSIGINTÚSIG_IGNÚ_Serverr@   r(   r­   r   r¥   r˜   )	Úclsru   r(   rw   r€   r  r  r  Úservers	            r   r  zBaseManager._run_serverB  sz   € ô 	�‰”f—m‘m¤V§^¡^Ô4àÐ"Ù˜Ñ"ð —‘˜X w°¸ÓDˆð 	�‰�F—N‘NÔ#Ø�‰Œô 	�	‰	Ð)¨6¯>©>Ô:Ø×ÑÕr   c                óV  — | j                   j                  t        j                  k(  sJ d«       ‚| j	                  | j
                  | j                  ¬«      }	 t        |dd|f|z   |«      \  }}|j                  «        t        || j
                  |«      |fS # |j                  «        w xY w)zP
        Create a new shared object; return the token and exposed tuple
        zserver not yet startedr  Nrg   )
ró   rç   ræ   rê   rö   rñ   rò   rI   r­   r   )r+   r'   rE   rF   r¯   r)   r¹   s          r   Ú_createzBaseManager._createY  s�   € ð �{‰{× Ñ ¤E§M¡MÒ1ÐKÐ3KÓKÐ1Ø�|‰|˜DŸM™M°4·=±=ˆ|ÓAˆð	Ü" 4¨¨x¸&¸À4¹ÈÓN‰KˆB�à�J‰JŒLÜ�V˜TŸ]™]¨BÓ/°Ð8Ð8øð �J‰J�Lús   ÁB ÂB(c                 ó˜   — | j                   �>| j                   j                  |«       | j                   j                  «       sd| _         yyy)zC
        Join the manager process (if it has been spawned)
        N)r  rÓ   Úis_alive©r+   Útimeouts     r   rÓ   zBaseManager.joine  sA   € ð �=‰=Ð$Ø�M‰M×Ñ˜wÔ'Ø—=‘=×)Ñ)Ô+Ø $�•ð ,ð %r   c                 ó¶   — | j                  | j                  | j                  ¬«      }	 t        |dd«      |j	                  «        S # |j	                  «        w xY w)zS
        Return some info about the servers shared objects and connections
        r  Nrj   ©rö   rñ   rò   rI   r­   r®   s     r   Ú_debug_infozBaseManager._debug_infon  sB   € ð �|‰|˜DŸM™M°4·=±=ˆ|ÓAˆð	Ü˜D $¨Ó5à�J‰J�LøˆD�J‰J�Lúó   ©A ÁAc                 ó¶   — | j                  | j                  | j                  ¬«      }	 t        |dd«      |j	                  «        S # |j	                  «        w xY w)z5
        Return the number of shared objects
        r  Nrk   r&  r®   s     r   Ú_number_of_objectszBaseManager._number_of_objectsx  sC   € ð �|‰|˜DŸM™M°4·=±=ˆ|ÓAˆð	Ü˜D $Ð(;Ó<à�J‰J�LøˆD�J‰J�Lúr(  c                 óæ  — | j                   j                  t        j                  k(  r| j	                  «        | j                   j                  t        j
                  k7  r’| j                   j                  t        j                  k(  rt        d«      ‚| j                   j                  t        j                  k(  rt        d«      ‚t        dj                  | j                   j                  «      «      ‚| S )NzUnable to start serverrü   rý   )	ró   rç   ræ   ré   rŒ   rê   r   rë   rQ   r.   s    r   Ú	__enter__zBaseManager.__enter__‚  s§   € Ø�;‰;×Ñ¤§¡Ò-Ø�J‰JŒLØ�;‰;×Ñ¤§¡Ò-Ø�{‰{× Ñ ¤E§M¡MÒ1Ü"Ð#;Ó<Ð<Ø—‘×"Ñ"¤e§n¡nÒ4Ü"Ð#:Ó;Ð;ä"Ø(×/Ñ/°·±×0AÑ0AÓBóDð Dàˆr   c                 ó$   — | j                  «        y r   )rf   ©r+   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__zBaseManager.__exit__�  s   € Ø�‰�r   c                 óè  —  | j                   «       �rt        j                  d«       	  |||¬«      }	 t        |dd«       |j	                  «        	  | j                  |¬«        | j                   «       r¢t        j                  d«       t        | d«      r�t        j                  d«        | j                  «         | j                  |¬«        | j                   «       r7t        j                  d	«        | j                  «         | j                  «        t        j                  |_        	 t        j                  |= y# |j	                  «        w xY w# t
        $ r Y �Œw xY w# t        $ r Y yw xY w)
zQ
        Shutdown the manager process; will be registered as a finalizer
        z#sending shutdown message to managerr  Nrf   )r$  zmanager still aliveÚ	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r"  r   r¥   rI   r­   r¤   rÓ   Úhasattrr4  Úkillræ   rë   rç   r   Ú_address_to_localr³   )r   r(   rw   r2   rö   rï   r¯   s          r   r  zBaseManager._finalize_manager’  s*  € ð ˆ7×ÑÕÜ�I‰IÐ;Ô<ðÙ˜w°Ô8�ð!Ü˜T 4¨Ô4à—J‘J•Lð ˆG�L‰LÐ!1Õ2Øˆw×ÑÔ!Ü—	‘	Ð/Ô0Ü˜7 KÔ0Ü—I‘IÐGÔHØ%�G×%Ñ%Ô'Ø �G—L‘LÐ)9Õ:Ø'�w×'Ñ'Ô)ÜŸ	™	Ð"GÔHØ$˜Ÿ™œØ$˜Ÿ™œä—n‘nˆŒð	Ü×+Ñ+¨GÑ4øð% —J‘J•LûÜò Úðûô$ ò 	Ùð	ús:   ©
E ´E  ÁE Ä.E% Å EÅE Å	E"Å!E"Å%	E1Å0E1c                 ó   — | j                   S r   )rñ   r.   s    r   r(   zBaseManager.addressµ  s   € à�}‰}Ðr   c                 óÈ  ‡‡— d| j                   vr| j                  j                  «       | _        ‰€t        Š|xs t	        ‰dd«      }|xs t	        ‰dd«      }|rWt        |j                  «       «      D ];  \  }}t        |«      t        u s
J d|z  «       ‚t        |«      t        u rŒ3J d|z  «       ‚ |||‰f| j                  ‰<   |rˆˆfd„}	‰|	_	        t        | ‰|	«       yy)z9
        Register a typeid with the manager type
        rþ   NÚ	_exposed_Ú_method_to_typeid_z%r is not a stringc                ó(  •— t        j                  d‰«        | j                  ‰g|¢­i |¤Ž\  }} ‰|| j                  | | j                  |¬«      }| j                  |j                  | j                  ¬«      }t        |d d|j                  f«       |S )Nz)requesting creation of a shared %r object©Úmanagerrw   r¹   r  rn   )	r   r”   r   rô   rò   rö   r(   rI   r)   )	r+   rE   rF   rÀ   ÚexpÚproxyr¯   rß   r'   s	          €€r   r]   z"BaseManager.register.<locals>.tempÔ  s…   ø€ Ü—
‘
ÐFÈÔOØ)˜TŸ\™\¨&Ð@°4Ò@¸4Ñ@‘
��sÙ!Ø˜4×+Ñ+°TØ ŸM™M°3ô�ð —|‘| E§M¡M¸4¿=¹=�|ÓI�Ü˜˜t X°·±¨{Ô;Ø�r   )Ú__dict__rþ   ÚcopyÚ	AutoProxyrZ   r!   r   rR   rO   r7   Úsetattr)
r  r'   r[   rß   r¹   rÞ   Úcreate_methodÚkeyrç   r]   s
    ` `      r   ÚregisterzBaseManager.register¹  s  ù€ ð ˜cŸl™lÑ*ØŸM™M×.Ñ.Ó0ˆCŒMàÐÜ!ˆIàÒBœW Y°¸TÓBˆà+ò JÜ" 9Ð.BÀDÓIð 	ñ Ü"Ð#3×#9Ñ#9Ó#;Ó<ò H‘
��UÜ˜C“y¤CÑ'ÐCÐ)=ÀÑ)CÓCÐ'Ü˜E“{¤cÒ)ÐGÐ+?À%Ñ+GÓGÐ)ðHð
 �gÐ/°ð!ˆ�‰�fÑñ õ	ð #ˆDŒMÜ�C˜ Õ&ð r   )NNrì   Nrs   r   )NNNNT)r7   r9   r:   r;   rþ   re   r  r,   rÿ   r  rŒ   Úclassmethodr  r   rÓ   r'  r*  r,  r2  Ústaticmethodr  Úpropertyr(   rG  r=   r   r   r   r   ë  s®   „ ñð €IØ€Gà>FØð2Ø/2ô2ò7ò*ó)ðV à/1òó ðò,
9ó%òòòòð ñ ó ð ðD ñó ðð ØEIØ6:ò%'ó ñ%'r   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚProcessLocalSetc                 ó2   — t        j                  | d„ «       y )Nc                 ó"   — | j                  «       S r   )Úclearr"   s    r   ú<lambda>z*ProcessLocalSet.__init__.<locals>.<lambda>ç  s   € °3·9±9³;€ r   )r   Úregister_after_forkr.   s    r   r,   zProcessLocalSet.__init__æ  s   € Ü× Ñ  Ñ'>Õ?r   c                 ó   — t        | «      dfS rs   )rR   r.   s    r   Ú
__reduce__zProcessLocalSet.__reduce__è  s   € Ü�D‹z˜2ˆ~Ðr   N)r7   r9   r:   r,   rS  r=   r   r   rL  rL  å  s   „ ò@ór   rL  c                   óŽ   — e Zd ZdZi Z ej                  «       Z	 	 dd„Zd„ Z	di fd„Z
d„ Zd„ Zed	„ «       Zd
„ Zd„ Zd„ Zd„ Zd„ Zy)r   z.
    A base for proxies of shared objects
    Nc                 ó  — t         j                  5  t         j                  j                  |j                  d «      }|€;t        j                  «       t        «       f}|t         j                  |j                  <   d d d «       d   | _        |d   | _	        || _
        | j                  j                  | _        || _        || _        t        |   d   | _        || _        |�t%        j&                  |«      | _        nK| j                  �| j                  j(                  | _        n#t%        j*                  «       j,                  | _        |r| j/                  «        t        j0                  | t         j2                  «       y # 1 sw Y   �ŒxY w)Nr   r	   )r   Ú_mutexr7  rµ   r(   r   ÚForkAwareLocalrL  Ú_tlsÚ_idsetÚ_tokenr)   Ú_idÚ_managerrô   rx   rö   Ú_owned_by_managerr   rv   rò   r‡   rw   Ú_increfrQ  Ú_after_fork)	r+   rÀ   r€   r>  rw   r¹   rm   Úmanager_ownedÚ	tls_idsets	            r   r,   zBaseProxy.__init__ö  s6  € ä×Ññ 	GÜ!×3Ñ3×7Ñ7¸¿¹ÀtÓLˆIØÐ Ü ×/Ñ/Ó1´?Ó3DÐD�	Ø=F”	×+Ñ+¨E¯M©MÑ:÷		Gð ˜a‘LˆŒ	ð
   ‘lˆŒàˆŒØ—;‘;—>‘>ˆŒØˆŒØ%ˆÔÜ& zÑ2°1Ñ5ˆŒð "/ˆÔàÐÜ#×8Ñ8¸ÓAˆD�MØ�]‰]Ð&Ø ŸM™M×2Ñ2ˆD�Mä#×3Ñ3Ó5×=Ñ=ˆDŒMáØ�L‰LŒNä× Ñ  ¤y×'<Ñ'<Õ=÷K	Gñ 	Gús   ‘A(E<Å<Fc                 ó–  — t        j                  d«       t        j                  «       j                  }t        j                  «       j                  dk7  r$|dt        j                  «       j                  z   z  }| j                  | j                  j                  | j                  ¬«      }t        |d d|f«       || j                  _        y )Nzmaking connection to managerÚ
MainThreadú|r  rh   )r   r”   r   r‡   r^   r}   r²   rö   rZ  r(   rò   rI   rX  r
   )r+   r^   r¯   s      r   Ú_connectzBaseProxy._connect  s•   € Ü�
‰
Ð1Ô2Ü×&Ñ&Ó(×-Ñ-ˆÜ×#Ñ#Ó%×*Ñ*¨lÒ:Ø�Cœ)×2Ñ2Ó4×9Ñ9Ñ9Ñ9ˆDØ�|‰|˜DŸK™K×/Ñ/¸¿¹ˆ|ÓGˆÜ��tÐ0°4°'Ô:Ø#ˆ�	‰	Õr   r=   c                 óú  — 	 | j                   j                  }|j                  | j                  |||f«       |j                  «       \  }}|dk(  r|S |dk(  r³|\  }}| j                  j                  |j                     d   }	| j                  j                   |_         |	|| j"                  | j                  | j$                  |¬«      }
| j'                  |j                   | j$                  ¬«      }t)        |dd|j*                  f«       |
S t-        ||«      ‚# t        $ r\ t        j                  dt        j                  «       j                  «       | j                  «        | j                   j                  }Y �Œaw xY w)	zV
        Try to call a method of the referent and return a copy of the result
        z#thread %r does not own a connectionr?   r±   éÿÿÿÿr=  r  Nrn   )rX  r
   r´   r   r”   r}   r²   r^   re  r@   r[  rA   r\  rþ   r'   rZ  r(   rô   rò   rö   rI   r)   rB   )r+   rD   rE   rF   r¯   rG   rH   r¹   rÀ   rß   r@  s              r   Ú_callmethodzBaseProxy._callmethod(  s<  € ð	(Ø—9‘9×'Ñ'ˆDð 	�	‰	�4—8‘8˜Z¨¨tÐ4Ô5Ø—y‘y“{‰ˆˆfà�9ÒØˆMØ�XÒØ#‰NˆG�UØŸ™×/Ñ/°·±Ñ=¸bÑAˆIØ ŸK™K×/Ñ/ˆEŒMÙØ�t×'Ñ'°·±ØŸ™¨wôˆEð —<‘< §¡°t·}±}�<ÓEˆDÜ�T˜4 ¨E¯H©H¨;Ô7ØˆLÜ˜t VÓ,Ð,øô- ò 	(Ü�J‰JÐ<Ü ×/Ñ/Ó1×6Ñ6ô8à�M‰MŒOØ—9‘9×'Ñ'‹Dð		(ús   ‚D ÄA!E:Å9E:c                 ó$   — | j                  d«      S )z9
        Get a copy of the value of the referent
        rÌ   ©rh  r.   s    r   Ú	_getvaluezBaseProxy._getvalueF  s   € ð ×Ñ Ó,Ð,r   c           
      ó´  — | j                   r+t        j                  d| j                  j                  «       y | j                  | j                  j                  | j                  ¬«      }t        |d d| j                  f«       t        j                  d| j                  j                  «       | j                  j                  | j                  «       | j                  xr | j                  j                  }t        j                  | t        j                   | j                  | j                  || j"                  | j                  | j
                  fd¬«      | _        y )Nz%owned_by_manager skipped INCREF of %rr  rm   z	INCREF %ré
   r  )r]  r   r”   rZ  r)   rö   r(   rò   rI   r[  rY  Úaddr\  ró   r  r   Ú_decrefrX  Ú_close)r+   r¯   r2   s      r   r^  zBaseProxy._increfL  sà   € Ø×!Ò!Ü�J‰JÐ>ÀÇÁÇÁÔOØà�|‰|˜DŸK™K×/Ñ/¸¿¹ˆ|ÓGˆÜ��t˜X¨¯© {Ô3Ü�
‰
�; §¡§¡Ô/à�‰�‰˜Ÿ™Ô!à—‘Ò6 $§-¡-×"6Ñ"6ˆä—m‘mØ”)×#Ñ#Ø—+‘+˜tŸ}™}¨eØ—)‘)˜TŸ[™[¨$¯,©,ð8àô	ˆ�r   c                 ój  — |j                  | j                  «       |�|j                  t        j                  k(  rO	 t        j                  d| j                  «        || j                  |¬«      }t        |d d| j                  f«       n t        j                  d| j                  «       |s\t        |d«      rOt        j                  dt        j                  «       j                  «       |j                  j                  «        |`y y y # t        $ r }t        j                  d|«       Y d }~Œƒd }~ww xY w)Nz	DECREF %rr  rn   z... decref failed %sz%DECREF %r -- manager already shutdownr
   z-thread %r has no more proxies so closing conn)Údiscardr)   rç   ræ   rê   r   r”   r(   rI   r¤   r5  r}   r²   r^   r
   r­   )rÀ   rw   r2   ÚtlsÚidsetrö   r¯   rª   s           r   ro  zBaseProxy._decref`  sç   € à�‰�e—h‘hÔð ˆ=˜EŸK™K¬5¯=©=Ò8ð6Ü—
‘
˜;¨¯©Ô1Ù˜uŸ}™}°gÔ>�Ü˜˜t X°·±¨{Õ;ô
 �J‰JÐ>ÀÇÁÔIñ œ  lÔ3Ü�J‰JÐFÜ ×/Ñ/Ó1×6Ñ6ô8à�N‰N× Ñ Ô"Ø‘ð	 4ˆuøô ò 6Ü—
‘
Ð1°1×5Ñ5ûð6ús   ¼AD	 Ä		D2ÄD-Ä-D2c                 ó�   — d | _         	 | j                  «        y # t        $ r"}t        j                  d|z  «       Y d }~y d }~ww xY w)Nzincref failed: %s)r\  r^  r¤   r   r¥   )r+   rª   s     r   r_  zBaseProxy._after_forky  s<   € ØˆŒð	/Ø�L‰L�NøÜò 	/ä�I‰IÐ)¨AÑ-×.Ñ.ûð	/ús   ‰ š	A£A Á Ac                 ó
  — i }t        «       �| j                  |d<   t        | dd«      r3| j                  |d<   t        t
        | j                  | j                  |ffS t        t        | «      | j                  | j                  |ffS )Nrw   Ú_isautoFr¹   )	r   rò   rZ   r:  ÚRebuildProxyrC  rZ  rô   rR   ©r+   rF   s     r   rS  zBaseProxy.__reduce__�  s†   € ØˆÜÓÐ+Ø"Ÿm™mˆD�‰Oä�4˜ EÔ*Ø"Ÿn™nˆD�‰OÜ Ü §¡¨T×-=Ñ-=¸tÐDðFð Fô !Ü˜$“Z §¡¨d×.>Ñ.>ÀÐEðGð Gr   c                 ó"   — | j                  «       S r   )rk  )r+   Úmemos     r   Ú__deepcopy__zBaseProxy.__deepcopy__Ž  s   € Ø�~‰~ÓÐr   c                 ór   — dt        | «      j                  | j                  j                  t	        | «      fz  S )Nz<%s object, typeid %r at %#x>)rR   r7   rZ  r'   r)   r.   s    r   r8   zBaseProxy.__repr__‘  s3   € Ø.Ü�T“
×#Ñ# T§[¡[×%7Ñ%7¼¸D»ÐBñCð 	Cr   c                 óf   — 	 | j                  d«      S # t        $ r t        | «      dd dz   cY S w xY w)zV
        Return representation of the referent (or a fall-back if that fails)
        r8   Nrg  z; '__str__()' failed>)rh  r¤   rÊ   r.   s    r   rW   zBaseProxy.__str__•  s=   € ð	=Ø×#Ñ# JÓ/Ð/øÜò 	=Ü˜“:˜c˜r�?Ð%<Ñ<Ò<ð	=ús   ‚ “0¯0©NNNTF)r7   r9   r:   r;   r7  r   ÚForkAwareThreadLockrV  r,   re  rh  rk  r^  rI  ro  r_  rS  r|  r8   rW   r=   r   r   r   r   ï  su   „ ñð ÐØ%ˆT×%Ñ%Ó'€Fà26ØHMó'>òR$ð ,.°Bó -ò<-òð( ñó ðò0/òGò òCó=r   r   c                 ó¼  — t        t        j                  «       dd«      }|r||j                  |j                  k(  rct	        j
                  d|«       d|d<   |j                  |j                  vr0|j                  |j                     |j                  |j                  <   |j                  dd«      xr  t        t        j                  «       dd«       } | ||fd|i|¤ŽS )	z5
    Function used for unpickling proxy objects.
    rˆ   Nz*Rebuild a proxy owned by manager, token=%rTr`  rm   Ú_inheritingF)
rZ   r   r‡   r(   r   r”   r)   r|   rz   Úpop)r_   rÀ   r€   rF   r  rm   s         r   rx  rx  ¢  sË   € ô ”W×,Ñ,Ó.Ð0AÀ4ÓH€FÙ�&—.‘. E§M¡MÒ1Ü�
‰
Ð?ÀÔGØ $ˆˆ_ÑØ�8‰8˜6×7Ñ7Ñ7à× Ñ  §¡Ñ*ð ×(Ñ(¨¯©Ñ2ð 	�‰�˜4Ó ò 	EÜ”G×+Ñ+Ó-¨}¸eÓDÐDð ñ ��zÑ9¨&Ð9°DÑ9Ð9r   c                 óÂ   — t        |«      }	 || |f   S # t        $ r Y nw xY wi }|D ]  }t        d|›d|›d�|«       Œ t        | t        f|«      }||_        ||| |f<   |S )zB
    Return a proxy type whose methods are given by `exposed`
    zdef z:(self, /, *args, **kwds):
        return self._callmethod(z, args, kwds))rÝ   r³   ÚexecrR   r   r:  )r^   r¹   Ú_cacheÚdicÚmethÚ	ProxyTypes         r   ÚMakeProxyTyperŠ  ·  s�   € ô �G‹n€GðØ�t˜W�oÑ&Ð&øÜò Ùðúð €Càò HˆÝÚ6:ºDðBØCFõ	HðHô �TœI˜<¨Ó-€IØ!€IÔØ'€FˆD�'ˆ?ÑØÐs   � ”	 Ÿ c                 óp  — t         |   d   }|€4 || j                  |¬«      }	 t        |dd| f«      }|j                  «        |€|�|j                  }|€t        j                  «       j                  }t        d| j                  z  |«      }	 |	| |||||¬«      }
d|
_
        |
S # |j                  «        w xY w)z*
    Return an auto-proxy for `token`
    r	   Nr  ri   zAutoProxy[%s])r>  rw   rm   r`  T)rx   r(   rI   r­   rò   r   r‡   rw   rŠ  r'   rw  )rÀ   r€   r>  rw   r¹   rm   r`  rö   r¯   r‰  r@  s              r   rC  rC  Í  s¼   € ô
 ˜jÑ)¨!Ñ,€Gà€Ù�u—}‘}¨gÔ6ˆð	Ü˜t T¨=¸5¸(ÓCˆGà�J‰JŒLà€˜7Ð.Ø×"Ñ"ˆØ€Ü×)Ñ)Ó+×3Ñ3ˆä˜o°·±Ñ<¸gÓF€IÙ�e˜Z°À'Ø#°=ôB€Eà€E„MØ€Løð �J‰J�Lús   ¤B# Â#B5c                   ó   — e Zd Zd„ Zd„ Zy)Ú	Namespacec                ó:   — | j                   j                  |«       y r   )rA  Úupdatery  s     r   r,   zNamespace.__init__ë  s   € Ø�‰×Ñ˜TÕ"r   c                 ó&  — t        | j                  j                  «       «      }g }|D ]-  \  }}|j                  d«      rŒ|j	                  |›d|›�«       Œ/ |j                  «        | j                  j                  ›ddj                  |«      ›d�S )Nrb   ú=ú(ú, r5   )	r!   rA  r   Ú
startswithr\   rÒ   r6   r7   rÓ   )r+   r   r]   r^   rç   s        r   r8   zNamespace.__repr__í  sv   € Ü�T—]‘]×(Ñ(Ó*Ó+ˆØˆØ ò 	5‰KˆD�%Ø—?‘? 3Õ'Ø—‘¢t©UÐ3Õ4ð	5ð 	�	‰	ŒØŸ>™>×2Ó2°D·I±I¸dµOÐDÐDr   N)r7   r9   r:   r,   r8   r=   r   r   r�  r�  ê  s   „ ò#óEr   r�  c                   ó8   — e Zd Zdd„Zd„ Zd„ Zd„ Z eee«      Zy)ÚValuec                 ó    — || _         || _        y r   )Ú	_typecodeÚ_value)r+   r   rç   Úlocks       r   r,   zValue.__init__÷  s   € Ø!ˆŒØˆ�r   c                 ó   — | j                   S r   ©r™  r.   s    r   rµ   z	Value.getú  s   € Ø�{‰{Ðr   c                 ó   — || _         y r   rœ  ©r+   rç   s     r   rÚ   z	Value.setü  s	   € Øˆ�r   c                 óf   — t        | «      j                  ›d| j                  ›d| j                  ›d�S )Nr’  r“  r5   )rR   r7   r˜  r™  r.   s    r   r8   zValue.__repr__þ  s!   € Ü! $›Z×0Ó0°$·.³.À$Ç+Ã+ÐNÐNr   N©T)	r7   r9   r:   r,   rµ   rÚ   r8   rJ  rç   r=   r   r   r–  r–  ö  s#   „ óòòòOá�S˜#Ó�Er   r–  c                 ó.   — t        j                   | |«      S r   )r   )r   Úsequencerš  s      r   ÚArrayr£    s   € Ü�;‰;�x Ó*Ð*r   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚIteratorProxy)Ú__next__r@   Úthrowr­   c                 ó   — | S r   r=   r.   s    r   Ú__iter__zIteratorProxy.__iter__  ó   € Øˆr   c                 ó&   — | j                  d|«      S )Nr¦  rj  ©r+   rE   s     r   r¦  zIteratorProxy.__next__  s   € Ø×Ñ 
¨DÓ1Ð1r   c                 ó&   — | j                  d|«      S )Nr@   rj  r¬  s     r   r@   zIteratorProxy.send  s   € Ø×Ñ ¨Ó-Ð-r   c                 ó&   — | j                  d|«      S )Nr§  rj  r¬  s     r   r§  zIteratorProxy.throw  ó   € Ø×Ñ ¨Ó.Ð.r   c                 ó&   — | j                  d|«      S )Nr­   rj  r¬  s     r   r­   zIteratorProxy.close  r¯  r   N)	r7   r9   r:   r:  r©  r¦  r@   r§  r­   r=   r   r   r¥  r¥  	  s    „ Ø6€Iòò2ò.ò/ó/r   r¥  c                   ó*   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zy)ÚAcquirerProxy)ÚacquireÚreleaseNc                 ó8   — |€|fn||f}| j                  d|«      S ©Nr³  rj  )r+   Úblockingr$  rE   s       r   r³  zAcquirerProxy.acquire  s'   € Ø%˜o�‰{°H¸gÐ3FˆØ×Ñ 	¨4Ó0Ð0r   c                 ó$   — | j                  d«      S ©Nr´  rj  r.   s    r   r´  zAcquirerProxy.release  ó   € Ø×Ñ 	Ó*Ð*r   c                 ó$   — | j                  d«      S r¶  rj  r.   s    r   r,  zAcquirerProxy.__enter__  rº  r   c                 ó$   — | j                  d«      S r¹  rj  r.  s       r   r2  zAcquirerProxy.__exit__   rº  r   )TN)r7   r9   r:   r:  r³  r´  r,  r2  r=   r   r   r²  r²    s   „ Ø&€Ió1ò+ò+ó+r   r²  c                   ó.   — e Zd ZdZdd„Zdd„Zd„ Zdd„Zy)	ÚConditionProxy)r³  r´  rŽ   ÚnotifyÚ
notify_allNc                 ó(   — | j                  d|f«      S ©NrŽ   rj  r#  s     r   rŽ   zConditionProxy.wait&  ó   € Ø×Ñ ¨¨
Ó3Ð3r   c                 ó(   — | j                  d|f«      S )Nr¿  rj  )r+   Úns     r   r¿  zConditionProxy.notify(  s   € Ø×Ñ ¨1¨$Ó/Ð/r   c                 ó$   — | j                  d«      S )NrÀ  rj  r.   s    r   rÀ  zConditionProxy.notify_all*  s   € Ø×Ñ Ó-Ð-r   c                 óÔ   —  |«       }|r|S |�t        j                  «       |z   }nd }d }|s<|�|t        j                  «       z
  }|dk  r	 |S | j                  «        |«       }|sŒ<|S )Nr   )ÚtimeÚ	monotonicrŽ   )r+   Ú	predicater$  rH   ÚendtimeÚwaittimes         r   Úwait_forzConditionProxy.wait_for,  s~   € Ù“ˆÙØˆMØÐÜ—n‘nÓ&¨Ñ0‰GàˆGØˆHÙØÐ"Ø"¤T§^¡^Ó%5Ñ5�Ø˜q’=Øð ˆð �I‰I�hÔÙ“[ˆFò ð ˆr   r   )r	   )r7   r9   r:   r:  rŽ   r¿  rÀ  rÍ  r=   r   r   r¾  r¾  $  s   „ ØF€Ió4ó0ò.ôr   r¾  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zy)Ú
EventProxy)r�   rÚ   rO  rŽ   c                 ó$   — | j                  d«      S )Nr�   rj  r.   s    r   r�   zEventProxy.is_setA  s   € Ø×Ñ Ó)Ð)r   c                 ó$   — | j                  d«      S ©NrÚ   rj  r.   s    r   rÚ   zEventProxy.setC  ó   € Ø×Ñ Ó&Ð&r   c                 ó$   — | j                  d«      S )NrO  rj  r.   s    r   rO  zEventProxy.clearE  ó   € Ø×Ñ Ó(Ð(r   Nc                 ó(   — | j                  d|f«      S rÂ  rj  r#  s     r   rŽ   zEventProxy.waitG  rÃ  r   r   )r7   r9   r:   r:  r�   rÚ   rO  rŽ   r=   r   r   rÏ  rÏ  ?  s   „ Ø2€Iò*ò'ò)ô4r   rÏ  c                   óT   — e Zd ZdZd	d„Zd„ Zd„ Zed„ «       Zed„ «       Z	ed„ «       Z
y)
ÚBarrierProxy)Ú__getattribute__rŽ   ÚabortÚresetNc                 ó(   — | j                  d|f«      S rÂ  rj  r#  s     r   rŽ   zBarrierProxy.waitM  rÃ  r   c                 ó$   — | j                  d«      S )NrÚ  rj  r.   s    r   rÚ  zBarrierProxy.abortO  rÕ  r   c                 ó$   — | j                  d«      S )NrÛ  rj  r.   s    r   rÛ  zBarrierProxy.resetQ  rÕ  r   c                 ó&   — | j                  dd«      S )NrÙ  )Úpartiesrj  r.   s    r   rà  zBarrierProxy.partiesS  s   € à×ÑÐ 2°LÓAÐAr   c                 ó&   — | j                  dd«      S )NrÙ  )Ú	n_waitingrj  r.   s    r   râ  zBarrierProxy.n_waitingV  s   € à×ÑÐ 2°NÓCÐCr   c                 ó&   — | j                  dd«      S )NrÙ  )Úbrokenrj  r.   s    r   rä  zBarrierProxy.brokenY  s   € à×ÑÐ 2°KÓ@Ð@r   r   )r7   r9   r:   r:  rŽ   rÚ  rÛ  rJ  rà  râ  rä  r=   r   r   rØ  rØ  K  sR   „ Ø>€Ió4ò)ò)àñBó ðBàñDó ðDàñAó ñAr   rØ  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚNamespaceProxy)rÙ  Ú__setattr__Ú__delattr__c                 ó~   — |d   dk(  rt         j                  | |«      S t         j                  | d«      } |d|f«      S )Nr   rb   rh  rÙ  )ÚobjectrÙ  ©r+   rF  Ú
callmethods      r   Ú__getattr__zNamespaceProxy.__getattr__`  sB   € Øˆq‰6�SŠ=Ü×*Ñ*¨4°Ó5Ð5Ü×,Ñ,¨T°=ÓAˆ
ÙÐ,¨s¨fÓ5Ð5r   c                 ó‚   — |d   dk(  rt         j                  | ||«      S t         j                  | d«      } |d||f«      S )Nr   rb   rh  rç  )rê  rç  rÙ  )r+   rF  rç   rì  s       r   rç  zNamespaceProxy.__setattr__e  sE   € Øˆq‰6�SŠ=Ü×%Ñ% d¨C°Ó7Ð7Ü×,Ñ,¨T°=ÓAˆ
Ù˜-¨#¨u¨Ó6Ð6r   c                 ó~   — |d   dk(  rt         j                  | |«      S t         j                  | d«      } |d|f«      S )Nr   rb   rh  rè  )rê  rè  rÙ  rë  s      r   rè  zNamespaceProxy.__delattr__j  sA   € Øˆq‰6�SŠ=Ü×%Ñ% d¨CÓ0Ð0Ü×,Ñ,¨T°=ÓAˆ
Ù˜-¨#¨Ó0Ð0r   N)r7   r9   r:   r:  rí  rç  rè  r=   r   r   ræ  ræ  ^  s   „ ØB€Iò6ò
7ó
1r   ræ  c                   óR   — e Zd ZdZd„ Zd„ Z eee«      Z ee	j                  «      Zy)Ú
ValueProxy)rµ   rÚ   c                 ó$   — | j                  d«      S )Nrµ   rj  r.   s    r   rµ   zValueProxy.gets  rÓ  r   c                 ó(   — | j                  d|f«      S rÒ  rj  rž  s     r   rÚ   zValueProxy.setu  s   € Ø×Ñ ¨ xÓ0Ð0r   N)r7   r9   r:   r:  rµ   rÚ   rJ  rç   rH  ÚtypesÚGenericAliasÚ__class_getitem__r=   r   r   rñ  rñ  q  s.   „ Ø€Iò'ò1á�S˜#Ó€Eá# E×$6Ñ$6Ó7Ñr   rñ  ÚBaseListProxy)Ú__add__Ú__contains__Ú__delitem__Ú__getitem__Ú__len__Ú__mul__Ú__reversed__Ú__rmul__Ú__setitem__r\   ÚcountÚextendÚindexÚinsertrƒ  ÚremoveÚreverserÒ   Ú__imul__c                   ó   — e Zd Zd„ Zd„ Zy)Ú	ListProxyc                 ó,   — | j                  d|f«       | S )Nr  rj  rž  s     r   Ú__iadd__zListProxy.__iadd__ƒ  s   € Ø×Ñ˜ E 8Ô,Øˆr   c                 ó,   — | j                  d|f«       | S )Nr  rj  rž  s     r   r  zListProxy.__imul__†  s   € Ø×Ñ˜ e XÔ.Øˆr   N)r7   r9   r:   r  r  r=   r   r   r	  r	  ‚  s   „ òór   r	  Ú	DictProxy)rù  rú  rû  r©  rü  r   rO  rB  rµ   r   r   rƒ  ÚpopitemÚ
setdefaultr�  r   r©  ÚIteratorÚ
ArrayProxy)rü  rû  r   Ú	PoolProxy)ÚapplyÚapply_asyncr­   ÚimapÚimap_unorderedrÓ   ÚmapÚ	map_asyncÚstarmapÚstarmap_asyncr4  ÚAsyncResult)r  r  r  r  r  c                   ó   — e Zd Zd„ Zd„ Zy)r  c                 ó   — | S r   r=   r.   s    r   r,  zPoolProxy.__enter__¦  rª  r   c                 ó$   — | j                  «        y r   )r4  r.  s       r   r2  zPoolProxy.__exit__¨  s   € Ø�‰Õr   N)r7   r9   r:   r,  r2  r=   r   r   r  r  ¥  s   „ òór   c                   ó   — e Zd ZdZy)r   a(  
    Subclass of `BaseManager` which supports a number of shared object types.

    The types registered are those intended for the synchronization
    of threads, plus `dict`, `list` and `Namespace`.

    The `multiprocessing.Manager()` function creates started instances of
    this class.
    N)r7   r9   r:   r;   r=   r   r   r   r   ¯  s   „ òr   r   ÚQueueÚJoinableQueuer…   r~   ÚRLockÚ	SemaphoreÚBoundedSemaphoreÚ	ConditionÚBarrierÚPoolr!   rÜ   r£  )rß   rE  )rE  c                   ó>   — e Zd ZdZg fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
Ú_SharedMemoryTrackerz+Manages one or more shared memory segments.c                 ó    — || _         || _        y r   ©Úshared_memory_context_nameÚsegment_names)r+   r^   r-  s      r   r,   z_SharedMemoryTracker.__init__×  s   € Ø.2ˆDÔ+Ø!.ˆDÕr   c                 ó€   — t        j                  d|›dt        «       › �«       | j                  j	                  |«       y)z6Adds the supplied shared memory block name to tracker.zRegister segment ú in pid N)r   r”   r   r-  r\   ©r+   Úsegment_names     r   Úregister_segmentz%_SharedMemoryTracker.register_segmentÛ  s3   € ä�J‰JÐ*¨<Ð*:¸(Ä6Ã8À*ÐMÔNØ×Ñ×%Ñ% lÕ3r   c                 óê   — t        j                  d|›dt        «       › �«       | j                  j	                  |«       t        j                  |«      }|j                  «        |j                  «        y)z‚Calls unlink() on the shared memory block with the supplied name
            and removes it from the list of blocks being tracked.zDestroy segment r/  N)	r   r”   r   r-  r  r   ÚSharedMemoryr­   Úunlink)r+   r1  Úsegments      r   Údestroy_segmentz$_SharedMemoryTracker.destroy_segmentà  sX   € ô �J‰JÐ)¨,Ð)9¸Ä&Ã(ÀÐLÔMØ×Ñ×%Ñ% lÔ3Ü#×0Ñ0°Ó>ˆGØ�M‰MŒOØ�N‰NÕr   c                 óN   — | j                   dd D ]  }| j                  |«       Œ y)z<Calls destroy_segment() on all tracked shared memory blocks.N)r-  r7  r0  s     r   r5  z_SharedMemoryTracker.unlinké  s*   € à $× 2Ñ 2±1Ð 5ò 3�Ø×$Ñ$ \Õ2ñ3r   c                 ó’   — t        j                  d| j                  j                  › dt	        «       › �«       | j                  «        y )NzCall z.__del__ in )r   r”   r6   r7   r   r5  r.   s    r   Ú__del__z_SharedMemoryTracker.__del__î  s1   € Ü�J‰J˜˜tŸ~™~×6Ñ6Ð7°|ÄFÃHÀ:ÐNÔOØ�K‰K�Mr   c                 ó2   — | j                   | j                  fS r   r+  r.   s    r   r/   z!_SharedMemoryTracker.__getstate__ò  s   € Ø×3Ñ3°T×5GÑ5GÐHÐHr   c                 ó"   —  | j                   |Ž  y r   )r,   r1   s     r   r3   z!_SharedMemoryTracker.__setstate__õ  s   € ØˆD�M‰M˜5Ò!r   N)r7   r9   r:   r;   r,   r2  r7  r5  r:  r/   r3   r=   r   r   r)  r)  Ô  s,   „ Ù5à/1ó 	/ò	4ò
	ò	3ò
	ò	Ió	"r   r)  c                   óR   — e Zd Zej                  g d¢z   Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y)	ÚSharedMemoryServer)Útrack_segmentÚrelease_segmentÚlist_segmentsc                 ó  — t        j                  | g|¢­i |¤Ž | j                  }t        |t        «      rt        j                  |«      }t        d|› dt        «       › �«      | _	        t        j                  dt        «       › �«       y )NÚshm_rb   z"SharedMemoryServer started by pid )re   r,   r(   rN   rt   ÚosÚfsdecoder)  r   Úshared_memory_contextr   r”   )r+   rE   Úkwargsr(   s       r   r,   zSharedMemoryServer.__init__þ  sn   € Ü�O‰O˜DÐ2 4Ò2¨6Ò2Ø—l‘lˆGä˜'¤5Ô)ÜŸ+™+ gÓ.�ä$ t¨G¨9°A´f³h°ZÐ%@ÓAð Ô&ä�J‰JÐ;¼F»H¸:ÐFÕGr   c                óŽ   — t        | j                  |   d   d«      r| j                  |d<   t        j                  | ||g|¢­i |¤ŽS )zˆCreate a new distributed-shared object (not backed by a shared
            memory block) and return its id to be used in a Proxy Object.rg  Ú_shared_memory_proxyrF  )r5  ru   rF  re   rg   )r+   rC   r'   rE   rG  s        r   rg   zSharedMemoryServer.create  sK   € ô �t—}‘} VÑ,¨RÑ0Ð2HÔIØ26×2LÑ2L�Ð.Ñ/Ü—=‘=  q¨&ÐB°4ÒB¸6ÑBÐBr   c                 ób   — | j                   j                  «        t        j                  | |«      S )zACall unlink() on all tracked shared memory, terminate the Server.)rF  r5  re   rf   rÎ   s     r   rf   zSharedMemoryServer.shutdown  s%   € à×&Ñ&×-Ñ-Ô/Ü—?‘? 4¨Ó+Ð+r   c                 ó:   — | j                   j                  |«       y)z?Adds the supplied shared memory block name to Server's tracker.N)rF  r2  ©r+   rC   r1  s      r   r?  z SharedMemoryServer.track_segment  s   € à×&Ñ&×7Ñ7¸ÕEr   c                 ó:   — | j                   j                  |«       y)zˆCalls unlink() on the shared memory block with the supplied name
            and removes it from the tracker instance inside the Server.N)rF  r7  rL  s      r   r@  z"SharedMemoryServer.release_segment  s   € ð ×&Ñ&×6Ñ6°|ÕDr   c                 ó.   — | j                   j                  S )zbReturns a list of names of shared memory blocks that the Server
            is currently tracking.)rF  r-  rÎ   s     r   rA  z SharedMemoryServer.list_segments   s   € ð ×-Ñ-×;Ñ;Ð;r   N)r7   r9   r:   re   r£   r,   rg   rf   r?  r@  rA  r=   r   r   r>  r>  ù  s6   „ à—‘ÚFñGˆò	Hò	Cò	,ò
	Fò	Eó
	<r   r>  c                   ó2   — e Zd ZdZeZd„ Zd„ Zd„ Zd„ Z	d„ Z
y)r   a¡  Like SyncManager but uses SharedMemoryServer instead of Server.

        It provides methods for creating and returning SharedMemory instances
        and for creating a list-like object (ShareableList) backed by shared
        memory.  It also provides methods that create and return Proxy Objects
        that support synchronization across processes (i.e. multi-process-safe
        locks and semaphores).
        c                 óô   — t         j                  dk(  rddlm} |j	                  «        t        j                  | g|¢­i |¤Ž t        j                  | j                  j                  › dt        «       › �«       y )NÚposixr	   )Úresource_trackerz created by pid )rD  r^   Ú rR  Úensure_runningr   r,   r   r”   r6   r7   r   )r+   rE   rG  rR  s       r   r,   zSharedMemoryManager.__init__2  s\   € Ü�w‰w˜'Ò!õ /Ø ×/Ñ/Ô1Ü× Ñ  Ð7¨Ò7°Ò7Ü�J‰J˜$Ÿ.™.×1Ñ1Ð2Ð2BÄ6Ã8À*ÐMÕNr   c                 óp   — t        j                  | j                  j                  › dt	        «       › �«       y )Nz.__del__ by pid )r   r”   r6   r7   r   r.   s    r   r:  zSharedMemoryManager.__del__>  s'   € Ü�J‰J˜$Ÿ.™.×1Ñ1Ð2Ð2BÄ6Ã8À*ÐMÕNr   c                 óì  — | j                   j                  t        j                  k7  r’| j                   j                  t        j                  k(  rt        d«      ‚| j                   j                  t        j                  k(  rt        d«      ‚t        dj                  | j                   j                  «      «      ‚| j                  | j                  | j                  | j                  | j                  «      S )z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downrý   )ró   rç   ræ   ré   rê   r   rë   rQ   r  rþ   rñ   rò   rô   r.   s    r   rÿ   zSharedMemoryManager.get_serverA  s±   € à�{‰{× Ñ ¤E§M¡MÒ1Ø—;‘;×$Ñ$¬¯©Ò5Ü&Ð'KÓLÐLØ—[‘[×&Ñ&¬%¯.©.Ò8Ü&Ð'JÓKÐKä&Ø,×3Ñ3°D·K±K×4EÑ4EÓFóHð Hà—<‘< §¡°·±Ø $§¡¨t×/?Ñ/?óAð Ar   c                 ó,  — | j                  | j                  | j                  ¬«      5 }t        j                  dd|¬«      }	 t        |dd|j                  f«       	 ddd«       |S # t        $ r}|j                  «        |‚d}~ww xY w# 1 sw Y   S xY w)zoReturns a new SharedMemory instance with the specified size in
            bytes, to be tracked by the manager.r  NT)rg   Úsizer?  )	rö   rñ   rò   r   r4  rI   r^   ÚBaseExceptionr5  )r+   rX  r¯   Úsmsrª   s        r   r4  z SharedMemoryManager.SharedMemoryN  s‰   € ð —‘˜dŸm™m°T·]±]�ÓCð ÀtÜ#×0Ñ0°¸dÈÔN�ðÜ˜T 4¨¸3¿8¹8¸+ÕF÷ð ˆJøô %ò Ø—J‘J”LØ�Gûðú÷	ð ˆJús)   ¨B	ÁA&Á&	BÁ/BÂBÂB	Â	Bc                 óN  — | j                  | j                  | j                  ¬«      5 }t        j                  |«      }	 t        |dd|j                  j                  f«       	 ddd«       |S # t        $ r!}|j                  j                  «        |‚d}~ww xY w# 1 sw Y   S xY w)z�Returns a new ShareableList instance populated with the values
            from the input sequence, to be tracked by the manager.r  Nr?  )
rö   rñ   rò   r   ÚShareableListrI   Úshmr^   rY  r5  )r+   r¢  r¯   Úslrª   s        r   r\  z!SharedMemoryManager.ShareableListZ  s�   € ð —‘˜dŸm™m°T·]±]�ÓCð ÀtÜ"×0Ñ0°Ó:�ðÜ˜T 4¨¸2¿6¹6¿;¹;¸.ÕI÷ð ˆIøô %ò Ø—F‘F—M‘M”OØ�Gûðú÷	ð ˆIús(   ¨B¿#A-Á-	BÁ6BÂBÂBÂB$N)r7   r9   r:   r;   r>  r  r,   r:  rÿ   r4  r\  r=   r   r   r   r   &  s*   „ ñ	ð %ˆò
	Oò	Oò	Aò
	ó
	r   r  r   )WÚ__all__r‘   r}   r  r   ÚqueuerÈ  rô  rD  r   rØ   r   rS  r
   Úcontextr   r   r   r   r   r   r   r   Ú	HAS_SHMEMr\   ÚImportErrorr   rG  rR   rZ   Ú
view_typesr$   Ú	view_typerê  r   rI   rB   r¤   rS   r`   rc   re   ræ   r�   r‚   ÚXmlListenerÚ	XmlClientrx   r   rÚ   rL  r   rx  rŠ  rC  r�  r–  r£  r¥  r²  r¾  rÏ  rØ  ræ  rñ  r÷  r	  r  r;  r  ÚBasePoolProxyr  r   r   r…   r~   r"  r#  r$  r%  r&  r'  r!   rÜ   r)  r>  r   )r^   s   0r   ú<module>ri     sW  ðò A€ó Û Û Û Û Û Û Û 	Ý å  å ß @Ñ @Ý Ý Ý Ý ð*Ýð €IØ‡N�NÐ(Ô)ò2à €	× Ñ �5—;‘; Ô -à4MÖN¨D‰dÐ$‘7˜2˜tÓ$Ó&Õ'ÒN€
òàò 3€IØ€I×Ñ�y /Õ2ð3àˆzôMˆFô Mð. &(¨bó )òIôC�)ô Cò	òAôF*ˆVô F*ôZ
ˆFô ð ×#Ñ# Z×%6Ñ%6Ð7Ø×)Ñ)¨:×+?Ñ+?Ð@ñ€ôt'�&ô t'ôt�cô ôm=�ô m=òf:ð* )+ó ð, 8<Ø7<óô:
E�ô 
Eô
ˆFô 
ó+ô/�Iô /ô
+�Iô 
+ô�]ô ô6	4�ô 	4ôA�9ô Aô&1�Yô 1ô&8�ô 8ñ ˜oð 0ó €ô�ô ñ ˜+ð (ó €	ð �
ð €	Ô ñ
 ˜<ð *ó €
ñ
 ˜kð ,ó €ð
 !ØØ"ØØ ñ$€Ô  ô�ô ô	�+ô 	ð × Ñ �W˜eŸk™kÔ *Ø × Ñ �_ e§k¡kÔ 2Ø × Ñ �W˜iŸo™o¨zÔ :Ø × Ñ �V˜YŸ^™^¨]Ô ;Ø × Ñ �W˜iŸo™o¨}Ô =Ø × Ñ �[ )×"5Ñ"5°}Ô EØ × Ñ Ð'¨×)CÑ)CØ"ô$à × Ñ �[ )×"5Ñ"5°~Ô FØ × Ñ �Y 	× 1Ñ 1°<Ô @Ø × Ñ �V˜TŸY™Y¨	Ô 2Ø × Ñ �V˜T 9Ô -Ø × Ñ �V˜T 9Ô -Ø × Ñ �W˜e ZÔ 0Ø × Ñ �W˜e ZÔ 0Ø × Ñ �[ )¨^Ô <ð × Ñ �Z¨=ÈÐ Ô NØ × Ñ �]°%Ð Ô 8ñ ÷""ñ ""ôJ*<˜Vô *<ôZ>˜kõ >ðg øð]% ò ØƒIðüò Os   ÁO; ÂP	Ï;PÐP