Ë
    ò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mZ ddlmZ ddlm	Z	 	 ddlm
Z
mZ  e ed	«      «      \  ZZej                  j"                  Z G d
„ de«      Z
 G d„ de
«      Z G d„ de«      Z G d„ de
«      Z G d„ de
«      Z G d„ de«      Z G d„ de«      Z G d„ dej2                  «      Zy# e$ r	  ed«      ‚w xY w))ÚLockÚRLockÚ	SemaphoreÚBoundedSemaphoreÚ	ConditionÚEventé    Né   )Úcontext)Úprocess)Úutil)ÚSemLockÚ
sem_unlinkz—This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.é   c                   ór   — e Zd Z ej                  «       Zd„ Zed„ «       Zd„ Z	d„ Z
d„ Zd„ Zd„ Zed„ «       Zy	)
r   c                ó  — |€t         j                  j                  «       }|j                  «       dk(  | _        t
        j                  dk(  xs | j                  }t        d«      D ]2  }	 t        j                  |||| j                  «       |«      x}| _         n t        d«      ‚t        j                  d|j                  z  «       | j!                  «        t
        j                  dk7  rd„ }t        j"                  | |«       | j                  j$                  �`ddlm}	  |	| j                  j$                  d	«       t        j*                  | t        j,                  | j                  j$                  fd
¬«       y y # t        $ r Y �Œ!w xY w)NÚforkÚwin32éd   zcannot find name for semaphorezcreated semlock with handle %sc                 ó8   — | j                   j                  «        y ©N)Ú_semlockÚ_after_fork)Úobjs    ú2/usr/lib/python3.12/multiprocessing/synchronize.pyr   z%SemLock.__init__.<locals>._after_forkG   s   € Ø—‘×(Ñ(Õ*ó    r	   )ÚregisterÚ	semaphorer   )Úexitpriority)r
   Ú_default_contextÚget_contextÚget_start_methodÚ_is_fork_ctxÚsysÚplatformÚrangeÚ_multiprocessingr   Ú
_make_namer   ÚFileExistsErrorr   ÚdebugÚhandleÚ_make_methodsÚregister_after_forkÚnameÚresource_trackerr   ÚFinalizeÚ_cleanup)
ÚselfÚkindÚvalueÚmaxvalueÚctxÚ
unlink_nowÚiÚslr   r   s
             r   Ú__init__zSemLock.__init__2   sP  € Øˆ;Ü×*Ñ*×6Ñ6Ó8ˆCØ×0Ñ0Ó2°fÑ<ˆÔÜ—\‘\ WÑ,ÒA°×0AÑ0Aˆ
Ü�s“ò 
	DˆAðÜ%5×%=Ñ%=Ø˜% ¨4¯?©?Ó+<Øó& ð  ��T”]ñ ð
	Dô "Ð"BÓCÐCä�
‰
Ð3°b·i±iÑ?Ô@Ø×ÑÔä�<‰<˜7Ò"ò+ä×$Ñ$ T¨;Ô7à�=‰=×ÑÐ)õ 3Ù�T—]‘]×'Ñ'¨Ô5Ü�M‰M˜$¤× 0Ñ 0°4·=±=×3EÑ3EÐ2GØ'(ö*ð *øô #ò Úðús   Á).E:Å:	FÆFc                 ó8   — ddl m} t        | «        || d«       y )Nr	   )Ú
unregisterr   )r.   r;   r   )r-   r;   s     r   r0   zSemLock._cleanupT   s   € å0Ü�4ÔÙ�4˜Õ%r   c                 óp   — | j                   j                  | _        | j                   j                  | _        y r   )r   ÚacquireÚrelease©r1   s    r   r+   zSemLock._make_methodsZ   s$   € Ø—}‘}×,Ñ,ˆŒØ—}‘}×,Ñ,ˆ�r   c                 ó6   — | j                   j                  «       S r   )r   Ú	__enter__r?   s    r   rA   zSemLock.__enter__^   s   € Ø�}‰}×&Ñ&Ó(Ð(r   c                 ó4   —  | j                   j                  |Ž S r   )r   Ú__exit__©r1   Úargss     r   rC   zSemLock.__exit__a   s   € Ø%ˆt�}‰}×%Ñ% tÐ,Ð,r   c                 óT  — t        j                  | «       | j                  }t        j                  dk(  r.t        j
                  «       j                  |j                  «      }n#| j                  rt        d«      ‚|j                  }||j                  |j                  |j                  fS )Nr   z¸A SemLock created in a fork context is being shared with a process in a spawn context. This is not supported. Please use the same context to create multiprocessing objects and Process.)r
   Úassert_spawningr   r#   r$   Úget_spawning_popenÚduplicate_for_childr*   r"   ÚRuntimeErrorr2   r4   r-   )r1   r8   Úhs      r   Ú__getstate__zSemLock.__getstate__d   s†   € Ü×Ñ Ô%Ø�]‰]ˆÜ�<‰<˜7Ò"Ü×*Ñ*Ó,×@Ñ@ÀÇÁÓK‰Aà× Ò Ü"ð $Jó Kð Kð —	‘	ˆAØ�2—7‘7˜BŸK™K¨¯©Ð1Ð1r   c                 óª   — t        j                  j                  |Ž | _        t	        j
                  d|d   z  «       | j                  «        d| _        y )Nz recreated blocker with handle %rr   F)r&   r   Ú_rebuildr   r   r)   r+   r"   ©r1   Ústates     r   Ú__setstate__zSemLock.__setstate__r   sD   € Ü(×0Ñ0×9Ñ9¸5ÐAˆŒÜ�
