§
    ÎÐj *  ã                   ó„  — 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Zd dl	Z	d dl
mZ d dlmZmZ d dlmZ d dlmZmZmZmZmZ d dlmZmZ dZd	Zd
ZdZdZde ee          z  de!e          fd„Z"d„ Z#d„ Z$d„ Z%d„ Z&d4d„Z'd5dej(        de!e          dej(        fd„Z)de*ej        ej(        f         fd„Z+d4de*e ej(        e,f         fd„Z-dddddddœdej(        de ee          z  dej(        fd„Z.dej(        dz  dej(        dej(        fd „Z/dd!œd"ej(        dej(        fd#„Z0d"ej(        dej        fd$„Z1d%„ Z2deddd&œd'e d(ej(        d)e3de!e          de f
d*„Z4ddddddd+œde*ej        ej        e!e          f         fd,„Z5ddddedddddd-œ
de*e e!e          f         fd.„Z6de!e          de fd/„Z7d0ej        fd1„Z8d2ej        d0ej        fd3„Z9dS )6é    N)ÚPath)ÚIterable)ÚImageÚImageOps)Ú_get_codec_params)Úget_resampled_video_transparentÚget_video_info_detailsÚhas_image_file_extensionÚrgb_bw_to_rgba_maskÚsanitize_file_name)Úget_virtual_imageÚstrip_virtual_media_suffixÚ
magic_maskz
Magic Maské   é   Úmask_outputsÚkeyword_textÚreturnc                 ót   — t          | t          ¦  «        rt          j        d| ¦  «        }n| }d„ |D ¦   «         S )Nz[\n,;]+c                 ó’   — g | ]D}t          |¦  «                             ¦   «         ¯#t          |¦  «                             ¦   «         ‘ŒES © )ÚstrÚstrip)Ú.0Úkeywords     ú9C:\Users\johnn\OneDrive\Documents\AI\shared\magic_mask.pyú
<listcomp>z"parse_keywords.<locals>.<listcomp>   sA   € ÐSÐSÐS W½cÀ'¹l¼l×>PÒ>PÑ>RÔ>RÐS�C�‰LŒL×ÒÑ Ô ÐSÐSÐSó    )Ú
isinstancer   ÚreÚsplit)r   Ú
candidatess     r   Úparse_keywordsr#      s@   € Ý�,¥Ñ$Ô$ð "Ý”X˜j¨,Ñ7Ô7ˆ
ˆ
à!ˆ
ØSÐS°
ÐSÑSÔSÐSr   c                  ó"   — ddl m}   | ¦   «         S )Nr   )Úquery_download_def)Úpreprocessing.sam3.assetsr%   )Úquery_sam3_download_defs    r   r%   r%   !   s#   € ØWÐWÐWÐWÐWÐWà"Ð"Ñ$Ô$Ð$r   c                 ó2   — t          | ¦  «        rt          ndS )Nr   )ÚboolÚDEFAULT_FILL_HOLE_AREA)Úno_holes    r   Ú_fill_hole_arear,   '   s   € Ý%)¨'¡]¤]Ð9Õ!Ð!¸Ð9r   c                 óh  — t          | t          ¦  «        r?|                      d¦  «        p)|                      d¦  «        p|                      d¦  «        } t          | t          ¦  «        rt	          | ¦  «        nd }|�|} n6t          | t          ¦  «        r!t          j        t          | ¦  «        ¦  «        } t          | t          j	        ¦  «        rt          j
        | ¦  «        } t          | t
          j        ¦  «        st          d¦  «        ‚t          j        | ¦  «                             d¦  «        S )NÚpathÚnameÚ	orig_namez!Magic Mask needs a control image.ÚRGB)r   ÚdictÚgetr   r   r   Úopenr   ÚnpÚndarrayÚ	fromarrayÚ
