Ë
    èÿæi</  ã                   óÈ  — 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m	Z	m
Z
mZmZmZmZ d dlmZ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Zd„ Zd	„ Z G d
„ de«      Zdej@                  fgZ!d„ Z"d„ Z#d„ Z$d„ 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,e-dk(  r ej\                  «        yy) é    N)ÚTestCaseÚoverride_configÚoverride_env_configÚcaptured_stdoutÚforbid_codegenÚskip_parfors_unsupportedÚ
needs_blas)ÚjitÚnjit)ÚtypesÚcompilerÚutils)ÚNumbaPerformanceWarning)Úprange)Újitclassc                 ó   — | dz   }|S )Né   © )ÚsomeargÚretvals     úk/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_debug.pyÚsimple_nopythonr      s   € Ø�q‰[€FØ€Mó    c              #   ó   K  — | –— |–— y ­w©Nr   )ÚxÚys     r   Ú
simple_genr      s   è ø€ Ø
‚GØ
ƒGùs   ‚
c                   ó   — e Zd Zd„ Zy)ÚSimpleClassc                 ó   — d| _         y )Né   ©Úh)Úselfs    r   Ú__init__zSimpleClass.__init__   s	   € Øˆ�r   N)Ú__name__Ú
__module__Ú__qualname__r&   r   r   r   r    r       s   „ ór   r    r$   c                 ó   — | j                   S r   r#   )Úobjs    r   Úsimple_class_userr,   #   s   € Ø�5‰5€Lr   c                 ó.   — t        j                  | |«      S r   )ÚnpÚdot)ÚaÚbs     r   Úunsupported_parforr2   &   s   € Ü�6‰6�!�Q‹<Ðr   c                 óŒ   — t        j                  | «      }t        | «      D ]   }||   t        j                  |«      z   ||<   Œ" |S r   ©r.   Úonesr   Úsin©Únr0   Úis      r   Úsupported_parforr:   )   s<   € Ü
�‰�‹
€AÜ�AŽYˆØ�‰t”b—f‘f˜Q“iÑˆˆ!Šð à€Hr   c                 ó    — t        j                  | «      }t        | «      D ]*  }||   t        j                  |«      z   ||<   |dz   dk  rŒ*J ‚ |S )Né   i † r4   r7   s      r   Úunsupported_pranger=   /   sN   € Ü
�‰�‹
€AÜ�AŽYˆØ�‰t”b—f‘f˜Q“iÑˆˆ!‰Ø�2‰v˜‹Ðˆð ð €Hr   c                   ó\   — e Zd Z eg d¢«      Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zy)ÚDebugTestBase)ÚbytecodeÚcfgÚirÚ	typeinferÚllvmÚfunc_opt_llvmÚoptimized_llvmÚassemblyc                 ó8   —  | j                   t        g|¢­i |¤Ž y r   )ÚassertRaisesÚAssertionError)r%   ÚargsÚkwargss      r   Úassert_failszDebugTestBase.assert_fails<   s   € Øˆ×Ñœ.Ð:¨4Ò:°6Ó:r   c                 ó  — t         j                  | j                  d«      }|D ]  }||v sJ ‚d||<   Œ t        |j	                  «       «      D ]1  \  }}t        | d|z  «      }|r	 ||«       Œ | j                  ||«       Œ3 y )NFTz_check_dump_%s)ÚdictÚfromkeysÚ	all_dumpsÚsortedÚitemsÚgetattrrM   )r%   ÚoutÚ
dump_namesÚenabled_dumpsÚnameÚenabledÚ
check_meths          r   Úcheck_debug_outputz DebugTestBase.check_debug_output?   s‚   € ÜŸ™ d§n¡n°eÓ<ˆÛˆDØ˜=Ñ(Ð(Ð(Ø"&ˆM˜$Òð ô $ M×$7Ñ$7Ó$9Ö:‰MˆD�'Ü  Ð'7¸$Ñ'>Ó?ˆJÙÙ˜3•à×!Ñ! *¨cÕ2ñ ;r   c                 óÈ   — t         j                  dv r| j                  d|«       y t         j                  dv r| j                  d|«       y t        t         j                  «      ‚)N))é   é   )r]   é   )r]   r<   )r]   é   Ú	BINARY_OP))r]   é
   Ú
BINARY_ADD)r   Ú	PYVERSIONÚassertInÚNotImplementedError©r%   rU   s     r   Ú_check_dump_bytecodez"DebugTestBase._check_dump_bytecodeK   sF   € Ü�?‰?ÐBÑBØ�M‰M˜+ sÕ+Ü�_‰_ 
Ñ*Ø�M‰M˜,¨Õ,ä%¤e§o¡oÓ6Ð6r   c                 ó(   — | j                  d|«       y )NzCFG dominators©re   rg   s     r   Ú_check_dump_cfgzDebugTestBase._check_dump_cfgS   s   € Ø�‰Ð&¨Õ,r   c                 óB   — | j                  d| j                  z  |«       y )Nz--IR DUMP: %s--©re   Ú	func_namerg   s     r   Ú_check_dump_irzDebugTestBase._check_dump_irV   s   € Ø�‰Ð'¨$¯.©.Ñ8¸#Õ>r   c                 ó(   — | j                  d|«       y )Nz--propagate--rj   rg   s     r   Ú_check_dump_typeinferz#DebugTestBase._check_dump_typeinferY   s   € Ø�‰�o sÕ+r   c                 ó¸   — | j                  d|«       t        j                  j                  d   j                  j
                  dk(  r| j                  |d|«       y y )Nz--LLVM DUMPÚauto_parallelFz#store i64 %\"\.\d", i64\* %"retptr")re   r   ÚFlagsÚoptionsÚdefaultrY   ÚassertRegexrg   s     r   Ú_check_dump_llvmzDebugTestBase._check_dump_llvm\   sL   € Ø�‰�m SÔ)Ü�>‰>×!Ñ! /Ñ2×:Ñ:×BÑBÀeÒKØ×Ñ˜SÐ"HÈ#ÕNð Lr   c                 óf   — | j                  d| j                  z  |«       | j                  d|«       y )Nz--FUNCTION OPTIMIZED DUMP %súadd nsw i64 %arg.somearg, 1rm   rg   s     r   Ú_check_dump_func_opt_llvmz'DebugTestBase._check_dump_func_opt_llvma   s)   € Ø�‰Ð4°t·~±~ÑEÀsÔKà�‰Ð3°SÕ9r   c                 óf   — | j                  d| j                  z  |«       | j                  d|«       y )Nz--OPTIMIZED DUMP %srz   rm   rg   s     r   Ú_check_dump_optimized_llvmz(DebugTestBase._check_dump_optimized_llvmf   s)   € Ø�‰Ð+¨d¯n©nÑ<¸cÔBØ�‰Ð3°SÕ9r   c                 ó”   — | j                  d| j                  z  |«       t        j                  «       dv r| j                  d|«       y y )Nz--ASSEMBLY %s)Úx86_64ÚAMD64Úi386Úi686Úxorl)re   rn   ÚplatformÚmachinerg   s     r   Ú_check_dump_assemblyz"DebugTestBase._check_dump_assemblyj   s?   € Ø�‰�o¨¯©Ñ6¸Ô<Ü×ÑÓÐ!DÑDØ�M‰M˜& #Õ&ð Er   N)r'   r(   r)   ÚsetrQ   rM   r[   rh   rk   ro   rq   rx   r{   r}   r†   r   r   r   r?   r?   7   sF   „ áò Dó E€Iò;ò
3ò7ò-ò?ò,òOò
:ò
:ó'r   r?   c                   ó   — e Zd ZdZd„ Zy)ÚFunctionDebugTestBaser   c                 óö   — t        «       5 } t        t        j                  f«      t        «      }| j                   |d«      d«       d d d «       |j                  «       S # 1 sw Y   j                  «       S xY w)Né   r]   )r   r   r   Úint64r   ÚassertPreciseEqualÚgetvalue©r%   rU   Úcfuncs      r   Úcompile_simple_nopythonz-FunctionDebugTestBase.compile_simple_nopythont   s\   € ÜÔ #Ø(”Dœ%Ÿ+™+˜Ó(¬Ó9ˆEà×#Ñ#¡E¨!£H¨aÔ0÷ ð �|‰|‹~Ð÷	 ð �|‰|‹~Ðús   ‹=A Á A8N)r'   r(   r)   rn   r‘   r   r   r   r‰   r‰   p   s   „ à!€Iór   r‰   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestFunctionDebugOutputc                 óŒ   — t        dd«      5  | j                  «       }d d d «       | j                  dg«       y # 1 sw Y   ŒxY w)NÚDUMP_BYTECODETr@   ©r   r‘   r[   rg   s     r   Útest_dump_bytecodez*TestFunctionDebugOutput.test_dump_bytecode~   ó:   € Ü˜_¨dÕ3Ø×.Ñ.Ó0ˆC÷ 4à×Ñ  j \Õ2÷ 4Ð3úó	   �:ºAc                 óŒ   — t        dd«      5  | j                  «       }d d d «       | j                  dg«       y # 1 sw Y   ŒxY w)NÚDUMP_IRTrB   r–   rg   s     r   Útest_dump_irz$TestFunctionDebugOutput.test_dump_irƒ   s:   € Ü˜Y¨Õ-Ø×.Ñ.Ó0ˆC÷ .à×Ñ  d VÕ,÷ .Ð-úr™   c                 óŒ   — t        dd«      5  | j                  «       }d d d «       | j                  dg«       y # 1 sw Y   ŒxY w)NÚDUMP_CFGTrA   r–   rg   s     r   Útest_dump_cfgz%TestFunctionDebugOutput.test_dump_cfgˆ   s:   € Ü˜Z¨Õ.Ø×.Ñ.Ó0ˆC÷ /à×Ñ  e WÕ-÷ /Ð.úr™   c                 óŒ   — t        dd«      5  | j                  «       }d d d «       | j                  dg«       y # 1 sw Y   ŒxY w)NÚ	DUMP_LLVMTrD   r–   rg   s     r   Útest_dump_llvmz&TestFunctionDebugOutput.test_dump_llvm�   s:   € Ü˜[¨$Õ/Ø×.Ñ.Ó0ˆC÷ 0à×Ñ  f XÕ.÷ 0Ð/úr™   c                 óŒ   — t        dd«      5  | j                  «       }d d d «       | j                  dg«       y # 1 sw Y   ŒxY w)NÚDUMP_FUNC_OPTTrE   r–   rg   s     r   Útest_dump_func_opt_llvmz/TestFunctionDebugOutput.test_dump_func_opt_llvm’   s;   € Ü˜_¨dÕ3Ø×.Ñ.Ó0ˆC÷ 4à×Ñ  oÐ%6Õ7÷ 4Ð3úr™   c                 óŒ   — t        dd«      5  | j                  «       }d d d «       | j                  dg«       y # 1 sw Y   ŒxY w)NÚDUMP_OPTIMIZEDTrF   r–   rg   s     r   Útest_dump_optimized_llvmz0TestFunctionDebugOutput.test_dump_optimized_llvm—   s=   € ÜÐ-¨tÕ4Ø×.Ñ.Ó0ˆC÷ 5à×Ñ Ð&6Ð%7Õ8÷ 5Ð4úr™   c                 óŒ   — t        dd«      5  | j                  «       }d d d «       | j                  dg«       y # 1 sw Y   ŒxY w)NÚDUMP_ASSEMBLYTrG   r–   rg   s     r   Útest_dump_assemblyz*TestFunctionDebugOutput.test_dump_assemblyœ   r˜   r™   N)
r'   r(   r)   r—   rœ   rŸ   r¢   r¥   r¨   r«   r   r   r   r“   r“   |   s%   „ ò3ò
-ò
.ò
/ò
8ò
9ó
3r   r“   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚTestGeneratorDebugOutputr   c           	      ó,  — t        «       5 } t        t        j                  t        j                  f«      t        «      }| j                  t         |dd«      «      ddg«       d d d «       |j                  «       S # 1 sw Y   j                  «       S xY w)Nr‹   r"   )r   r   r   rŒ   r   r�   ÚlistrŽ   r�   s      r   Úcompile_simple_genz+TestGeneratorDebugOutput.compile_simple_gen¦   sn   € ÜÔ #Ø4”Dœ%Ÿ+™+¤u§{¡{Ð3Ó4´ZÓ@ˆEà×#Ñ#¤D©¨q°!«Ó$5¸¸1°vÔ>÷ ð �|‰|‹~Ð÷	 ð �|‰|‹~Ðús   ‹AA;Á;Bc                 ó  — t        dd«      5  | j                  «       }d d d «       | j                  dg«       | j                  d| j                  z  |«       t        j                  d«      }| j                  ||«       y # 1 sw Y   ŒcxY w)Nr›   TrB   z--GENERATOR INFO: %szÜ
            generator state variables: ['x', 'y']
            yield point #1: live variables = ['y'], weak live variables = ['x']
            yield point #2: live variables = [], weak live variables = ['y']
            )r   r°   r[   re   rn   ÚtextwrapÚdedent)r%   rU   Úexpected_gen_infos      r   Útest_dump_ir_generatorz/TestGeneratorDebugOutput.test_dump_ir_generator­   sw   € Ü˜Y¨Õ-Ø×)Ñ)Ó+ˆC÷ .à×Ñ  d VÔ,Ø�‰Ð,¨t¯~©~Ñ=¸sÔCÜ$ŸO™Oð -ó Ðð
 	�‰Ð'¨Õ-÷ .Ð-ús   �B Â B	N)r'   r(   r)   rn   r°   rµ   r   r   r   r­   r­   ¢   s   „ à€Iòó
