+
    "Ý³j\i  ã                   ó¾  € ^ RI HtHtHt ^ RIt^ RItRt^t^t^t	^€t
RRRRRR	R
RRRR/RRRRRRRR	R?RRRR/RRRRRRRR	RRRRR/RRRRRRRR	RRRRR/RRRRRR	RRRRR/RRRRR RR!R	R"//tR@R# R$ lltR@R% R& lltRAtRBR' R( lltR@R) R* lltR+ R, ltR@R- R. lltR@R/ R0 lltRCR1 R2 lltR]
3R3 R4 lltR@R5 R6 lltRBR7 R8 lltR@R9 R: lltR@R; R< lltR@R= R> lltR# )Dé    )ÚListÚOptionalÚUnionNg      à?zNVIDIA H100Úbf16_peak_topsg €vìCÚfp8_peak_topsg À
`�CÚpeak_mem_bw_bytes_secg   .Yv�BÚpct_achievable_gemm_topsgö(\�Âõè?Úpct_achievable_mem_bwgq=
×£pí?zNVIDIA B200g €úÊsùCg €úÊsù/CÚfp4_peak_topsg €úÊsù?CzNVIDIA B300 SXM6 ACg €m�vÞHCg   ¢”�Bg=
×£p=ê?gáz®Gáê?zNVIDIA GB200zAMD Instinct MI300Xg ÀâšÖ’Cg ÀâšÖ’"Cg   xH“BzNVIDIA GeForce RTX 5090g  “¢@ÑçBg  “¢@Ñ÷Bg  “¢@ÑCg  ÀBwCc                ó:   € V ^8„  d   QhR\         \        ,          /# ©é   Úgpu_name©r   Ústr)Úformats   "Úh/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/testing/training/roofline_utils.pyÚ__annotate__r   f   s   € ÷ 
ñ 
¤H¬S¥Mñ 
ó    c           	      ó
  € V f    \         P                  P                  ^ 4      p V \        9   d   V # \         F  pV P	                  V4      '       g   K  Vu # 	  \        RV  R\        \        P                  4       4       24      h)NzUnrecognized GPU 'z'. Known GPUs: )ÚtorchÚcudaÚget_device_nameÚgpu_name_to_specsÚ
startswithÚ
ValueErrorÚlistÚkeys)r   Úknown_gpu_names   & r   Úget_roofline_gpu_namer    f   sz   € ØÒÜ—:‘:×-Ñ-¨aÓ0ˆØÔ$Ô$Øˆß+ˆØ×Ñ˜~×.Ô.Ø!Ò!ñ ,ô Ø
˜X˜J o´dÔ;L×;QÑ;QÓ;SÓ6TÐ5UÐVóð r   c                ó:   € V ^8„  d   QhR\         \        ,          /# r   r   )r   s   "r   r   r   s   s   € ÷ 'ñ 'œ¤�ñ 'r   c                 ó2   € \        V 4      p \        V ,          # ©N)r    r   )r   s   &r   Ú	get_specsr$   s   s   € Ü$ XÓ.€HÜ˜XÕ&Ð&r   c                óÀ   € V ^8„  d   QhR\         R\        \         ,          R\        \         ,          R\        \        \        P
                  \        3,          ,          /# )r   Útensor_roleÚfloat8_recipe_nameÚmx_recipe_nameÚreturn©r   r   r   r   ÚsympyÚSymbolÚfloat)r   s   "r   r   r   ~   sU   € ÷ vñ vô ð	vô
 !¤�ðvô œS•Mðvô 
Œ%”—‘œeÐ#Õ
$Õ%ñvr   c                óì  € W,          pRpVR8X  d�   VR8X  dA   V'       d   ^ p	M\         V,          p	\         V,          \        V,          ,           p
T
pV	^ W«.pEM»V'       d   ^ p	M\         V,          p	\         V,          ^\        ,          V,          ,           p
V	^ V
.pEMvVR8X  Ed   VR8X  dv   V'       d   ^ \        V,          ,           p	M\         V,          \        V,          ,           p	\         V,          ^,          p\         V,          \        V,          ,           p
WœV
.pEMòV'       d(   ^ \        V,          ,           \         V,          ,           p	M1\         V,          \        V,          ,           \         V,          ,           p	\         V,          \        V,          ,           pWœ.pEMnVR8X  d�   VR9   dB   V'       d   ^ \        V,          ,           p	M\         V,          \        V,          ,           p	V	.pEMVR8X  dG   \         V,          \        V,          ,           p	^ p\         V,          \        V,          ,           p
WœV
.pEMÒQ R4       hVR8X  dB   V'       d   ^ \        V,          ,           p	M\         V,          \        V,          ,           p	V	.pEMƒVR8X  dª   VR9   d]   V'       d   ^ \        V,          ,           p	M\         V,          \        V,          ,           p	\         V,          \        V,          ,           pMBVR8X  d5   \         V,          \        V,          ,           p	\        V,          ^,          pMQ R4       hWœ.pMÓVR9   g   Q R
V: 24       hVR	8X  d]   V'       d   ^ \        V,          ,           p	M\         V,          \        V,          ,           p	\         V,          \        V,          ,           pM[V'       d   ^ \        V,          ,           p	M\         V,          \        V,          ,           p	\         V,          \        V,          ,           pWœ.pV Uu. uF   pWÐR,          ,          V R,          ,          NK"  	  ppV Uu. uF  p\        P                  ! V\
        4      NK   	  ppV# u upi u upi )a  
Calculates the roofline estimate of casting one of the gemm inputs
(input, weight or grad_output) to float8 in fwd+bwd.

Inputs: dim0 and dim1 (shape), tensor_role (input|weight|grad_output), recipe names
Outputs: list of read/write traffic overhead in seconds, one for each kernel
NÚ
tensorwiseÚweightÚrowwiseÚrowwise_with_gw_hpÚunsupportedÚ mxfp8_32x32_flexible_gemm_layoutÚmxfp8_32x32_weightÚmxfp4_cutlasszunsupported mx_recipe_name=r   r
   )ÚinputÚgrad_output)Úmxfp8_emulatedÚmxfp8_cublasÚmxfp8_cublas_rceilr6   )ÚBYTES_PER_EL_BF16ÚBYTES_PER_EL_FLOAT8ÚBYTES_PER_EL_FLOAT4r+   ÚMaxÚKERNEL_LAUNCH_OVERHEAD_SEC)ÚspecsÚdim0Údim1r&   r'   r(   Úfuse_with_prevÚnumelÚ	res_bytesÚkernel_1_rwÚkernel_3_rwÚkernel_4_rwÚkernel_2_rwÚxÚres_ss   &&&&&&&        r   Ú get_tensor_memory_traffic_ovhd_srM   ~   sö  € ð" �K€Eà€IØ˜\Ô)Ø˜(Ô"÷ Ø‘ô 0°%Õ7�ä+¨eÕ3Ô6IÈEÕ6QÕQˆKØ%ˆKØ$ a¨ÐBŠI÷ Ø‘ô 0°%Õ7�ä+¨eÕ3°aÔ:MÕ6MÐPUÕ6UÕUˆKØ$ a¨Ð5ŠIà	˜yÕ	(Ø˜(Ô"÷ àÔ"5¸Õ"=Õ=‘ä/°%Õ7Ô:MÐPUÕ:UÕU�Ü+¨eÕ3°aÕ7ˆKÜ+¨eÕ3Ô6IÈEÕ6QÕQˆKØ$°;Ð?ŠI÷ ð Ô+¨eÕ3Õ3Ô6GÈ%Õ6OÕOñ ô
 &¨Õ-Ü)¨EÕ1õ2ä'¨%Õ/õ0ð ô
 ,¨eÕ3Ô6IÈEÕ6QÕQˆKØ$Ð2ŠIà	Ð3Ô	3ØÐ2Ô2÷ ØÔ"5¸Õ"=Õ=‘ä/°%Õ7Ô:MÐPUÕ:UÕU�Ø$˜ŠIØ˜HÔ$ô
 ,¨eÕ3Ô6IÈEÕ6QÕQˆKØˆKÜ+¨eÕ3Ô6IÈEÕ6QÕQˆKØ$°;Ð?ŠIà'˜-Ó'�5à	Ð=Ô	=÷ ØÔ1°EÕ9Õ9‰Kä+¨eÕ3Ô6IÈEÕ6QÕQˆKØ �MŠ	à	Ð/Ô	/ð
 Ð2Ô2÷ ØÔ"5¸Õ"=Õ=‘ä/°%Õ7Ô:MÐPUÕ:UÕU�Ü+¨eÕ3Ô6IÈEÕ6QÕQ‰Kà˜HÔ$ô ,¨eÕ3Ô6IÈEÕ6QÕQˆKÜ-°Õ5¸Õ9‰Kð (˜-Ó'�5à Ð.‰	ð ð "
ô 
ð 	,ð
 *˜.Ñ*Ð+ó	,ð 
ð ˜_Ô,ßØÔ"5¸Õ"=Õ=‘ä/°%Õ7Ô:MÐPUÕ:UÕU�Ü+¨eÕ3Ô6IÈEÕ6QÕQ‰KçØÔ"5¸Õ"=Õ=‘ä/°%Õ7Ô:MÐPUÕ:UÕU�Ü+¨eÕ3Ô6IÈEÕ6QÕQˆKØ Ð.ˆ	ñ
 óáˆAð 	
Ð)Õ*Õ*¨UÐ3JÕ-K×KÐKÙð 
ð ñ @EÓE¹u¸!ŒU�YŠY�qÔ4Ö5¹u€EÐEà€Lùòùò Fs   Ð&Q,Ñ$Q1c                óÜ   € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\        \        ,          R\        \        ,          R\         P                  /# )r   ÚMÚKÚNr(   r   r)   ©r+   r,   r   r   )r   s   "r   r   r   7  sd   € ÷ 5Wñ 5WÜ‡|�|ð5Wä‡|�|ð5Wô ‡|�|ð5Wô
 œS•Mð5Wô ”s�mð5Wô ‡\�\ñ5Wr   c                 óŠ  € \        V4      p^V ,          V,          V,          pV\        P                  J d   VR,          pMWV\        P                  \        P                  39   d   VR,          pM(V\        P
                  J d   VR,          pM
Q RT 24       hWx,          VR,          ,          p	W,          W,          ,           p
W,          pVeˆ   VP                  R4      '       g   Q RV 24       hV\        P                  \        P                  \        P
                  39   g   Q R4       hVP                  R4      '       d   ^ M^pW¬,          pW­,           p
V\        P                  J d!   V
\        ,          V\        ,          ,           pMƒV\        P                  \        P                  39   d!   V
\        ,          V\        ,          ,           pM>V\        P
                  J d!   V
\        ,          V\        ,          ,           pM
Q RT 24       hWæR	,          ,          VR
,          ,          p\        P                  ! WŸ\        4      # )r   r   r   r   zunsupported dtype: r	   zUnsupported recipe r3   Úmxr   r
   )Úmxfp8Úmxfp4Únvfp4)r$   r   Úbfloat16Úfloat8_e4m3fnÚfloat8_e5m2Úfloat4_e2m1fn_x2r   r<   r=   r>   r+   r?   r@   )rO   rP   rQ   Údtyper(   r   rA   Úgemm_opsÚ	peak_topsÚcompute_gemm_time_sÚ	num_readsÚ
num_writesÚ
block_sizeÚnum_scale_readsÚbytes_rwÚmem_gemm_time_ss   &&&&&&          r   Úget_individual_gemm_time_sympyrf   7  sü  € ô �hÓ€EØ�1�u�q�y˜1�}€HØ”—‘ÓØÐ*Õ+‰	Ø	”5×&Ñ&¬×(9Ñ(9Ð:Ô	:Ø˜/Õ*‰	Ø	”%×(Ñ(Ó	(Ø˜/Õ*‰	à3Ð+¨E¨7Ð3Ó3ˆuØ"Õ.°Ð7QÕ1RÕRÐð •˜�•€IØ•€JàÒ!Ø×(Ñ(Ð)D×EÒEð 	
Ø! .Ð!1Ð2ó	
ÐEð Ü×ÑÜ×ÑÜ×"Ñ"ð
ô 
ð 	ð ó		ð 
ð *×4Ñ4°T×:Ò:‘RÀˆ
Ø#Õ1ˆàÕ/ˆ	à”—‘ÓØÔ0Õ0°:Ô@QÕ3QÕQ‰Ø	”5×&Ñ&¬×(9Ñ(9Ð:Ô	:àÔ2Õ2°ZÔBSÕ5SÕS‰Ø	”%×(Ñ(Ó	(ØÔ2Õ2°ZÔBSÕ5SÕS‰à3Ð+¨E¨7Ð3Ó3ˆuàÐ0Õ1Õ1°EÐ:QÕ4RÕRð ô �9Š9Ð(Ô;UÓVÐVr   c                óÞ   € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\        \        ,          R\        \        ,          R\        \        ,          /# )r   rO   rP   rQ   r'   r(   r   rR   )r   s   "r   r   r   o  s\   € ÷ ñ Ü‡|�|ðä‡|�|ðô ‡|�|ðô
 !¤�ðô œS•Mðô ”s�mñr   c                 óª   € TTTr˜pVR 8X  d   \         P                  p	\        WW'WV4      p
\        WWWV4      p\        WW)WV4      pW«,           V,           pV# )r2   )r   rX   rf   )rO   rP   rQ   r\   r'   r(   r   Úgemm_dtype_inputÚgemm_dtype_grad_inputÚgemm_dtype_grad_weightÚgemm_output_time_sÚgemm_grad_input_time_sÚgemm_grad_weight_time_sÚtotals   &&&&&&&       r   Úget_gemm_time_sympyrp   o  sz   € ð 	ØØð .DÐð
 Ð1Ô1Ü!&§¡Ðä7Ø	ˆa >óÐô <Ø	ˆa¨óÐô =Ø	ˆa¨óÐð Õ7Ð:QÕQ€EØ€Lr   c                ó:   € V ^8„  d   QhR\         \        ,          /# r   r   )r   s   "r   r   r   ‘  s   € ÷ =ñ =´X¼cµ]ñ =r   c                 óˆ   € \        V4      pWR ,          ,          VR,          ,          p\        P                  ! V\        4      # )r   r
   )r$   r+   r?   r@   )rd   r   rA   Ú
mem_time_ss   &&  r   Úget_blockwise_mem_time_sympyrt   ‘  s<   € Ü�hÓ€EàÐ0Õ1Õ1°EÐ:QÕ4RÕRð ô �9Š9�ZÔ!;Ó<Ð<r   c                ó:   € V ^8„  d   QhR\         \        ,          /# r   r   )r   s   "r   r   r   ™  s   € ÷ Qñ Qô ”s�mñ	Qr   c                 óÎ   € \        WV\        P                  R V4      p\        WV\        P                  R V4      p\        W V\        P                  R V4      pWE,           V,           # r#   )rf   r   rY   )rO   rP   rQ   r   rl   rm   rn   s   &&&&   r   Úget_blockwise_gemm_time_sympyrw   ™  sm   € ô 8Ø	ˆa”×$Ñ$ d¨HóÐô <Ø	ˆa”×$Ñ$ d¨HóÐô =Ø	ˆa”×$Ñ$ d¨HóÐð Õ6Ð9PÕPÐPr   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r   r   Ú	fuse_read©r   r   Úbool)r   s   "r   r   r   °  s$   € ÷ <ñ <ô ”s�mð<ô ñ	<r   c                 ó’   € V'       d   ^ M\         V ,          pV\        V ,          ,           \        V,          ,           p\        WR4      # )r   )r<   r=   ÚBYTES_PER_EL_FLOAT32rt   )rE   Úscale_numelr   ry   Ú
read_bytesrd   s   &&&&  r   Úget_blockwise_quant_ovhd_sr€   °  s>   € ÷  ‘Ô%6¸Õ%>€JàÔ(¨5Õ0Õ0Ô3GÈ+Õ3UÕUð ô (¨Ó;Ð;r   c                óR   € V ^8„  d   QhR\         R\        \        ,          R\        /# )r   Úenable_fusion_modelingr   rb   )r{   r   r   Úint)r   s   "r   r   r   Á  s.   € ÷ <ñ <ô !ð	<ô
 ”s�mð<ô ñ<r   c                 óð  € \         P                  ! V4      p\        W,          W,          V,          VVR 7      p\        W!,          W!,          WU,          ,          V4      p\        W!,          W!,          WU,          ,          V4      p\        W,          W,          V,          VVR 7      p	\        W,          W,          V,          V4      p
\        W,          W,          V,          V4      p\        VVVV	V
V.4      # ))ry   )r+   ÚIntegerr€   Úsum)rO   rP   rQ   r‚   r   rb   Úquant_input_lhsÚquant_weight_transposed_rhsÚquant_weight_rhsÚquant_grad_output_lhsÚ quant_grad_output_transposed_lhsÚquant_input_rhss   &&&&&&      r   Úget_blockwise_float8_mem_sympyr�   Á  sý   € ô —’˜zÓ*€Jô 1Ø	�Ø	��
ÕØØ(ô	€Oô #=Ø	�Ø	��Õ(Õ)Øó#Ðô
 2Ø	�Ø	��Õ(Õ)ØóÐô
 7Ø	�Ø	��
ÕØØ(ô	Ðô (BØ	�Ø	��
ÕØó(Ð$ô
 1Ø	�Ø	��
ÕØó€Oô àØ'ØØ!Ø,Øð	
ó	ð 	r   c          	      óŠ   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\        R\         \        ,          /# )r   r'   r(   r‚   r   rz   )r   s   "r   r   r      s@   € ÷ 3ñ 3ô !¤�ð	3ô
 œS•Mð3ô !ð3ô ”s�mñ3r   c           
      óª   € \        V4      p\        VV VR VVVR7      p\        VVVRVVRR7      p	\        VV VRVVVR7      p
\        . VOV	OV
O4      pV# )r7   )r&   r'   r(   rD   r0   Fr8   )r$   rM   r†   )rO   rP   rQ   r'   r(   r‚   r   rA   Úfwd_fp8_input_memÚfwd_fp8_weight_memÚgi_fp8_grad_output_memÚress   &&&&&&&     r   Úget_float8_mem_sympyr”      s˜   € ô �hÓ€Eô 9ØØ	Ø	ØØ-Ø%Ø-ôÐô :ØØ	Ø	ØØ-Ø%ØôÐô >ØØ	Ø	Ø!Ø-Ø%Ø-ôÐô ÐPÐ!ÐPÐ$6ÐPÐ9OÐPÓ
Q€CØ€Jr   c          	      óž   € V ^8„  d   QhR\         R\        \         ,          R\        \        \        P
                  \        3,          ,          /# )r   r&   Úrecipe_namer)   r*   )r   s   "r   r   r   6  sF   € ÷ nñ nô ð	nô
 œ#•ðnô 
Œ%”—‘œeÐ#Õ
$Õ%ñnr   c                óü  € VRJ g   Q R4       hVR8X  g   Q R4       hW,          pRp0 RmpT;R8X  d3    \         V,          p	\         V,          \        V,          ,           p
Wš.pEM¸;R8X  d:    \         V,          \        V,          ,           p	V	\        V,          ,          p	V	.pEMx;q»'       d_   VP                  R4      '       dH    \         V,          \        V,          ,           p	V	\        V,          V^ ,          ,          ,          p	V	.pEM;R	8X  dE    \         V,          \        V,          ,           \        V,          V^ ,          ,          ,           p	V	.pMÆ;R
8X  dX    \         V,          p	\         V,          \        V,          ,           \        V,          V^,          ,          ,           p
Wš,           .pMh;R8X  d   M
;R8X  d   M MD \         V,          \        V,          ,           \        V,          V^,          ,          ,           p	V	.pM \        RV RV 24      hV Uu. uF   pWÀR,          ,          V R,          ,          NK"  	  ppV Uu. uF  p\        P                  ! V\        4      NK   	  ppV# u upi u upi )zw
Inference version of `get_tensor_memory_traffic_ovhd_s`.
The only thing happening here is we quantize the activation.
Fr3   r7   z*inference only quantizes input activationsNr/   r1   rU   rV   rW   Únvfp4_staticÚnvfp4_no_global_scalezUnknown recipe name: z. Allowed recipes: r   r
   >   r1   r/   úmxfp4*úmxfp8*únvfp4*)	r<   r=   r}   r   r>   r   r+   r?   r@   )rA   rB   rC   r&   r–   rD   rE   rF   Úallowed_recipesrG   rH   ÚnamerK   rL   s   &&&&&&        r   Ú*get_inference_tensor_memory_traffic_ovhd_srŸ   6  sR  € ð ˜UÓ"Ð1 MÓ1Ð"Ø˜'Ô!ÐOÐ#OÓOÐ!ð �K€Eà€IâM€Oà
Þõ ,¨eÕ3ˆKä+¨eÕ3Ô6IÈEÕ6QÕQˆKØ$Ð2ŠIæõ ,¨eÕ3Ô6IÈEÕ6QÕQˆKàÔ/°$Õ6Õ6ˆKØ$˜ŠIá–T˜dŸo™o¨g×6Ò6õ ,¨eÕ3Ô6IÈEÕ6QÕQˆKàÔ.°Õ5¸À½ÕDÕDˆKØ$˜ŠIæõ
 " EÕ)ä%¨Õ-õ.ô &¨Õ,°¸µ
Õ;õ	<ð ð %˜‰Iæõ ,¨eÕ3ˆKô " EÕ)ä%¨Õ-õ.ô &¨Õ,°¸µ
Õ;õ	<ð ð %Õ2Ð3‰Iç×5Ò5ô " EÕ)ä%¨Õ-õ.ô &¨Õ,°¸µ
Õ;õ	<ð ð %˜‰IàÜØ'¨ }ð 5$Ø$3Ð#4ð6óð ñ óáˆAð 	
Ð)Õ*Õ*¨UÐ3JÕ-K×KÐKÙð 
ð ñ @EÓE¹u¸!ŒU�YŠY�qÔ4Ö5¹u€EÐEà€Lùòùò Fs   È &I4É$I9c                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# )r   r–   r   r   )r   s   "r   r   r   §  s(   € ÷ ñ ô œ#•ð	ô
 ”s�mñr   c           	      óX   € \        V4      p\        VV VR VRR7      p\        . VO4      pV# )r7   F)r&   r–   rD   )r$   rŸ   r†   )rO   rP   rQ   r–   r   rA   r�   r“   s   &&&&&   r   Úget_inference_float8_mem_sympyr¢   §  sF   € ô �hÓ€Eô CØØ	Ø	ØØØôÐô Ð"Ð!Ð"Ó
#€CØ€Jr   c                ó:   € V ^8„  d   QhR\         \        ,          /# r   r   )r   s   "r   r   r   ½  s   € ÷ ñ ¼xÌ½}ñ r   c                 óÂ   € \        V4      p\        V ,          V,          ^,          pWTR,          ,          VR,          ,          p\        P                  ! V\        4      pV# )r   r   r
   )r$   r<   r+   r?   r@   )rO   rP   rQ   r   rA   Ú	kernel_rwrL   s   &&&&   r   Ú'get_inference_bf16_activation_mem_sympyr¦   ½  sO   € Ü�hÓ€Eä! AÕ%¨Õ)¨AÕ-€IàÐ5Õ6Õ6¸Ð?VÕ9WÕW€EÜ�IŠI�eÔ7Ó8€EØ€Lr   c                ó¼   € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\        \        ,          R\        \        ,          /# )r   rO   rP   rQ   r–   r   rR   )r   s   "r   r   r   Ç  sN   € ÷ ñ Ü‡|�|ðä‡|�|ðô ‡|�|ðô
 œ#•ðô ”s�mñr   c                 ó    € \        WW#WE4      pV# r#   )rf   )rO   rP   rQ   r\   r–   r   rl   s   &&&&&& r   Úget_inference_gemm_time_sympyr©   Ç  s   € ô 8Ø	ˆa˜óÐð Ðr   g   ¢gé›Br#   g�íµ ÷ÆÀ>)F)NF)Útypingr   r   r   r+   r   r>   r=   r<   r}   ÚBLOCKWISE_FP8_BLOCK_SIZEr   r    r$   r@   rM   rf   rp   rt   rw   r€   r�   r”   rŸ   r¢   r¦   r©   © r   r   Ú<module>r­      s”  ð÷ )Ñ (ã Û àÐ ØÐ ØÐ ØÐ ØÐ ð à˜&Ø˜à à" Dð 	  ðð ð 	˜'Ø˜Ø˜ð 	 Ð!;ð 	# Dð 	  ð%ð( à˜'Ø˜Ø˜Ø à" Dà ð
ð ð 	˜'Ø˜Ø˜ð 	  ð 	# Dð 	  ðð  à˜'Ø˜à ð 	# Dð 	  ðð à˜(Ø˜Ø˜Ø ð ðSQÐ ÷h
÷'ð +Ð ÷v÷r5Wõp÷D=÷Q÷.<ð, #Ø.÷<÷~3÷ln÷b÷,÷ñ r   