Ë
    0²j 4  ã                   óv  — 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 d dlmZ d dlmZ ej                   j#                  ej                   j%                  e«      «      Zej                   j)                  ed«      gZej                   j)                  ed	«      Zd
gZdadadadada e j:                  «       d„ «       Z e j:                  «       d„ «       Z G d„ de «      Z!d„ Z"d„ Z#d„ Z$d„ Z% e&d„  e'd«      D «       «      Z(de(d<   de(d<   de(d<   dZ)d„ Z*d„ Z+ G d„ de «      Z, G d„ de«      Z-y)é    N)ÚPath)Úknobs)Úcompile_module_from_src)Ú_allocation)Ú	GPUTarget)Ú	GPUDriverÚincludeÚlibúlibcuda.so.1c            	      óÔ  — t         j                  j                  x} r| gS t        j                  ddg«      j                  d¬«      }|j                  «       D �cg c]  }d|v sŒ|j                  «       d   ‘Œ }}|D �cg c]!  }t        j                  j                  |«      ‘Œ# }}t        j                  d«      }|r^|s\|j                  d«      D �cg c]B  }t        j                  j                  t        j                  j                  |d«      «      sŒA|‘ŒD }}d	}|r|d
t        |«      z  z  }|dz  }n
|dz  }|dz  }t        d„ |D «       «      sJ |«       ‚|S c c}w c c}w c c}w )Nz/sbin/ldconfigz-pÚignore)Úerrorsr   éÿÿÿÿÚLD_LIBRARY_PATHú:zlibcuda.so cannot found!
z!Possible files are located at %s.z:Please create a symlink of libcuda.so to any of the files.z<Please make sure GPU is set up and then run "/sbin/ldconfig"z- (requires sudo) to refresh the linker cache.c              3   ó–   K  — | ]A  }t         j                  j                  t         j                  j                  |d «      «      –— ŒC y­w)r   N)ÚosÚpathÚexistsÚjoin)Ú.0r   s     ú\/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/triton/backends/nvidia/driver.pyú	<genexpr>zlibcuda_dirs.<locals>.<genexpr>,   s,   è ø€ ÒSÀdŒr�w‰w�~‰~œbŸg™gŸl™l¨4°Ó@×AÑSùs   ‚AA	)r   ÚnvidiaÚlibcuda_pathÚ
subprocessÚcheck_outputÚdecodeÚ
splitlinesÚsplitr   r   ÚdirnameÚgetenvr   r   ÚstrÚany)	Úenv_libcuda_pathÚlibsÚlineÚlocsÚlocÚdirsÚenv_ld_library_pathÚdirÚmsgs	            r   Úlibcuda_dirsr.      sW  € ä Ÿ<™<×4Ñ4Ð4ÐÐ4Ø Ð!Ð!ä×"Ñ"Ð$4°dÐ#;Ó<×CÑCÈ8ÐCÓT€Dð *.¯©Ó):ÖU ¸nÐPTÒ>TˆD�J‰J‹L˜ÓÐU€DÐUØ,0Ö1 SŒB�G‰G�O‰O˜CÕ Ð1€DÐ1ÜŸ)™)Ð$5Ó6ÐÙ¡4Ø2×8Ñ8¸Ó=Ös˜ÄÇÁÇÁÔPR×PWÑPW×P\ÑP\Ð]`ÐbpÓPqÕAr’ÐsˆÐsØ
&€CÙØÐ2´S¸³YÑ>Ñ>ˆØÐKÑK‰àÐMÑMˆØÐ>Ñ>ˆÜÑSÈdÔSÔSÐXÐUXÓXÐSØ€Kùò VùÚ1ùò ts   Á	EÁ#EÁ>&E ÃAE%ÄE%c                  ó$   — t         gt        «       ¢S ©N)Úlibdevice_dirr.   © ó    r   Úlibrary_dirsr4   0   s   € äÐ+œL›NÐ+Ð+r3   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú	CudaUtilsc                 ód   •— t        | d«      st        t        | �  | «      | _        | j                  S )NÚinstance)ÚhasattrÚsuperr6   Ú__new__r8   )ÚclsÚ	__class__s    €r   r;   zCudaUtils.__new__<   s*   ø€ Ü�s˜JÔ'Ü ¤¨CÑ8¸Ó=ˆCŒLØ�|‰|Ðr3   c                 ó>  — t        t        t        j                  j	                  t
        d«      «      j                  «       dt        «       t        t        ¬«      }|j                  a