.r   r­   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚTestDisableJITz:
    Test the NUMBA_DISABLE_JIT environment variable.
    c                 óà   — t        dd«      5  t        «       5   t        d¬«      t        «      }| j	                   |d«      d«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NÚDISABLE_JITT©Únopythonr‹   r]   )r   r   r
   r   r�   )r%   r�   s     r   Útest_jitzTestDisableJIT.test_jit¿   sT   € Ü˜]¨DÕ1ÜÕ!Ø*œ TÔ*¬?Ó;�Ø×'Ñ'©¨a«°!Ô4÷ "÷ 2Ð1ß!Ð!ú÷ 2Ð1ús"   �A$˜/AÁA$ÁA!	ÁA$Á$A-c                 óX  — t        dd«      5  t        «       5   t        t        «      t        «      } |«       }| j                  |j                  d«        t        d¬«      t        «      }| j                   ||«      d«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr¹   Tr"   rº   )	r   r   r   Úsimple_class_specr    r�   r$   r
   r,   )r%   ÚSimpleJITClassr+   r�   s       r   Útest_jitclasszTestDisableJIT.test_jitclassÅ   sƒ   € Ü˜]¨DÕ1ÜÕ!Ø!<¤Ô*;Ó!<¼[Ó!I�á$Ó&�Ø×'Ñ'¨¯©¨qÔ1à*œ TÔ*Ô+<Ó=�Ø×'Ñ'©¨c«
°AÔ6÷ "÷ 2Ð1ß!Ð!ú÷ 2Ð1ús#   �B ˜A+BÂB ÂB	ÂB Â B)N)r'   r(   r)   Ú__doc__r¼   rÀ   r   r   r   r·   r·   º   s   „ ñò5ó	7r   r·   c                   ó   — e Zd ZdZdZd„ Zy)ÚTestEnvironmentOverridezN
    Test that environment variables are reloaded by Numba when modified.
    Fc                 ó  — | j                  «       }| j                  |«       t        dd«      5  | j                  «       }| j                  |g d¢«       d d d «       | j                  «       }| j                  |«       y # 1 sw Y   Œ+xY w)NÚNUMBA_DEBUGÚ1)rB   rC   rD   rE   rF   rG   )r‘   ÚassertFalser   r[   rg   s     r   Ú