ValueErrorr   Úexif_transposeÚconvert)ÚimageÚvirtual_images     r   Ú_open_imager=   +   s  € Ý�%�ÑÔð QØ—	’	˜&Ñ!Ô!ÐP U§Y¢Y¨vÑ%6Ô%6ÐP¸%¿)º)ÀKÑ:PÔ:PˆÝ0:¸5Å#Ñ0FÔ0FÐPÕ% eÑ,Ô,Ð,ÈD€MØÐ ØˆˆÝ	�E�3Ñ	Ô	ð >Ý”
Õ5°eÑ<Ô<Ñ=Ô=ˆÝ�%�œÑ$Ô$ð 'Ý” Ñ&Ô&ˆÝ�e�Uœ[Ñ)Ô)ð >ÝÐ<Ñ=Ô=Ð=ÝÔ" 5Ñ)Ô)×1Ò1°%Ñ8Ô8Ð8r   c                 ó®   — t          | t          ¦  «        r?|                      d¦  «        p)|                      d¦  «        p|                      d¦  «        } | S )Nr.   r/   r0   )r   r2   r3   )r.   s    r   Ú_media_pathr?   :   sM   € Ý�$�ÑÔð MØ�xŠx˜ÑÔÐL 4§8¢8¨FÑ#3Ô#3ÐL°t·x²xÀÑ7LÔ7LˆØ€Kr   c                 óJ  ‡‡— t          | ¦  «        } | st          d¦  «        ‚t          | t          ¦  «        rRt	          | ¦  «        rCt          | ¦  «        }|j        \  ŠŠt          j        |t          j	        ¬¦  «        d          d‰‰fS t          | ¦  «        }|                     d¦  «        p|                     d¦  «        pd}t          |                     d¦  «        p|                     d¦  «        pd¦  «        Št          |                     d	¦  «        p|                     d
¦  «        pd¦  «        Št          |                     d¦  «        pd¦  «        }|�Ut          |t          dt          t          t!          |¦  «        t!          |¦  «        z  ¦  «        ¦  «        ¦  «        ¦  «        }t#          | d||d¬¦  «        }t%          j        |¦  «        r9|                     ¦   «                              ¦   «                              ¦   «         }n9t/          |d¦  «        r|                     ¦   «         }nt          j        |¦  «        }|j        dk    s|j        d         dk    rt          d¦  «        ‚|j        d         dk    r|dd d…f         }|j        d         dk    rt          j        |dd¬¦  «        }‰dk    r>‰dk    r8|j        dd…         ‰‰fk    r#t          j        ˆˆfd„|D ¦   «         d¬¦  «        }|                     t          j	        d¬¦  «        |‰‰fS )Nú!Magic Mask needs a control video.©Údtyper   Ú	fps_floatÚfpsÚdisplay_widthÚwidthr   Údisplay_heightÚheightÚframe_countÚtorch)ÚbridgeÚasnumpyé   z3Magic Mask could not read any control video frames.éÿÿÿÿé   .©Úaxisc                 ó¨   •— g | ]N}t          j        t          j        |¦  «                             ‰‰ft          j        j        ¬ ¦  «        ¦  «        ‘ŒOS ))Úresample)r5   Úasarrayr   r7   ÚresizeÚ
ResamplingÚLANCZOS)r   ÚframerI   rG   s     €€r   r   z#_video_to_numpy.<locals>.<listcomp>]   sb   ø€ ð  Nð  Nð  Nð  ~C�2œ:¥e¤o°eÑ&<Ô&<×&CÒ&CÀUÈFÀOÕ^cÔ^nÔ^vÐ&CÑ&wÔ&wÑxÔxð  Nð  Nð  Nr   F©Úcopy)r?   r8   r   r   r
   r=   Úsizer5   rU   Úuint8r	   r3   ÚintÚminÚmaxÚroundÚfloatr   rK   Ú	is_tensorÚdetachÚcpuÚnumpyÚhasattrrM   ÚndimÚshapeÚrepeatÚstackÚastype)	Ú