‰
Ð5¸¸a¹Ñ@ÔAØ×ÑÔà!ˆÕr   c                  ó|   — t        j                  «       j                  d   ›dt        t        j
                  «      ›�S )NÚ	semprefixú-)r   Úcurrent_processÚ_configÚnextr   Ú_rand© r   r   r'   zSemLock._make_namey   s/   € ä!×1Ñ1Ó3×;Ñ;¸KÓHÜœwŸ}™}Ô-ð/ð 	/r   N)Ú__name__Ú
__module__Ú__qualname__ÚtempfileÚ_RandomNameSequencerX   r9   Ústaticmethodr0   r+   rA   rC   rL   rQ   r'   rY   r   r   r   r   .   sY   „ à(ˆH×(Ñ(Ó*€Eò *ðD ñ&ó ð&ò
-ò)ò-ò2ò"ð ñ/ó ñ/r   r   c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)r   c                óH   — t        j                  | t        |t        |¬«       y ©N©r5   )r   r9   Ú	SEMAPHOREÚSEM_VALUE_MAX©r1   r3   r5   s      r   r9   zSemaphore.__init__„   s   € Ü×Ñ˜œy¨%´ÀCÖHr   c                 ó6   — | j                   j                  «       S r   )r   Ú
_get_valuer?   s    r   Ú	get_valuezSemaphore.get_value‡   s   € Ø�}‰}×'Ñ'Ó)Ð)r   c                 ó”   — 	 | j                   j                  «       }d| j                  j                  ›d|›d�S # t        $ r d}Y Œ*w xY w)NÚunknownú<ú(value=ú)>)r   rh   Ú	ExceptionÚ	__class__rZ   ©r1   r3   s     r   Ú__repr__zSemaphore.__repr__Š   sG   € ð	Ø—M‘M×,Ñ,Ó.ˆEøð $(§>¡>×#:Ó#:ºEÐBÐBøô ò 	ØŠEð	ús   ‚9 ¹AÁAN©r	   )rZ   r[   r\   r9   ri   rr   rY   r   r   r   r   ‚   s   „ óIò*óCr   r   c                   ó   — e Zd Zdd„Zd„ Zy)r   c                ó@   — t        j                  | t        |||¬«       y rb   ©r   r9   rd   rf   s      r   r9   zBoundedSemaphore.__init__—   s   € Ü×Ñ˜œy¨%°¸CÖ@r   c                 óÂ   — 	 | j                   j                  «       }d| j                  j                  ›d|›d| j                   j
                  ›d�S # t        $ r d}Y ŒAw xY w)Nrk   rl   rm   z, maxvalue=rn   )r   rh   ro   rp   rZ   r4   rq   s     r   rr   zBoundedSemaphore.__repr__š   sY   € ð	Ø—M‘M×,Ñ,Ó.ˆEøð —‘×'Ó'ª°·±×0FÓ0FðHð 	Høô ò 	ØŠEð	ús   ‚A ÁAÁANrs   ©rZ   r[   r\   r9   rr   rY   r   r   r   r   •   s   „ óAóHr   r   c                   ó   — e Zd Zd„ Zd„ Zy)r   c                ó@   — t        j                  | t        dd|¬«       y ©Nr	   rc   rv   ©r1   r5   s     r   r9   zLock.__init__¨   s   € Ü×Ñ˜œy¨!¨Q°CÖ8r   c                 óà  — 	 | j                   j                  «       rdt        j                  «       j                  }t        j                  «       j                  dk7  rg|dt        j                  «       j                  z   z  }nB| j                   j                  «       dk(  rd}n"| j                   j                  «       dkD  rd}nd}d	| j                  j                  ›d