|j                  a|j                  a|j                  a|j                  a|j                  | _        |j                   | _        |j"                  | _        |j$                  | _        |j&                  | _        |j(                  | _        |j*                  | _        |j,                  | _        y )Nzdriver.cÚ
cuda_utils)ÚsrcÚnamer4   Úinclude_dirsÚ	libraries)r   r   r   r   r   r!   Ú	read_textr4   rB   rC   ÚPyCUtensorMapÚPyKernelArgÚARG_CONSTEXPRÚ
ARG_KERNELÚ	ARG_TUPLEÚload_binaryÚget_device_propertiesÚcuOccupancyMaxActiveClustersÚset_printf_fifo_sizeÚfill_tma_descriptor_tiledÚfill_tma_descriptor_im2colÚlaunchÚbuild_signature_metadata)ÚselfÚmods     r   Ú__init__zCudaUtils.__init__A   sØ   € Ü%Ü”R—W‘W—\‘\¤'¨:Ó6Ó7×AÑAÓCØÜ%›Ü%Üô
ˆð ×)Ñ)ˆØ—o‘oˆØ×)Ñ)ˆØ—^‘^ˆ
Ø—M‘Mˆ	ØŸ?™?ˆÔØ%(×%>Ñ%>ˆÔ"Ø,/×,LÑ,LˆÔ)Ø$'×$<Ñ$<ˆÔ!Ø),×)FÑ)FˆÔ&Ø*-×*HÑ*HˆÔ'Ø—j‘jˆŒØ(+×(DÑ(DˆÕ%r3   )Ú__name__Ú
__module__Ú__qualname__r;   rT   Ú__classcell__©r=   s   @r   r6   r6   :   s   ø„ ôö
Er3   r6   c                 ó¢   — | d   dk(  ry| j                  d«      ryi dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“|    S )Nr   Ú*ÚCUdeviceptrÚ
tensordescÚCUtensorMapÚi1Úint8_tÚi8Úi16Úint16_tÚi32Úint32_tÚi64Úint64_tÚu1Úuint8_tÚu8Úu16Úuint16_tÚu32Úuint32_tÚu64Úuint64_tÚfp16ÚdoubleÚbf16Úfp32Úf32Úfp64Ú	nvTmaDesc)Ú
startswith)Útys    r   Ú	ty_to_cpprz   b   sï   € Ø	ˆ!�u�‚|ØØ	‡}�}�\Ô"ØðØˆhðàˆhðð 	ˆyðð 	ˆyð	ð
 	ˆyðð 	ˆiðð 	ˆiðð 	ˆzðð 	ˆzðð 	ˆzðð 	�ðð 	�ðð 	�ðð 	ˆxðð 	�ðð  	�]ð!ð" 	ñ#