video_pathÚmax_time_secondsr;   ÚdetailsrE   rJ   ÚframesrI   rG   s	          @@r   Ú_video_to_numpyrq   @   s  øø€ Ý˜ZÑ(Ô(€JØð >ÝÐ<Ñ=Ô=Ð=Ý�*�cÑ"Ô"ð IÕ'?À
Ñ'KÔ'Kð IÝ˜JÑ'Ô'ˆØœ
‰ˆˆvÝŒz˜%¥r¤xÐ0Ñ0Ô0°Ô6¸¸5À&ÐHÐHÝ$ ZÑ0Ô0€GØ
�+Š+�kÑ
"Ô
"Ð
= g§k¢k°%Ñ&8Ô&8Ð
=¸A€CÝ�—’˜OÑ,Ô,ÐI°·²¸GÑ0DÔ0DÐIÈÑJÔJ€EÝ�—’Ð-Ñ.Ô.ÐL°'·+²+¸hÑ2GÔ2GÐLÈ1ÑMÔM€FÝ�g—k’k -Ñ0Ô0Ð5°AÑ6Ô6€KØÐ#Ý˜+¥s¨1­cµ%½¸c¹
¼
ÅUÐK[ÑE\ÔE\Ñ8\Ñ2]Ô2]Ñ.^Ô.^Ñ'_Ô'_Ñ`Ô`ˆÝ,¨Z¸¸KÈÐU\Ð]Ñ]Ô]€FÝ„�vÑÔð $Ø—’‘”×$Ò$Ñ&Ô&×,Ò,Ñ.Ô.ˆˆÝ	�˜Ñ	#Ô	#ð $Ø—’Ñ!Ô!ˆˆå”˜FÑ#Ô#ˆØ„{�aÒÐ˜6œ<¨œ?¨aÒ/Ð/ÝÐNÑOÔOÐOØ„|�BÔ˜!ÒÐØ˜˜R˜a˜R˜”ˆØ„|�BÔ˜1ÒÐÝ”˜6 1¨2Ð.Ñ.Ô.ˆØˆq‚y€y�V˜a’Z�Z F¤L°°1°Ô$5¸&À%¸Ò$HÐ$HÝ”ð  Nð  Nð  Nð  Nð  Nð  GMð  Nñ  Nô  Nð  UVð  Wñ  Wô  WˆØ�=Š=�œ¨ˆ=Ñ.Ô.°°U¸FÐBÐBr   FÚvideoÚkeywordsc                 ó¸   — ddl m} t          j        ¦   «         5   || ||t          ddt          |¦  «        ||||¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr   )Úrun_sam3_videoTF)	Úbatched_grounding_batch_sizeÚpostprocess_batch_sizeÚuse_batched_groundingÚkeep_video_frames_on_cudaÚfill_hole_areaÚcolorize_objectsÚcolor_paletteÚmax_colored_objectsÚprogress_callback)Úpreprocessing.sam3.preprocessorru   rK   Úinference_modeÚDEFAULT_POSTPROCESS_BATCH_SIZEr,   )	rr   rs   Ú
batch_sizer+   r~   r{   r|   r}   ru   s	            r   Ú	_run_sam3rƒ   a   sÄ   € Ø>Ð>Ð>Ð>Ð>Ð>å	Ô	Ñ	Ô	ð 
ð 
Øˆ~ØØØ)3Ý#AØ"&Ø&+Ý*¨7Ñ3Ô3Ø-Ø'Ø 3Ø/ð
ñ 
ô 
ð
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
s   š(AÁAÁAc                 óp   — t          | ¦  «        } | t          j        | t          j        ¬¦  «        d          fS )NrB   )r=   r5   rU   r]   )r;   s    r   Úprepare_image_mask_inputr…   t   s0   € Ý˜ÑÔ€EØ•"”*˜U­"¬(Ð3Ñ3Ô3°DÔ9Ð9Ð9r   c                 óx   — t          | ¦  «        } | st          d¦  «        ‚t          | |¬¦  «        \  }}}}| ||fS )NrA   ©rn   )r?   r8   rq   )rm   rn   rr   rE   Ú_s        r   Úprepare_video_mask_inputr‰   y   sO   € Ý˜ZÑ(Ô(€JØð >ÝÐ<Ñ=Ô=Ð=Ý& zÐDTÐUÑUÔUÑ€Eˆ3��1Ø�u˜cÐ!Ð!r   T)r‚   r+   r~   r{   r|   r}   c          
      ó6  — t          |¦  «        }t          |¦  «        dk    ra|r2t          j        g | j        d d…         ¢d‘R t          j        ¬¦  «        n,t          j        | j        d d…         t          j        ¬¦  «        S t          | |||||||¬¦  «        S )Nr   rP   rB   )r~   r{   r|   r}   )r#   Úlenr5   Úzerosri   r]   Úbool_rƒ   )	rr   r   r‚   r+   r~   r{   r|   r}   rs   s	            r   Úgenerate_keyword_masksrŽ   �   sÏ   € Ý˜lÑ+Ô+€HÝ