|›d�S # t        $ r d}Y Œ*w xY w)NÚ
MainThreadú|r	   ÚNoner   ÚSomeOtherThreadÚSomeOtherProcessrk   rl   z(owner=rn   )r   Ú_is_miner   rU   r-   Ú	threadingÚcurrent_threadrh   Ú_countro   rp   rZ   )r1   r-   s     r   rr   zLock.__repr__«   sÇ   € ð	Ø�}‰}×%Ñ%Ô'Ü×.Ñ.Ó0×5Ñ5�Ü×+Ñ+Ó-×2Ñ2°lÒBØ˜C¤)×":Ñ":Ó"<×"AÑ"AÑAÑA‘DØ—‘×)Ñ)Ó+¨qÒ0Ø‘Ø—‘×%Ñ%Ó'¨!Ò+Ø(‘à)�øð $(§>¡>×#:Ó#:ºDÐAÐAøô ò 	ØŠDð	ús   ‚C C ÃC-Ã,C-Nrx   rY   r   r   r   r   ¦   s   „ ò9óBr   r   c                   ó   — e Zd Zd„ Zd„ Zy)r   c                ó@   — t        j                  | t        dd|¬«       y r{   )r   r9   ÚRECURSIVE_MUTEXr|   s     r   r9   zRLock.__init__Á   s   € Ü×Ñ˜œ°°1¸#Ö>r   c                 ó2  — 	 | j                   j                  «       r~t        j                  «       j                  }t        j                  «       j                  dk7  r$|dt        j                  «       j                  z   z  }| j                   j                  «       }nK| j                   j                  «       dk(  rd\  }}n(| j                   j                  «       dkD  rd\  }}nd\  }}d	| j                  j                  ›d
|›d|›d�S # t        $ r d\  }}Y Œ0w xY w)Nr~   r   r	   )r€   r   r   )r�   Únonzero)r‚   r‹   )rk   rk   rl   ú(ú, rn   )r   rƒ   r   rU   r-   r„   r…   r†   rh   ro   rp   rZ   )r1   r-   Úcounts      r   rr   zRLock.__repr__Ä   së   € ð	/Ø�}‰}×%Ñ%Ô'Ü×.Ñ.Ó0×5Ñ5�Ü×+Ñ+Ó-×2Ñ2°lÒBØ˜C¤)×":Ñ":Ó"<×"AÑ"AÑAÑA�DØŸ™×,Ñ,Ó.‘Ø—‘×)Ñ)Ó+¨qÒ0Ø'‘�‘eØ—‘×%Ñ%Ó'¨!Ò+Ø:‘�‘eà;‘��eøð "&§¡×!8Ó!8º$ÂÐFÐFøô ò 	/Ø.‰KˆD’%ð	/ús   ‚C#D ÄDÄDNrx   rY   r   r   r   r   ¿   s   „ ò?óGr   r   c                   óV   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dd	„Z
dd
„Zd„ Zdd„Zy)r   Nc                óÚ   — |xs |j                  «       | _        |j                  d«      | _        |j                  d«      | _        |j                  d«      | _        | j                  «        y ©Nr   )r   Ú_lockr   Ú_sleeping_countÚ_woken_countÚ_wait_semaphorer+   )r1   Úlockr5   s      r   r9   zCondition.__init__Û   sS   € ØÒ(˜SŸY™Y›[ˆŒ
Ø"Ÿ}™}¨QÓ/ˆÔØŸM™M¨!Ó,ˆÔØ"Ÿ}™}¨QÓ/ˆÔØ×ÑÕr   c                 óˆ   — t        j                  | «       | j                  | j                  | j                  | j
                  fS r   )r
   rG   r’   r“   r”   r•   r?   s    r   rL   zCondition.__getstate__â   s:   € Ü×Ñ Ô%Ø—