test_debugz"TestEnvironmentOverride.test_debugÙ   s{   € Ø×*Ñ*Ó,ˆØ×Ñ˜ÔÜ  °Õ4Ø×.Ñ.Ó0ˆCð ×#Ñ# Cò *Hô I÷	 5ð ×*Ñ*Ó,ˆØ×Ñ˜Õ÷ 5Ð4ús   ®%A=Á=BN)r'   r(   r)   rÁ   Ú_numba_parallel_test_rÈ   r   r   r   rÃ   rÃ   Ñ   s   „ ñð
 "Ðór   rÃ   c                   ód   — e Zd ZdZdZd„ Zd„ Zeed„ «       «       Z	eed„ «       «       Z
ed„ «       Zy)	ÚTestParforsDebugz5
    Tests debug options associated with parfors
    Fc                 ót   — d}d}|D ]  }|t        |j                  «      v sŒd} n | j                  |d«       y )NzX'parallel=True' was specified but no transformation for parallel execution was possible.FTú Warning message should be found.©ÚstrÚmessageÚ
assertTrue©r%   Ú	warn_listÚmsgÚwarning_foundÚws        r   Úcheck_parfors_warningz&TestParforsDebug.check_parfors_warningî   sA   € ð2ˆàˆÛˆAØ”c˜!Ÿ)™)“nÒ$Ø $�Ùð ð 	�‰˜Ð'IÕJr   c                 ót   — d}d}|D ]  }|t        |j                  «      v sŒd} n | j                  |d«       y )NzŽprange or pndindex loop will not be executed in parallel due to there being more than one entry to or exit from the loop (e.g., an assertion).FTrÍ   rÎ   rÒ   s        r   Ú(check_parfors_unsupported_prange_warningz9TestParforsDebug.check_parfors_unsupported_prange_warningø   sC   € ð,ˆð ˆÛˆAØ”c˜!Ÿ)™)“nÒ$Ø $�Ùð ð 	�‰˜Ð'IÕJr   c                 ó,  — t        j                  t         j                  dd«      }t        j                  d¬«      5 }t        j
                  dt        «        t        ||fd¬«      t        «       ddd«       | j                  «       y# 1 sw Y   ŒxY w)zr
        Test that using parallel=True on a function that does not have parallel
        semantics warns.
        r‹   ÚCT©ÚrecordÚalways©ÚparallelN)