ð 
r3   c                 óÄ  — g }d}| D �]C  }t        |t        «      �r|j                  d«      �r|r||   nd }|dz  }t        j                  d|«      }|j                  d«      }|j                  d«      }|j                  d«      dz   }	|€[|j                  d|z   «       t        d|	z  «      D ]  }
|j                  d«       Œ |j                  d	«       |j                  d	«       n|j                  d
«       t        |	«      D ]  }
|j                  d«       Œ t        |	«      D ]  }
|j                  d«       Œ �Œ3|j                  |«       �ŒF |r|t        |«      k(  sJ ‚|S )Nr   r]   é   ztensordesc<([^[>]*)\[([^]]*)\]é   ú,r[   rf   r_   rw   rd   )
Ú
isinstancer#   rx   ÚreÚmatchÚgroupÚcountÚappendÚrangeÚlen)Ú	signatureÚtensordesc_metaÚoutputÚtensordesc_idxÚsigÚmetar�   ÚdtypeÚshapeÚndimÚ_s              r   Úexpand_signaturer‘   {   sN  € Ø€FØ€Nð ó ˆÜ�cœ3Õ C§N¡N°<Õ$@Ù6E�? >Ò2È4ˆDØ˜aÑˆNä—H‘HÐ?ÀÓEˆEØ—K‘K “NˆEØ—K‘K “NˆEØ—;‘;˜sÓ# aÑ'ˆDàˆ|Ø—‘˜c E™kÔ*ô ˜q 4™x›ò )�AØ—M‘M %Õ(ð)à—‘˜dÔ#Ø—‘˜dÕ#à—‘˜kÔ*ä˜4“[ò %�Ø—‘˜eÕ$ð%ä˜4“[ò %�Ø—‘˜eÕ$ò%ð �M‰M˜#Öð;ñ>  .´C¸Ó4HÒ"HÐHÐHØ€Mr3   c                 óà   ‡— ˆfd„Šg }| D ]  } ‰||«       Œ |D �cg c]
  }|dk7  sŒ	|‘Œ }}t         j                  j                  j                  j                  j                  |«      S c c}w )zj
    Creates a kernel signature in C to be able to efficiently extract
    arguments in the launcher.
    c                 ój   •— t        | t        «      r| D ]  } ‰||«       Œ y |j                  | «       y r0   )r   Útupler„   )r‹   r‰   ÚxÚ_flatten_signatures      €r   r–   z1make_kernel_signature.<locals>._flatten_signatureª   s4   ø€ ä�cœ5Ô!Øò .�Ù" 1 fÕ-ñ.ð �M‰M˜#Õr3   Ú	constexpr)ÚtritonÚruntimeÚdriverÚactiveÚutilsrQ   )r‡   Úflat_signaturer‹   r•   Úkernel_signaturer–   s        @r   Úmake_kernel_signaturerŸ   ¤   sq   ø€ ôð €NØò 0ˆÙ˜3 Õ/ð0à#1ÖF˜a°Q¸+Ó5EšÐFÐÐFä�>‰>× Ñ ×'Ñ'×-Ñ-×FÑFÐGWÓXÐXùò Gs
   �
A+¨A+c                 ó  — g }| D ]‚  }t        |t        «      r*|j                  t        t	        |«      t
        ¬«      «       Œ=|dk7  r!|j                  t        dt        ¬«      «       Œc|j                  t        dt        ¬«      «       Œ„ |S )z¤
    This recreates the signature with annotations as C objects which can then
    be used to efficiently flatten tuples, and remove constexpr in the launcher.
    )Únested_tupleÚtyper—   N)r   r”   r„   rF   Úannotate_argumentsrI   rH   rG   )r‡   Úannotated_argumentsr‹   s      r   r£   r£   º   s|   € ð
 ÐØò [ˆÜ�cœ5Ô!Ø×&Ñ&¬ÔASÐTWÓAXÔ_hÔ(iÕkØ�KÒØ×&Ñ&¤{ÀÌ:Ô'VÕWà×&Ñ&¤{ÀÌ=Ô'YÕZð[ð Ðr3   c              #   ó$   K  — | ]  }||f–— Œ
 y ­wr0   r2   )r   Úis     r   r   r   Ë   s   è ø€ Ò:¨1  A¤Ñ:ùs   ‚é   é
   é   é	   é   c           
      ó„  — |€X| j                   g| j                  ¢| j                  ¢| j                  dk(  ‘| j                  ‘| j                  ¢| j                  ¢S |d   }|d   }|d   }|d   }|d   }| j                  }| j                  }|d   dk(  sJ ‚| j                  dk(  rdnd	}	|rt        |«      }