ˆ8�}„}˜ÒÐØBRð  B�rŒxÐ-˜%œ+ b q bœ/Ð-¨1Ð-Ð-µR´XÐ>Ñ>Ô>Ð>ÕXZÔX`ÐafÔalÐmoÐnoÐmoÔapÕxzô  yAð  YBñ  YBô  YBð  	BÝ�U˜H j°'ÐM^ð  rBð  R_ð  uHð  Iñ  Iô  Ið  Ir   Úcurrent_maskÚkeyword_maskc                 óB  — |j         dk    r^|j        d         dk    rM| €|                     ¦   «         S |                      ¦   «         }|                     d¬¦  «        }||         ||<   |S |                     t
          d¬¦  «        }| €|                     ¦   «         n| |z  S )NrN   rO   rP   rQ   FrZ   )rh   ri   r[   Úanyrl   r)   )r�   r�   ÚmergedÚselectors       r   Úmerge_keyword_masksr•   ˆ   s®   € ØÔ˜AÒÐ ,Ô"4°RÔ"8¸AÒ"=Ð"=ØÐØ×$Ò$Ñ&Ô&Ð&Ø×"Ò"Ñ$Ô$ˆØ×#Ò#¨Ð#Ñ,Ô,ˆØ'¨Ô1ˆˆxÑØˆØ×&Ò&¥t°%Ð&Ñ8Ô8€LØ".Ð"6ˆ<×ÒÑÔÐ¸\ÈLÑ=XÐYr   ©Únegative_maskÚmaskc                ó¼   — | j         dk    rK| j        d         dk    r:|r|                      d¬¦  «         S |                      t          j        d¬¦  «        S |r|  } | S )NrP   rO   rQ   FrZ   )rh   ri   r’   rl   r5   r]   )r˜   r—   s     r   Úfinalize_masksrš   ”   sh   € Ø„y�A‚~€~˜$œ* Rœ.¨AÒ-Ð-Øð 	&Ø—H’H "�HÑ%Ô%Ð%Ð%Ø�{Š{�2œ8¨%ˆ{Ñ0Ô0Ð0Øð ØˆuˆØ€Kr   c                 ó  — | j         dk    rF| j        d         dk    r5t          j        |                      t
          j        d¬¦  «        d¬¦  «        S t          j        |                      t
          j        ¦  «        dz  d¬¦  «        S )	NrP   rO   FrZ   r1   ©Úmodeéÿ   ÚL)rh   ri   r   r7   rl   r5   r]   )r˜   s    r   Úmask_to_imager    ž   sl   € Ø„y�A‚~€~˜$œ* Rœ.¨AÒ-Ð-ÝŒ˜tŸ{š{­2¬8¸%˜{Ñ@Ô@ÀuÐMÑMÔMÐMÝŒ?˜4Ÿ;š;¥r¤xÑ0Ô0°3Ñ6¸SÐAÑAÔAÐAr   c                  ó†   — t          t          dd¦  «        ¦  «        } d| d<   |                      d¦  «        dk    rd| d<   | S )NÚ
libx264_10Úmp4r   Úmacro_block_sizeÚpixelformatÚyuv420pÚyuv444p)r2   r   r3   )Úparamss    r   Ú_magic_mask_video_codec_paramsr©   ¤   sK   € ÝÕ# L°%Ñ8Ô8Ñ9Ô9€FØ!"€FÐÑØ‡z‚z�-Ñ Ô  IÒ-Ð-Ø )ˆˆ}ÑØ€Mr   )Ú
codec_typeÚ
output_dirÚabort_callbackÚbackground_colorrm   ÚmasksrE   c                ó¦  — |j         dk    rm|j        d         dk    r\|                     t          j        d¬¦  «        }|�8t          j        |t          j        ¬¦  «        ||                     d¬¦  «         <   n?|                     t          j        ¦  «        dz  }t          j        |d	         dd¬¦  «        }t          |¦  «         	                    dd¬
¦  «         t          t          | ¦  «        ¦  «        j        }	t          |¦  «        }
t          |¦  «        t          |	¦  «        › d|
› dt          j        d¦  «        › d�z  }t!          j        |¦  «        }t%          j        |f|ddœt)          ¦   «         ¤Ž}	 |D ]#}|�
 |¦   «          |                     |¦  «         Œ$	 |                     ¦   «          n# |                     ¦   «          w xY w|S )NrN   rO   rP   TrZ   rB   rQ   rž   ).N)ÚparentsÚexist_okÚ_magic_mask_rˆ   z%Y%m%d_%H%M%Sz.mp4Úerror)rE   Úffmpeg_log_level)rh   ri   rl   r5   r]   rU   r’   rj   r   Úmkdirr   ÚstemÚtruncate_keywords_for_pathr   ÚtimeÚstrftimeÚosÚfspathÚimageioÚ
get_writerr©   Úappend_dataÚclose)rm   r®   rE   rs   rª   r«   r¬   r­   Úmask_framesr¶   Úkeywords_suffixÚoutput_pathÚwriterrY   s                 r   Úsave_mask_videorÄ   ¬   sß  € à„z�Q‚€˜5œ; rœ?¨aÒ/Ð/Ø—l’l¥2¤8°$�lÑ7Ô7ˆØÐ'Ý57´ZÐ@PÕXZÔX`Ð5aÑ5aÔ5aˆK˜Ÿš¨b˜Ñ1Ô1Ð1Ñ2øà—’�RœXÑ&Ô&¨Ñ,ˆÝ”i  iÔ 0°!¸"Ð=Ñ=Ô=ˆÝˆÑÔ×Ò 4°$ÐÑ7Ô7Ð7ÝÕ*¨:Ñ6Ô6Ñ7Ô7Ô<€DÝ0°Ñ:Ô:€OÝ�zÑ"Ô"Õ(:¸4Ñ(@Ô(@ð  &Eð  &EÈoð  &Eð  &EÕ`dÔ`mÐn}Ñ`~Ô`~ð  &Eð  &Eð  &Eñ  E€KÝ”)˜KÑ(Ô(€KÝÔ Ðs°ÀwÐsÐsÕRpÑRrÔRrÐsÐs€FðØ ð 	&ð 	&ˆEØÐ)Ø�Ñ Ô Ð Ø×Ò˜uÑ%Ô%Ð%Ð%ð	&ð
 	�Š‰Œˆˆøˆ�Š‰ŒˆˆøøøØÐs   Å<&F8 Æ8G)r‚   r+   r—   r{   r|   r}   c                ó  — t          |¦  «        }t          |¦  «        dk    rt          d¦  «        ‚t          | ¦  «        \  } }	t	          t          |	||||||¬¦  «        d         |¬¦  «        }