r   ÚArrayÚfloat64ÚwarningsÚcatch_warningsÚsimplefilterr   r   r2   r×   )r%   Úarr_tyrÖ   s      r   Ú
test_warnszTestParforsDebug.test_warns  sp   € ô —‘œUŸ]™]¨A¨sÓ3ˆÜ×$Ñ$¨DÕ1°QÜ×!Ñ! (Ô,CÔDØ1ŒD�&˜&Ð!¨DÔ1Ô2DÔE÷ 2ð 	×"Ñ" 1Õ%÷ 2Ð1ús   ¼4B
Â
Bc                 óü   — t        j                  d¬«      5 }t        j                  dt        «        t	        t
        j                  fd¬«      t        «       ddd«       | j                  «       y# 1 sw Y   ŒxY w)zG
        Test that prange with multiple exits issues a warning
        TrÜ   rÞ   rß   N)	rã   rä   rå   r   r   r   rŒ   r=   rÙ   )r%   rÖ   s     r   Útest_unsupported_prange_warnsz.TestParforsDebug.test_unsupported_prange_warns  s[   € ô ×$Ñ$¨DÕ1°QÜ×!Ñ! (Ô,CÔDØ/ŒD”%—+‘+�¨$Ô/Ô0BÔC÷ 2ð 	×5Ñ5°aÕ8÷ 2Ð1ús   —AA2Á2A;c                 ó  —  t        t        j                  fd¬«      t        «       t	        dd«      5  t        «       5 } t        t        j                  fd¬«      t        «       ddd«       j                  «       j                  d«      }|D �cg c]	  }d|v sŒ|‘Œ c}}|D �cg c]	  }d|v sŒ|‘Œ c}}|D �cg c]	  }d	|v sŒ|‘Œ c}}t        t        j                  d