‘
˜D×0Ñ0Ø×!Ñ! 4×#7Ñ#7ð9ð 	9r   c                 óZ   — |\  | _         | _        | _        | _        | j	                  «        y r   )r’   r“   r”   r•   r+   rO   s     r   rQ   zCondition.__setstate__ç   s*   € à49ñ	2ˆŒ�TÔ)Ø	Ô	˜DÔ0Ø×ÑÕr   c                 ó6   — | j                   j                  «       S r   )r’   rA   r?   s    r   rA   zCondition.__enter__ì   s   € Ø�z‰z×#Ñ#Ó%Ð%r   c                 ó4   —  | j                   j                  |Ž S r   )r’   rC   rD   s     r   rC   zCondition.__exit__ï   s   € Ø"ˆt�z‰z×"Ñ" DÐ)Ð)r   c                 óp   — | j                   j                  | _        | j                   j                  | _        y r   )r’   r=   r>   r?   s    r   r+   zCondition._make_methodsò   s$   € Ø—z‘z×)Ñ)ˆŒØ—z‘z×)Ñ)ˆ�r   c                 ó  — 	 | j                   j                  j                  «       | j                  j                  j                  «       z
  }d| j
                  j                  ›d| j                  ›d|›d�S # t        $ r d}Y Œ7w xY w)Nrk   rl   rŒ   r�   rn   )r“   r   rh   r”   ro   rp   rZ   r’   )r1   Únum_waiterss     r   rr   zCondition.__repr__ö   ss   € ð	$Ø×/Ñ/×8Ñ8×CÑCÓEØ×,Ñ,×5Ñ5×@Ñ@ÓBñCˆKøð "&§¡×!8Ó!8¸$¿*»*ÂkÐRÐRøô ò 	$Ø#ŠKð	$ús   ‚A	A5 Á5BÂBc                 ó|  — | j                   j                  j                  «       sJ d«       ‚| j                  j	                  «        | j                   j                  j                  «       }t        |«      D ]  }| j                   j	                  «        Œ 	 | j                  j                  d|«      | j                  j	                  «        t        |«      D ]  }| j                   j                  «        Œ S # | j                  j	                  «        t        |«      D ]  }| j                   j                  «        Œ w xY w)Nz,must acquire() condition before using wait()T)
r’   r   rƒ   r“   r>   r†   r%   r•   r=   r”   )r1   ÚtimeoutrŽ   r7   s       r   ÚwaitzCondition.waitþ   s  € Ø�z‰z×"Ñ"×+Ñ+Ô-ð 	>Ø=ó	>Ð-ð 	×Ñ×$Ñ$Ô&ð —
‘
×#Ñ#×*Ñ*Ó,ˆÜ�u“ò 	!ˆAØ�J‰J×ÑÕ ð	!ð		%à×'Ñ'×/Ñ/°°gÓ>ð ×Ñ×%Ñ%Ô'ô ˜5“\ò %�Ø—
‘
×"Ñ"Õ$ñ%øð ×Ñ×%Ñ%Ô'ô ˜5“\ò %�Ø—
‘
×"Ñ"Õ$ñ%ús   ÂC5 Ã5AD;c                 óä  — | j                   j                  j                  «       sJ d«       ‚| j                  j	                  d«      rJ d«       ‚| j
                  j	                  d«      r@| j                  j	                  d«      }|sJ d«       ‚| j
                  j	                  d«      rŒ@d}||k  r[| j                  j	                  d«      r@| j                  j                  «        |dz  }||k  r| j                  j	                  d«      rŒ@|rdt        |«      D ]  }| j
                  j	                  «        Œ | j                  j	                  d«      r	 | j                  j	                  d«      rŒy y y )Nzlock is not ownedFz<notify: Should not have been able to acquire _wait_semaphorez>notify: Bug in sleeping_count.acquire- res should not be Falser   r	   )	r’   r   rƒ   r•   r=   r”   r“   r>   r%   )r1   ÚnÚresÚsleepersr7   s        r   ÚnotifyzCondition.notify  s[  € Ø�z‰z×"Ñ"×+Ñ+Ô-ÐBÐ/BÓBÐ-Ø×'Ñ'×/Ñ/Øôð 	*ð)ó	*ð ð ×Ñ×'Ñ'¨Ô.Ø×&Ñ&×.Ñ.¨uÓ5ˆCÙð 8ð 7ó 8�3ð ×Ñ×'Ñ'¨Õ.ð
 ˆØ˜Šl˜t×3Ñ3×;Ñ;¸EÔBØ× Ñ ×(Ñ(Ô*Ø˜‰MˆHð ˜Šl˜t×3Ñ3×;Ñ;¸EÕBñ Ü˜8“_ò ,�Ø×!Ñ!×)Ñ)Õ+ð,ð ×&Ñ&×.Ñ.¨uÔ5Øð ×&Ñ&×.Ñ.¨u×5ð r   c                 óD   — | j                  t        j                  ¬«       y )N)r¢   )r¥   r#   Úmaxsizer?   s    r   Ú