|
dxx   d
z  cc<   n|}
| j                  rt        }t        j                  j                  j                  j                  j                  | j                   j                  «       ||t        |   ||
||	«      }|g|¢|¢S )NÚnanÚswizzleÚ	elem_sizeÚ	elem_typeÚ
block_sizeÚ
fp4_paddedr   r|   r   r}   )ÚbaserŽ   ÚstridesÚpaddingÚround_f32_to_tf32ÚlistÚTMA_TF32r˜   r™   rš   r›   rœ   rN   Údata_ptrÚTMA_DTYPE_DEVICE_TO_HOST)ÚargÚmetadatar®   r¯   r°   r±   r²   rŽ   r´   rµ   Úexpanded_shapeÚcu_tensor_maps               r   Úmake_tensordesc_argr¿   Ò   sr  € ØÐð �H‰Hð
à�Y‰Yð
ð �[‰[ð
ð �K‰K˜5Ñ ð	
ð
 ×!Ñ!ð
ð �Y‰Yð
ð �[‰[ð
ð 	
ð �yÑ!€GØ˜Ñ%€IØ˜Ñ%€IØ˜,Ñ'€JØ˜,Ñ'€Jà�I‰I€EØ�k‰k€GØ�2‰;˜!ÒÐÐØ—;‘; %Ò'‰a¨Q€GáÜ˜e›ˆØ�rÓ˜aÑÔàˆà
×ÒÜˆ	ä—N‘N×)Ñ)×0Ñ0×6Ñ6×PÑPØ�‰×ÑÓØØÜ  Ñ+ØØØØó	€Mð Ð,˜EÐ, GÐ,Ð,r3   c           
      óv  ‡ ‡‡— t        d„ |j                  «       D «       «      }|s‰ S t        t        |j                  «       «      D ��cg c]*  \  }}t	        |t
        «      sŒ|j                  d«      sŒ)|‘Œ, c}}«      Š‰rt        ‰«      t        ‰«      k(  sJ ‚‰sd gt        ‰«      z  Šˆ ˆˆfd„}|S c c}}w )Nc              3   ób   K  — | ]'  }t        |t        «      xr |j                  d «      –— Œ) y­w)r]   N)r   r#   rx   )r   r‹   s     r   r   z)wrap_handle_tensordesc.<locals>.<genexpr>  s)   è ø€ ÒrÐX[œj¨¬cÓ2ÒS°s·~±~ÀlÓ7SÓSÑrùs   ‚-/r]   c                  óÌ   •— | d d }| d   }g }d}t        |«      D ]>  \  }}|‰v r$|j                  t        |‰	|   «      «       |dz  }Œ.|j                  |«       Œ@  ‰g |¢|‘­Ž S )Nr   r   r|   )Ú	enumerateÚextendr¿   r„   )
ÚargsÚ	base_argsÚkernel_argsÚfinal_kernel_argsrŠ   r¦   r»   ÚlauncherÚtensordesc_indicesrˆ   s
          €€€r   Úinnerz%wrap_handle_tensordesc.<locals>.inner  s�   ø€ Ø˜˜"�Iˆ	Ø˜2‘hˆàÐØˆÜ Ó,ò 	.‰FˆAˆsØÐ&Ñ&Ø!×(Ñ(Ô)<¸SÀ/ÐR`ÑBaÓ)bÔcØ !Ñ#‘à!×(Ñ(¨Õ-ð	.ñ Ð6˜Ð6Ð$5Ò6Ð6r3   )r$   ÚvaluesÚsetrÃ   r   r#   rx   r†   )rÉ   r‡   rˆ   Úhas_tensor_desc_argr¦   r‹   rË   rÊ   s   ` `    @r   Úwrap_handle_tensordescrÏ     s¬   ú€ ÜÑrÐ_h×_oÑ_oÓ_qÔrÓrÐÙØˆäÜ" 9×#3Ñ#3Ó#5Ó6×p‰vˆq�#¼*ÀSÌ#Õ:NÐSV×SaÑSaÐbnÕSoŠÓpórÐá¤# oÓ"6¼#Ð>PÓ:QÒ"QÐQÐQÙØ˜&¤3Ð'9Ó#:Ñ:ˆö7ð €Lùó) 	qs   Á	B5
Á"B5
Á4B5
c                   ó   — e Zd Zd„ Zd„ Zy)ÚCudaLauncherc                 ó*  ‡— t        ‰d«      r‰j                  n	t        «       }ˆfd„}|j                  «       D ��ci c]  \  }} ||«      |“Œ }}}‰j                  j                  «       D ��ci c]  \  }}||“Œ
 }}}t        |dd «      }t        j                  j                  j                  j                  j                  }	t        |j                  «       |«      }