«      j                  |d   «      j                  d«      «      }t        ||t        |«      z   «      }d}	d}
t        |||	«      D ]*  \  }}}|
j!                  ||«      }| j#                  ||«       Œ, |dz   |dz   f}	d}
|D ]#  } |
j                   |	Ž }| j#                  ||«       Œ% t        j$                  dt'        |g«      f}	d}
|D ]#  } |
j                   |	Ž }| j#                  ||«       Œ% 	 ddd«       y# 1 sw Y   �Œ‚xY wc c}w c c}w c c}w # 1 sw Y   yxY w)zM
        Test that NUMBA_DEBUG_ARRAY_OPT_STATS produces valid output
        Trß   ÚNUMBA_DEBUG_ARRAY_OPT_STATSrÆ   NÚ
zis produced from patternzis fused intozAfter fusion, functionz	#([0-9]+)r   r   )z"('ones function', 'NumPy mapping'))r   ÚuserÚ z6Parallel for-loop #{} is produced from pattern '{}' atz1Parallel for-loop #{} is fused into for-loop #{}.z:After fusion, function {} has {} parallel for-loop(s) #{}.)r   r   rŒ   r:   r   r   rŽ   ÚsplitÚintÚreÚcompileÚsearchÚgroupÚrangeÚlenÚzipÚformatre   r'   r‡   )r%   rU   Úoutputr   Úparallel_loop_outputÚfuse_outputÚafter_fusion_outputÚparfor_stateÚboundsÚpatternÚfmtr9   ÚtrialsÚlpatternÚto_matchs                  r   Útest_array_debug_opt_statsz+TestParforsDebug.test_array_debug_opt_stats  s  € ð 	,ŒŒe�k‰kˆ^ dÔ+Ô,<Ô=ä Ð!>ÀÕDÜ Ô" cØ3””e—k‘k�^¨dÔ3Ô4DÔE÷ #ð —\‘\“^×)Ñ)¨$Ó/ˆFá"ÓF™F�qÐ&@ÀAÒ&E’˜FÑFð !ñ #Ó;™F�q o¸Ò&:’˜FÑ;ð ñ #ÓD™F�qÐ&>À!Ò&C’˜FÑDð  ô
 œrŸz™z¨,Ó7×>Ñ>Ø$ QÑ'ó )ß).©¨q«ó3ˆLä˜<Ø'¬#Ð.BÓ*CÑCóEˆFð