t          |
¦  «        }| ||fS )Nr   úEnter at least one keyword.©r{   r|   r}   r–   )r#   r‹   r8   r…   rš   rƒ   r    )r;   r   r‚   r+   r—   r{   r|   r}   rs   rr   r˜   Ú
mask_images               r   Úgenerate_image_maskrÉ   Å   s²   € Ý˜lÑ+Ô+€HÝ
ˆ8�}„}˜ÒÐÝÐ6Ñ7Ô7Ð7Ý+¨EÑ2Ô2�L€Eˆ5Ý�) E¨8°ZÀÐ[kð  |Ið  _rð  sñ  sô  sð  tuô  vð  FSð  Tñ  Tô  T€DÝ˜tÑ$Ô$€JØ�*˜hÐ&Ð&r   )
r‚   r+   r—   rª   r«   r{   r|   r}   r­   rn   c       
         ó  — t          |¦  «        }t          |¦  «        dk    rt          d¦  «        ‚t          | |¬¦  «        \  } }}t	          t          |||||||	¬¦  «        |¬¦  «        }t          | |||||
¬¦  «        |fS )Nr   rÆ   r‡   rÇ   r–   )r«   r­   )r#   r‹   r8   r‰   rš   rƒ   rÄ   )rm   r   r‚   r+   r—   rª   r«   r{   r|   r}   r­   rn   rs   rr   rE   r®   s                   r   Úgenerate_video_maskrË   Ï   sÀ   € Ý˜lÑ+Ô+€HÝ
ˆ8�}„}˜ÒÐÝÐ6Ñ7Ô7Ð7Ý5°jÐScÐdÑdÔdÑ€J��sÝ�9 U¨H°jÀ'Ð\lð  }Jð  `sð  tñ  tô  tð  DQð  Rñ  Rô  R€EÝ˜: u¨c°8È
ÐeuÐvÑvÔvð  yAð  Að  Ar   c                 ó†   — t          d                     | ¦  «        d¦  «                             d¦  «        }|d d…         pdS )Nrˆ   é(   r˜   )r   Újoinr   )rs   Úsuffixs     r   r·   r·   Ø   s>   € Ý §¢¨Ñ 2Ô 2°CÑ8Ô8×>Ò>¸sÑCÔC€FØ�#�2�#Œ;Ð ˜&Ð r   rÈ   c                 ó6  — | j         dk    r€t          j        | t          j        ¬¦  «        }|                     d¬¦  «                             t          j        ¦  «        dz  }t          j        t          j        ||g¦  «        d¬¦  «        S t          | ¦  «        S )Nr1   rB   rO   rQ   rž   ÚRGBArœ   )
r�   r5   rU   r]   r’   rl   r   r7   Údstackr   )rÈ   ÚrgbÚalphas      r   Úmask_image_to_rgba_layerrÕ   Ý   s~   € Ø„˜%ÒÐÝŒj˜­2¬8Ð4Ñ4Ô4ˆØ—’˜b�Ñ!Ô!×(Ò(­¬Ñ2Ô2°SÑ8ˆÝŒ�rœy¨#¨u¨Ñ6Ô6¸VÐDÑDÔDÐDÝ˜zÑ*Ô*Ð*r   Ú
backgroundc                 ó*   — | d t          |¦  «        gdœS )N)rÖ   Ú	compositeÚlayers)rÕ   )rÖ   rÈ   s     r   Úbuild_image_editor_valuerÚ   å   s   € Ø$°4ÕD\Ð]gÑDhÔDhÐCiÐjÐjÐjr   )N)NFNN):rº   r    r¸   Úpathlibr   Útypingr   rf   r5   rK   Ú
imageio.v2Úv2r¼   ÚPILr   r   Úshared.utils.audio_videor   Úshared.utils.utilsr   r	   r
   r   r   Úshared.utils.virtual_mediar   r   Ú