t        |
«      | _        t!        |
«      | _        t        |dd«      | _        t'        |	||«      | _        |j(                  | _        |j*                  | _        |j,                  | _        |j.                  | _        |j0                  | _        |j2                  | _        y c c}}w c c}}w )NÚ	constantsc                 ót   •— t        | t        «      r&‰j                  j                  j	                  | «      fS | S r0   )r   r#   ÚfnÚ	arg_namesÚindex)r•   r@   s    €r   ú<lambda>z'CudaLauncher.__init__.<locals>.<lambda>'  s-   ø€ ¼ZÈÌ3Ô=O˜SŸV™V×-Ñ-×3Ñ3°AÓ6Ð9€ ÐUV€ r3   rˆ   Únum_ctasr|   )r9   rÓ   ÚdictÚitemsr‡   Úgetattrr˜   r™   rš   r›   rœ   rP   r‘   rÌ   r£   Úarg_annotationsrŸ   rž   rÙ   rÏ   Úglobal_scratch_sizeÚglobal_scratch_alignÚprofile_scratch_sizeÚprofile_scratch_alignÚlaunch_cooperative_gridÚ
launch_pdl)rR   r@   r¼   rÓ   Úarg_idxÚidxÚvaluer‡   rˆ   rÉ   Úexpanded_signatures    `         r   rT   zCudaLauncher.__init__%  sK  ø€ Ü%,¨S°+Ô%>�C—M’MÄDÃFˆ	ÛVˆØ;D¿?¹?Ó;L×M©Z¨S°%‘W˜S“\ 5Ñ(ÐMˆ	ÑMØ25·-±-×2EÑ2EÓ2G×H¡J C¨�S˜%‘ZÐHˆ	ÑHÜ! (Ð,=¸tÓDˆä—>‘>×(Ñ(×/Ñ/×5Ñ5×<Ñ<ˆÜ-¨i×.>Ñ.>Ó.@À/ÓRÐÜ1Ð2DÓEˆÔÜ 5Ð6HÓ IˆÔÜ ¨*°aÓ8ˆŒÜ,¨X°yÀ/ÓRˆŒØ#+×#?Ñ#?ˆÔ Ø$,×$AÑ$AˆÔ!Ø$,×$AÑ$AˆÔ!Ø%-×%CÑ%CˆÔ"Ø'/×'GÑ'GˆÔ$Ø"×-Ñ-ˆ�ùó NùÛHs   ¼F	Á/Fc
                 ó`  ‡ ‡‡‡‡— ˆˆˆˆ ˆfd„} |‰ j                   ‰ j                  t        j                  «      } |‰ j                  ‰ j
                  t        j                  «      }‰ j                  ‰‰‰‰|‰ j                  ‰ j                  ||||	||‰ j                  ‰ j                  |