/ˆGàLˆCÜ'*¨6Ð3GØ+2ö(4Ñ#��6˜8àŸ:™: a¨Ó2�Ø—‘˜h¨Õ/ð(4ð $ aÑ'¨¸Ñ)9Ð:ˆGØEˆCÛ%�Ø%˜3Ÿ:™: wÐ/�Ø—‘˜h¨Õ/ð &ô
 (×0Ñ0°!´S¸,¸Ó5HÐIˆGØNˆCÛ-�Ø%˜3Ÿ:™: wÐ/�Ø—‘˜h¨Õ/ñ .÷Q EÐDß"Ñ"üò Gùâ;ùâD÷ EÐDúsY   ³H¾'G%Á%+HÂ	G2ÂG2ÂHÂ%	G7Â/G7Â3HÂ:	G<ÃG<ÃDHÇ%G/	Ç*HÈH
N)r'   r(   r)   rÁ   rÉ   r×   rÙ   r	   r   rç   ré   r  r   r   r   rË   rË   æ   sg   „ ñð
 "ÐòKò	Kð Øñ	&ó ó ð	&ð Øñ9ó ó ð9ð ñ40ó ñ40r   rË   Ú__main__)/Úosr„   rñ   r²   rã   Únumpyr.   Únumba.tests.supportr   r   r   r   r   r   r	   Únumbar
   r   Ú
numba.corer   r   r   Únumba.core.errorsr   r   Únumba.experimentalr   Úunittestr   r   Úobjectr    Úint32r¾   r,   r2   r:   r=   r?   r‰   r“   r­   r·   rÃ   rË   r'   Úmainr   r   r   Ú<module>r     sð   ðÛ 	Û Û 	Û Û ã ÷"÷ "ñ "÷ ß -Ñ -Ý 5Ý Ý 'Û òòô
�&ô ð ˜5Ÿ;™;Ð'Ð(Ð òòòòô6'�Hô 6'ôr	˜Mô 	ô#3Ð3ô #3ôL.˜}ô .ô07�]ô 7ô.Ð3ô ô*j0�xô j0ðZ ˆzÒØ€H‡M�M…Oð r   