PROCESS_IDÚPROCESS_NAMEr*   r�   Ú
OUTPUT_DIRr   Úlistr#   r%   r,   r=   r?   rq   r6   rƒ   Útupler…   r^   r‰   rŽ   r•   rš   r    r©   rb   rÄ   rÉ   rË   r·   rÕ   rÚ   r   r   r   ú<module>rè      sc  ðà 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à 6Ð 6Ð 6Ð 6Ð 6Ð 6ð Zð  Zð  Zð  Zð  Zð  Zð  Zð  Zð  Zð  Zð  Zð  Zð  Zð  ZØ TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tð €
Ø€ØÐ Ø!"Ð Ø€
ðT  x°¤}Ñ!4ð T¸¸c¼ð Tð Tð Tð Tð%ð %ð %ð:ð :ð :ð9ð 9ð 9ðð ð ðCð Cð Cð CðB
ð 
�R”Zð 
¨4°¬9ð 
ð  moô  mwð 
ð 
ð 
ð 
ð&: u¨U¬[¸"¼*Ð-DÔ'Eð :ð :ð :ð :ð
"ð "À5ÈÈbÌjÐZ]ÐI]ÔC^ð "ð "ð "ð "ð `dÐmqð  FJð  ]bð  rvð  LPð Ið Ið I "¤*ð I¸CÀ(È3Ä-Ñ<Oð Ið  UWô  U_ð Ið Ið Ið Ið	Z b¤j°4Ñ&7ð 	ZÀrÄzð 	ZÐVXÔV`ð 	Zð 	Zð 	Zð 	Zð 7<ð ð ð ˜œð ÀÄ
ð ð ð ð ðB˜œ
ð B u¤{ð Bð Bð Bð Bðð ð ð hlð  yCð  TXð  koð ð ð  ð ¨B¬Jð ¸Uð ÈdÐSVÌið ð  twð ð ð ð ð2 <@ÈÐ]bÐuzð  KOð  eið 'ð 'ð 'ð  nsð  tyô  tð  AFô  ALð  NRð  SVô  NWð  tWô  nXð 'ð 'ð 'ð 'ð AEÈdÐbgÐtxð  FPð  chð  x|ð  RVð  imð  @Dð Að Að Að  INð  ORð  TXð  Y\ô  T]ð  O]ô  I^ð Að Að Að Að!¨¨c¬ð !°sð !ð !ð !ð !ð
+¨¬ð +ð +ð +ð +ðk¨¬ð kÀ%Ä+ð kð kð kð kð kð kr   