«       y )Nc                 óx   •— | dkD  r4‰‰z  ‰z  }|‰	j                   z  | z  }|j                  «       } |||‰
«      S y ©Nr   )rÙ   Úget)ÚsizeÚalignÚ	allocatorÚ	grid_sizeÚ
alloc_sizeÚalloc_fnÚgridXÚgridYÚgridZrR   Ústreams         €€€€€r   Úallocate_scratchz/CudaLauncher.__call__.<locals>.allocate_scratch<  sH   ø€ Ø�aŠxØ! E™M¨EÑ1�	Ø&¨¯©Ñ6¸Ñ=�
Ø$Ÿ=™=›?�Ù 
¨E°6Ó:Ð:Ør3   )rÞ   rß   r   Ú
_allocatorrà   rá   Ú_profile_allocatorrP   râ   rã   rÝ   rž   )rR   rò   ró   rô   rõ   ÚfunctionÚkernel_metadataÚlaunch_metadataÚlaunch_enter_hookÚlaunch_exit_hookrÅ   rö   Úglobal_scratchÚprofile_scratchs   `````         r   Ú__call__zCudaLauncher.__call__9  s¢   ü€ ÷	ð 	ñ *¨$×*BÑ*BÀD×D]ÑD]Ô_j×_uÑ_uÓvˆÙ*¨4×+DÑ+DÀd×F`ÑF`Ü+6×+IÑ+IóKˆð 	�‰�E˜5 %¨°¸4×;WÑ;WÐY]×YhÑYhØ# _Ð6GÐIYÐ[iØ# T×%9Ñ%9¸4×;PÑ;PÐRVõ	Xr3   N)rU   rV   rW   rT   r   r2   r3   r   rÑ   rÑ   #  s   „ ò.ó(Xr3   rÑ   c                   ób   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zed„ «       Zde	de	fd„Z
d	„ Zd
„ Zd„ Zˆ xZS )Ú
CudaDriverc                 óV   •— t        «       | _        t        | _        t        ‰| �  «        y r0   )r6   rœ   rÑ   Úlauncher_clsr:   rT   )rR   r=   s    €r   rT   zCudaDriver.__init__O  s   ø€ Ü“[ˆŒ
Ü(ˆÔÜ‰ÑÕr3   c                 ó~   — | j                  «       }| j                  |«      }|d   dz  |d   z   }d}t        d||«      S )Nr   r¨   r|   é    Úcuda)Úget_current_deviceÚget_device_capabilityr   )rR   ÚdeviceÚ
capabilityÚ	warp_sizes       r   Úget_current_targetzCudaDriver.get_current_targetT  sK   € Ø×(Ñ(Ó*ˆØ×/Ñ/°Ó7ˆ
Ø ‘] RÑ'¨*°Q©-Ñ7ˆ
Øˆ	Ü˜ ¨YÓ7Ð7r3   c                 óJ   — dd l }|j                  d| j                  «       «      S )Nr   r  )Útorchr
  r  ©rR   r  s     r   Úget_active_torch_devicez"CudaDriver.get_active_torch_device[  s   € ÛØ�|‰|˜F D×$;Ñ$;Ó$=Ó>Ð>r3   c                 ó"   — dd l }|j                  S rê   )r  r  r  s     r   Úget_device_interfacezCudaDriver.get_device_interface_  s   € ÛØ�z‰zÐr3   c                  ó’   — 	 dd l } | j                  j                  «       xr | j                  j                  d u S # t
        $ r Y yw xY w)Nr   F)r  r  Úis_availableÚversionÚhipÚImportError)r  s    r   Ú	is_activezCudaDriver.is_activec  sC   € ð	ÛØ—:‘:×*Ñ*Ó,ÒL°%·-±-×2CÑ2CÀtÐ2KÐLøÜò 	Ùð	ús   ‚7: º	AÁAry   Úreturnc                 ó   — t        |«      S r0   )rz   )rR   ry   s     r   Úmap_python_to_cpp_typez!CudaDriver.map_python_to_cpp_typek  s   € Ü˜‹}Ðr3   c                 ó   — ddl m} |S )Nr   )Údo_bench)Útriton.testingr  )rR   r  s     r   Úget_benchmarkerzCudaDriver.get_benchmarkern  s
   € Ý+Øˆr3   c                 ób   — dd l }d}|j                  t        |dz  «      |j                  d¬«      S )Nr   i   é   r  )r�   r
  )r  ÚemptyÚint)rR   r  Ú
cache_sizes      r   Úget_empty_cache_for_benchmarkz(CudaDriver.get_empty_cache_for_benchmarkr  s.   € Ûð
 'ˆ
Ø�{‰{œ3˜z¨Q™Ó/°u·y±yÈˆ{ÓPÐPr3   c                 ó$   — |j                  «        y r0   )Úzero_)rR   Úcaches     r   Úclear_cachezCudaDriver.clear_cache{  s   € Ø�‰�r3   )rU   rV   rW   rT   r  r  r  Ústaticmethodr  r#   r  r   r&  r*  rX   rY   s   @r   r  r  M  sN   ø„ ôò
8ò?òð ñó ðð¨ð °ó òòQör3   r  ).Ú	functoolsr   r   r˜   r€   Úpathlibr   r   Útriton.runtime.buildr   Útriton.runtimer   Útriton.backends.compilerr   Útriton.backends.driverr   r   r!   ÚrealpathÚ__file__r   rB   r1   rC   rE   rF   rG   rH   rI   Ú	lru_cacher.   r4   Úobjectr6   rz   r‘   rŸ   r£   rÚ   r…   rº   r¸   r¿   rÏ   rÑ   r  r2   r3   r   ú<module>r6     sY  ðÛ Û 	Û Û Û 	Ý Ý Ý 8Ý &Ý .Ý ,à
�'‰'�/‰/˜"Ÿ'™'×*Ñ*¨8Ó4Ó
5€Ø—‘—‘˜W iÓ0Ð1€Ø—‘—‘˜W eÓ,€ØÐ€	Ø€Ø€Ø€Ø€
Ø€	ð €×ÑÓñó ðð. €×ÑÓñ,ó ð,ô E�ô  EòP
ò2&òRYò,ñ"  Ñ:±°b³	Ô:Ó:Ð Ø Ð ˜Ñ ØÐ ˜Ñ Ø Ð ˜Ñ Ø€ò1-òhô:'X�6ô 'XôT/�õ /r3   