notify_allzCondition.notify_all/  s   € Ø�‰”c—k‘kˆÕ"r   c                 óÔ   —  |«       }|r|S |�t        j                  «       |z   }nd }d }|s<|�|t        j                  «       z
  }|dk  r	 |S | j                  «        |«       }|sŒ<|S r‘   )ÚtimeÚ	monotonicr    )r1   Ú	predicaterŸ   ÚresultÚendtimeÚwaittimes         r   Úwait_forzCondition.wait_for2  s~   € Ù“ˆÙØˆMØÐÜ—n‘nÓ&¨Ñ0‰GàˆGØˆHÙØÐ"Ø"¤T§^¡^Ó%5Ñ5�Ø˜q’=Øð ˆð �I‰I�hÔÙ“[ˆFò ð ˆr   r   rs   )rZ   r[   r\   r9   rL   rQ   rA   rC   r+   rr   r    r¥   r¨   r°   rY   r   r   r   r   Ù   s:   „ óò9ò
ò
&ò*ò*òSó%ó.ò4#ôr   r   c                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd	d„Zdefd„Z	y)
r   c                óx   — |j                  |j                  «       «      | _        |j                  d«      | _        y r‘   )r   r   Ú_condr   Ú_flagr|   s     r   r9   zEvent.__init__J  s(   € Ø—]‘] 3§8¡8£:Ó.ˆŒ
Ø—]‘] 1Ó%ˆ�
r   c                 óÆ   — | j                   5  | j                  j                  d«      r$| j                  j                  «        	 d d d «       y	 d d d «       y# 1 sw Y   y xY w©NFT)r³   r´   r=   r>   r?   s    r   Úis_setzEvent.is_setN  sR   € Ø�Z‰Zñ 	Ø�z‰z×!Ñ! %Ô(Ø—
‘
×"Ñ"Ô$Ø÷	ð 	ð ÷		÷ 	ñ 	ús   �7AÁAÁA c                 óä   — | j                   5  | j                  j                  d«       | j                  j                  «        | j                   j	                  «        d d d «       y # 1 sw Y   y xY w©NF)r³   r´   r=   r>   r¨   r?   s    r   Úsetz	Event.setU  sP   € Ø�Z‰Zñ 	$Ø�J‰J×Ñ˜uÔ%Ø�J‰J×ÑÔ Ø�J‰J×!Ñ!Ô#÷	$÷ 	$ñ 	$ús   �AA&Á&A/c                 ó|   — | j                   5  | j                  j                  d«       d d d «       y # 1 sw Y   y xY wr¹   )r³   r´   r=   r?   s    r   ÚclearzEvent.clear[  s0   € Ø�Z‰Zñ 	&Ø�J‰J×Ñ˜uÔ%÷	&÷ 	&ñ 	&ús   �2²;Nc                 óh  — | j                   5  | j                  j                  d«      r| j                  j                  «        n| j                   j	                  |«       | j                  j                  d«      r$| j                  j                  «        	 d d d «       y	 d d d «       y# 1 sw Y   y xY wr¶   )r³   r´   r=   r>   r    )r1   rŸ   s     r   r    z
Event.wait_  s„   € Ø�Z‰Zñ 		Ø�z‰z×!Ñ! %Ô(Ø—
‘
×"Ñ"Õ$à—
‘
—‘ Ô(à�z‰z×!Ñ! %Ô(Ø—
‘
×"Ñ"Ô$Ø÷		ð 		ð ÷		÷ 		ñ 		ús   �BB(ÂB(Â(B1Úreturnc                 ó|   — | j                  «       rdnd}dt        | «      j                  › dt        | «      d›d|› d�S )Nrº   Úunsetrl   z at z#xú ú>)r·   Útyper\   Úid)r1   Ú
set_statuss     r   rr   zEvent.__repr__k  s=   € Ø"Ÿk™kœm‘U°ˆ
Ø”4˜“:×*Ñ*Ð+¨4´°4³¸¨}¸A¸j¸\ÈÐKÐKr   r   )
rZ   r[   r\   r9   r·   rº   r¼   r    Ústrrr   rY   r   r   r   r   H  s)   „ ò&òò$ò&ó
ðL˜#ô Lr   r   c                   óˆ   — e Zd Zd	d„Zd„ Zd„ Zed„ «       Zej                  d„ «       Zed„ «       Z	e	j                  d„ «       Z	y)
ÚBarrierNc                ó´   — dd l }ddlm}  ||j                  d«      dz  «      }|j	                  «       }| j                  |||||f«       d| _        d| _        y )Nr   r	   )ÚBufferWrapperr7   r   )ÚstructÚheaprÊ   Úcalcsizer   rQ   Ú_stater†   )	r1   ÚpartiesÚactionrŸ   r5   rË   rÊ   ÚwrapperÚconds	            r   r9   zBarrier.__init__t  sR   € ÛÝ'Ù §¡°Ó 4°qÑ 8Ó9ˆØ�}‰}‹ˆØ×Ñ˜7 F¨G°T¸7ÐCÔDØˆŒØˆ�r   c                 ó¢   — |\  | _         | _        | _        | _        | _        | j                  j                  «       j                  d«      | _        y )Nr7   )Ú_partiesÚ_actionÚ_timeoutr³   Ú_wrapperÚcreate_memoryviewÚcastÚ_arrayrO   s     r   rQ   zBarrier.__setstate__}  s>   € à&+ñ	$ˆŒ˜œ d¤mØ	Œ�T”]Ø—m‘m×5Ñ5Ó7×<Ñ<¸SÓAˆ�r   c                 ót   — | j                   | j                  | j                  | j                  | j                  fS r   )rÔ   rÕ   rÖ   r³   r×   r?   s    r   rL   zBarrier.__getstate__‚  s,   € Ø—‘˜tŸ|™|¨T¯]©]Ø—
‘
˜DŸM™Mð+ð 	+r   c                 ó    — | j                   d   S r‘   ©rÚ   r?   s    r   rÎ   zBarrier._state†  ó   € à�{‰{˜1‰~Ðr   c                 ó"   — || j                   d<   y r‘   rÝ   rq   s     r   rÎ   zBarrier._stateŠ  ó   € àˆ�‰�AŠr   c                 ó    — | j                   d   S ©Nr	   rÝ   r?   s    r   r†   zBarrier._countŽ  rÞ   r   c                 ó"   — || j                   d<   y râ   rÝ   rq   s     r   r†   zBarrier._count’  rà   r   )NN)
rZ   r[   r\   r9   rQ   rL   ÚpropertyrÎ   Úsetterr†   rY   r   r   rÈ   rÈ   r  sj   „ óòBò
+ð ñó ðð ‡]�]ñó ðð ñó ðð ‡]�]ñó ñr   rÈ   )Ú__all__r„   r#   r]   r&   rª   Ú r
   r   r   r   r   ÚImportErrorÚlistr%   r‰   rd   re   Úobjectr   r   r   r   r   r   rÈ   rY   r   r   ú<module>rë      sî   ðò€ó Û 
Û Û Û å Ý Ý ð
4ß4ñ "¡%¨£(›^Ñ €�Ø ×(Ñ(×6Ñ6€ôN/ˆfô N/ôhC�ô Cô&H�yô Hô"Bˆ7ô Bô2GˆGô Gô4i�ô iô^%LˆFô %LôT"ˆi×Ñõ "øðk
 	ò 4Ù
ð 3ó 4ð 4ð4ús   ¬B> Â>C