Ë
    ÿÍ:jœM  ã                   ó°   — d dl mZmZmZmZ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 d dlmZ d d	lZd d	lZd d
lmZ d dlmZ d dlmZ  G d„ d«      Zy	)é    )ÚOptionalÚTextIOÚUnionÚDictÚAny)ÚPath)ÚOrderedDicté   )ÚPipelineInput)ÚPipelineOutput)Ú	Direction)ÚFileLockN)ÚTimeline)Ú
Annotation)ÚTrialc            	       óÔ  — e Zd ZdZd„ Zed„ «       Zej                  d„ «       Zd„ Zd„ Z	d„ Z
d„ Z	 d(d	ee   d
ee   defd„Zdedefd„Zdedefd„Z	 	 	 d)dee   d	ee   d
ee   defd„Zd„ Zdedd fd„Zdedd fd„Zed„ «       Z	 	 d*dedee   dee   defd„Zdedd fd„Zdedefd„Zd+d„Z de!fd „Z"ded!edefd"„Z#ed#„ «       Z$d$e%d!efd%„Z&d$e%d!e'e(e)f   fd&„Z*d$e%d!e'e(e)f   fd'„Z+y),ÚPipelinezBase tunable pipelinec                 ól   — t        «       | _        t        «       | _        t        «       | _        d| _        y )NF)r	   Ú_parametersÚ_instantiatedÚ
_pipelinesÚtraining©Úselfs    úo/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/pyannote/pipeline/pipeline.pyÚ__init__zPipeline.__init__0   s.   € ô 2=³ˆÔô .9«]ˆÔô 0;«}ˆŒð ˆ�ó    c                 ó   — | j                   S ©N)Ú	_trainingr   s    r   r   zPipeline.training>   s   € à�~‰~Ðr   c                 ód   — || _         | j                  j                  «       D ]  \  }}||_        Œ y r   )r    r   Úitemsr   )r   r   Ú_Úpipelines       r   r   zPipeline.trainingB   s1   € à!ˆŒàŸ?™?×0Ñ0Ó2ò 	)‰KˆAˆxØ (ˆHÕñ	)r   c           	      óš   — | j                  d¬«      }t        t        t        | j	                  |«      j                  «       «      «      «      S )NT)Úfrozen)Ú
parametersÚhashÚtupleÚsortedÚ_flattenr"   )r   r&   s     r   Ú__hash__zPipeline.__hash__I   s9   € à—‘¨�Ó-ˆÜ”Eœ& §¡¨vÓ!6×!<Ñ!<Ó!>Ó?Ó@ÓAÐAr   c                 óF  — d| j                   v r| j                   d   }||v r||   S d| j                   v r| j                   d   }||v r||   S d| j                   v r| j                   d   }||v r||   S dj                  t        | «      j                  |«      }t	        |«      ‚)z(Advanced) attribute getterr   r   r   z!'{}' object has no attribute '{}')Ú__dict__ÚformatÚtypeÚ__name__ÚAttributeError)r   Únamer   r   r   Úmsgs         r   Ú__getattr__zPipeline.__getattr__N   s¶   € ð ˜dŸm™mÑ+Ø ŸM™M¨/Ñ:ˆMØ�}Ñ$Ø$ TÑ*Ð*ð ˜DŸM™MÑ)ØŸ-™-¨Ñ6ˆKØ�{Ñ"Ø" 4Ñ(Ð(ð ˜4Ÿ=™=Ñ(ØŸ™ |Ñ4ˆJØ�zÑ!Ø! $Ñ'Ð'à1×8Ñ8¼¸d»×9LÑ9LÈdÓSˆÜ˜SÓ!Ð!r   c                 óà  ‡— ddl m} ˆfd„}| j                  j                  d«      }| j                  j                  d«      }| j                  j                  d«      }t	        ||«      r)|€d}t        |«      ‚ || j                  ||«       ||‰<   yt	        |t        «      r)|€d	}t        |«      ‚ || j                  ||«       ||‰<   y|�
‰|v r||‰<   yt        j                  | ‰|«       y)
a?  (Advanced) attribute setter

        If `value` is an instance of `Parameter`, store it in `_parameters`.
        elif `value` is an instance of `Pipeline`, store it in `_pipelines`.
        elif `value` isn't an instance of `Parameter` and `name` is in `_parameters`,
        store `value` in `_instantiated`.
        r
   )Ú	Parameterc                  ó$   •— | D ]
  }‰|v sŒ|‰= Œ y r   © )ÚdictsÚdr3   s     €r   Úremove_fromz)Pipeline.__setattr__.<locals>.remove_fromr   s    ø€ Øò  �Ø˜1’9Ø˜$™ñ r   r   r   r   Nz>cannot assign hyper-parameters before Pipeline.__init__() callz;cannot assign sub-pipelines before Pipeline.__init__() call)	Ú	parameterr7   r.   ÚgetÚ
isinstancer2   r   ÚobjectÚ__setattr__)	r   r3   Úvaluer7   r<   r   r   r   r4   s	    `       r   rA   zPipeline.__setattr__f   sü   ø€ õ 	)ô	 ð
 —m‘m×'Ñ'¨Ó6ˆØŸ™×)Ñ)¨/Ó:ˆØ—]‘]×&Ñ& |Ó4ˆ
ô �e˜YÔ'ØÐ"àWð ô % SÓ)Ð)Ù˜Ÿ™ }°jÔAØ %ˆK˜ÑØô �eœXÔ&ØÐ!ØV�Ü$ SÓ)Ð)Ù˜Ÿ™ {°MÔBØ$ˆJ�tÑØð Ð" t¨{Ñ':Ø"'ˆM˜$ÑØä×Ñ˜4  uÕ-r   c                 óØ   — || j                   v r| j                   |= y || j                  v r| j                  |= y || j                  v r| j                  |= y t        j	                  | |«       y r   )r   r   r   r@   Ú__delattr__)r   r3   s     r   rD   zPipeline.__delattr__—   sd   € à�4×#Ñ#Ñ#Ø× Ñ  Ñ&à�T×'Ñ'Ñ'Ø×"Ñ" 4Ñ(à�T—_‘_Ñ$Ø—‘ Ñ%ô ×Ñ˜t TÕ*r   r&   ÚinstantiatedÚreturnc                 óÖ  — ddl m} |r|rd}t        |«      ‚|rt        | j                  «      }n\|rE| j
                  j                  «       D ��ci c]  \  }}t        ||«      sŒ||j                  “Œ! }}}nt        | j
                  «      }| j                  j                  «       D ]:  \  }}	|	j                  ||¬«      }
|
j                  «       D ]  \  }}|||› d|› �<   Œ Œ< |S c c}}w )aw  Get flattened dictionary of parameters

        Parameters
        ----------
        frozen : `bool`, optional
            Only return value of frozen parameters.
        instantiated : `bool`, optional
            Only return value of instantiated parameters.

        Returns
        -------
        params : `dict`
            Flattened dictionary of parameters.
        r
   ©ÚFrozenz4one must choose between `frozen` and `instantiated`.©r&   rE   ú>)r=   rI   Ú
ValueErrorÚdictr   r   r"   r?   rB   r   Ú_flattened_parameters)r   r&   rE   rI   r4   ÚparamsÚnÚpÚpipeline_namer$   Úpipeline_paramsr3   rB   s                r   rN   zPipeline._flattened_parameters¥   s   € õ& 	&á‘lØHˆCÜ˜S“/Ð!ñ Ü˜$×,Ñ,Ó-‰Fáà'+×'7Ñ'7×'=Ñ'=Ó'?÷Ù#˜q !Ä:ÈaÐQWÕCX��1—7‘7‘
ðˆFò ô
 ˜$×*Ñ*Ó+ˆFð (,§¡×'<Ñ'<Ó'>ò 	:Ñ#ˆM˜8Ø&×<Ñ<Ø¨Lð =ó ˆOð  /×4Ñ4Ó6ò :‘��eØ49�˜-˜¨¨$¨Ð0Ò1ñ:ð		:ð ˆùós   ÁC%Á$C%Únested_paramsc                 óØ   — t        «       }|j                  «       D ]L  \  }}t        |t         «      r2| j                  |«      j                  «       D ]  \  }}|||› d|› �<   Œ ŒH|||<   ŒN |S )aø  Convert nested dictionary to flattened dictionary

        For instance, a nested dictionary like this one:

            ~~~~~~~~~~~~~~~~~~~~~
            param: value1
            pipeline:
                param: value2
                subpipeline:
                    param: value3
            ~~~~~~~~~~~~~~~~~~~~~

        becomes the following flattened dictionary:

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            param                       : value1
            pipeline>param              : value2
            pipeline>subpipeline>param  : value3
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Parameter
        ---------
        nested_params : `dict`

        Returns
        -------
        flattened_params : `dict`
        rK   )rM   r"   r?   r+   )r   rT   Úflattened_paramsr3   rB   ÚsubnameÚsubvalues          r   r+   zPipeline._flattenÔ   s…   € ô:  ›6ÐØ(×.Ñ.Ó0ò 	/‰KˆD�%Ü˜%¤Ô&Ø)-¯©°uÓ)=×)CÑ)CÓ)Eò EÑ%�G˜XØ<DÐ$¨ v¨Q¨w¨iÐ%8Ò9ñEð */Ð  Ò&ð	/ð  Ðr   rV   c                 óv  — i }| j                   D �ci c]  }|i “Œ }}|j                  «       D ]K  \  }}|j                  d«      }t        |«      dkD  r"|d   }dj	                  |dd «      }|||   |<   ŒG|||<   ŒM | j                   j                  «       D ]  \  }}	|	j                  ||   «      ||<   Œ |S c c}w )aø  Convert flattened dictionary to nested dictionary

        For instance, a flattened dictionary like this one:

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            param                       : value1
            pipeline>param              : value2
            pipeline>subpipeline>param  : value3
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        becomes the following nested dictionary:

            ~~~~~~~~~~~~~~~~~~~~~
            param: value1
            pipeline:
                param: value2
                subpipeline:
                    param: value3
            ~~~~~~~~~~~~~~~~~~~~~

        Parameter
        ---------
        flattened_params : `dict`

        Returns
        -------
        nested_params : `dict`
        rK   r
   r   N)r   r"   ÚsplitÚlenÚjoinÚ
_unflatten)
r   rV   rT   r3   rS   rB   ÚtokensrR   Ú
param_namer$   s
             r   r]   zPipeline._unflattenú   sÞ   € ð< ˆà04·±Ö@¨˜4 ™8Ð@ˆÐ@Ø+×1Ñ1Ó3ò 	,‰KˆD�%ð —Z‘Z “_ˆFÜ�6‹{˜QŠà & q¡	�à ŸX™X f¨Q¨R jÓ1�
à=B� Ñ.¨zÒ:ð
 ',�˜dÒ#ð	,ð$ #Ÿo™o×3Ñ3Ó5ò 	M‰NˆD�(Ø"*×"5Ñ"5°oÀdÑ6KÓ"LˆM˜$Òð	Mð Ðùò- As   ‘
B6NÚtrialc           	      óÔ   — |s|r|�d}t        |«      ‚| j                  ||¬«      }|�*|j                  «       D ��ci c]  \  }}| |||«      “Œ }}}| j                  |«      S c c}}w )ag  Returns nested dictionary of (optionnaly instantiated) parameters.

        For a pipeline with one `param`, one sub-pipeline with its own param
        and its own sub-pipeline, it will returns something like:

        ~~~~~~~~~~~~~~~~~~~~~
        param: value1
        pipeline:
            param: value2
            subpipeline:
                param: value3
        ~~~~~~~~~~~~~~~~~~~~~

        Parameter
        ---------
        trial : `Trial`, optional
            When provided, use trial to suggest new parameter values
            and return them.
        frozen : `bool`, optional
            Return frozen parameter value
        instantiated : `bool`, optional
            Return instantiated parameter values.

        Returns
        -------
        params : `dict`
            Nested dictionary of parameters. See above for the actual format.
        z<One must choose between `trial`, `instantiated`, or `frozen`rJ   )rL   rN   r"   r]   )r   r`   r&   rE   r4   rO   r3   Úparams           r   r'   zPipeline.parameters2  s{   € ñF ™F¨Ð(9ØPˆCÜ˜S“/Ð!ð ×+Ñ+°6ÈÐ+ÓUˆàÐàBHÇ,Á,Ã.×Q±;°4¸�d™E $¨Ó.Ñ.ÐQˆFÑQð �‰˜vÓ&Ð&ùó Rs   ¼A$c                  ó   — y)z8Instantiate root pipeline with current set of parametersNr9   r   s    r   Ú
initializezPipeline.initializec  s   € àr   rO   c                 óB  — ddl m} |j                  «       D ]…  \  }}|| j                  v r@t	        |t
        «      sd|› d�}t        |«      ‚| j                  |   j                  |«       ŒT|| j                  v rt        | | ||«      «       Œvd|› d�}t        |«      ‚ | S )zìRecursively freeze pipeline parameters

        Parameters
        ----------
        params : `dict`
            Nested dictionary of parameters.

        Returns
        -------
        self : `Pipeline`
            Pipeline.
        r
   rH   úonly parameters of 'z1' pipeline can be frozen (not the whole pipeline)úparameter 'ú' does not exist)
r=   rI   r"   r   r?   rM   rL   Úfreezer   Úsetattr)r   rO   rI   r3   rB   r4   s         r   ri   zPipeline.freezeg  s·   € õ 	&à!Ÿ<™<›>ò 	"‰KˆD�%ð �t—‘Ñ&Ü! %¬Ô.à.¨t¨fð 5=ð >ð ô % S›/Ð)Ø—‘ Ñ%×,Ñ,¨UÔ3Øð �t×'Ñ'Ñ'Ü˜˜d¡F¨5£MÔ2Øà ˜vÐ%5Ð6ˆCÜ˜S“/Ð!ð'	"ð* ˆr   c                 ó  — ddl m} |j                  «       D ]Ý  \  }}|| j                  v r@t	        |t
        «      sd|› d�}t        |«      ‚| j                  |   j                  |«       ŒT|| j                  v rlt        | |«      }t	        ||«      rF|j                  |k7  r7d|› d|j                  › d|› d�}t        j                  |«       |j                  }t        | ||«       ŒÎd	|› d
�}t        |«      ‚ | j                  «        | S )zøRecursively instantiate all pipelines

        Parameters
        ----------
        params : `dict`
            Nested dictionary of parameters.

        Returns
        -------
        self : `Pipeline`
            Instantiated pipeline.
        r
   rH   rf   z7' pipeline can be instantiated (not the whole pipeline)zParameter 'z%' is frozen: using its frozen value (z) instead of the one provided (z).rg   rh   )r=   rI   r"   r   r?   rM   rL   Úinstantiater   ÚgetattrrB   ÚwarningsÚwarnrj   rd   )r   rO   rI   r3   rB   r4   rb   s          r   rl   zPipeline.instantiate�  s   € õ 	&à!Ÿ<™<›>ò 	"‰KˆD�%ð �t—‘Ñ&Ü! %¬Ô.à.¨t¨fð 5Cð Dð ô % S›/Ð)Ø—‘ Ñ%×1Ñ1°%Ô8Øð �t×'Ñ'Ñ'Ü  dÓ+�ä˜e VÔ,°·±ÀÒ1Eà% d Vð ,Ø!ŸK™K˜=Ð(GÈÀwÈbðRð ô —M‘M #Ô&Ø!ŸK™K�EÜ˜˜d EÔ*Øà ˜vÐ%5Ð6ˆCÜ˜S“/Ð!ð9	"ð< 	�‰Ôàˆr   c                 ó°   — t        | j                  | j                  «       «      «      }t        | j                  | j                  d¬«      «      «      }||k(  S )zEWhether pipeline has been instantiated (and therefore can be applied)T©rE   )Úsetr+   r'   )r   r'   rE   s      r   rE   zPipeline.instantiatedÂ  sG   € ô ˜Ÿ™ t§¡Ó'8Ó9Ó:ˆ
Ü˜4Ÿ=™=¨¯©Àd¨Ó)KÓLÓMˆØ˜\Ñ)Ð)r   Ú
params_ymlÚlossc                 ó8  — |€| j                  d¬«      }d|i}|�||d<   t        j                  |d¬«      }t        |j	                  d«      «      5  t        |d	¬
«      5 }|j                  |«       ddd«       ddd«       |S # 1 sw Y   ŒxY w# 1 sw Y   |S xY w)a®  Dump parameters to disk

        Parameters
        ----------
        params_yml : `Path`
            Path to YAML file.
        params : `dict`, optional
            Nested Parameters. Defaults to pipeline current parameters.
        loss : `float`, optional
            Loss value. Defaults to not write loss to file.

        Returns
        -------
        content : `str`
            Content written in `param_yml`.
        NTrq   rO   rt   F)Údefault_flow_stylez.lockÚw©Úmode)r'   ÚyamlÚdumpr   Úwith_suffixÚopenÚwrite)r   rs   rO   rt   ÚcontentÚcontent_ymlÚfps          r   Údump_paramszPipeline.dump_paramsÉ  s¦   € ð. ˆ>Ø—_‘_°$�_Ó7ˆFà˜VÐ$ˆØÐØ"ˆG�F‰Oô —i‘i ¸EÔBˆô �j×,Ñ,¨WÓ5Ó6ñ 	&Ü�j sÔ+ð &¨rØ—‘˜Ô%÷&÷	&ð Ð÷&ð &ú÷	&ð Ðús$   ÁBÁBÁ1BÂB	ÂBÂBc                 ó¸   — t        |d¬«      5 }t        j                  |t        j                  ¬«      }ddd«       | j	                  d   «      S # 1 sw Y   ŒxY w)z÷Instantiate pipeline using parameters from disk

        Parameters
        ----------
        param_yml : `Path`
            Path to YAML file.

        Returns
        -------
        self : `Pipeline`
            Instantiated pipeline

        Úrrx   )ÚLoaderNrO   )r}   rz   ÚloadÚ
SafeLoaderrl   )r   rs   r�   rO   s       r   Úload_paramszPipeline.load_paramsñ  sO   € ô �* 3Ô'ð 	;¨2Ü—Y‘Y˜r¬$¯/©/Ô:ˆF÷	;à×Ñ  xÑ 0Ó1Ð1÷	;ð 	;ús   Ž&AÁAÚinputc                 ó   — t         ‚)z-Apply pipeline on input and return its output©ÚNotImplementedError)r   r‰   s     r   Ú__call__zPipeline.__call__  s   € ä!Ð!r   c                 ó   — t        «       ‚)a  Return new metric (from pyannote.metrics)

        When this method is implemented, the returned metric is used as a
        replacement for the loss method below.

        Returns
        -------
        metric : `pyannote.metrics.base.BaseMetric`
        r‹   r   s    r   Ú
get_metriczPipeline.get_metric  s   € ô "Ó#Ð#r   c                  ó   — y)NÚminimizer9   r   s    r   Úget_directionzPipeline.get_direction  s   € Ør   Úoutputc                 ó   — t        «       ‚)a  Compute loss for given input/output pair

        Parameters
        ----------
        input : object
            Pipeline input.
        output : object
            Pipeline output

        Returns
        -------
        loss : `float`
            Loss value
        r‹   )r   r‰   r“   s      r   rt   zPipeline.loss  s   € ô "Ó#Ð#r   c                  ó   — y)NÚrttmr9   r   s    r   Úwrite_formatzPipeline.write_format(  s   € àr   Úfilec                 óB   —  t        | d| j                  › �«      ||«      S )zœWrite pipeline output to file

        Parameters
        ----------
        file : file object
        output : object
            Pipeline output
        Úwrite_)rm   r—   )r   r˜   r“   s      r   r~   zPipeline.write,  s(   € ð ;Œw�t˜v d×&7Ñ&7Ð%8Ð9Ó:¸4ÀÓHÐHr   c           
      óh  — t        |t        «      r|j                  d¬«      }t        |t        «      r\|j	                  d¬«      D ]F  \  }}}d|j
                  › d|j                  d›d|j                  d›d	|› d
�	}|j                  |«       ŒH yd|j                  j                  › d�}t        |«      ‚)zÓWrite pipeline output to "rttm" file

        Parameters
        ----------
        file : file object
        output : `pyannote.core.Timeline` or `pyannote.core.Annotation`
            Pipeline output
        Ústring)Ú	generatorT©Úyield_labelzSPEAKER z 1 ú.3fú z <NA> <NA> z <NA> <NA>
NúDumping z, instances to "rttm" files is not supported.)r?   r   Úto_annotationr   Ú
itertracksÚuriÚstartÚdurationr~   Ú	__class__r1   rŒ   )r   r˜   r“   ÚsÚtÚlÚliner4   s           r   Ú
write_rttmzPipeline.write_rttm8  sÎ   € ô �fœhÔ'Ø×)Ñ)°HÐ)Ó=ˆFä�fœjÔ)Ø!×,Ñ,¸Ð,Ó>ò !‘��1�aà˜vŸz™z˜l¨#¨a¯g©g°c¨]¸!¸A¿J¹JÀsÐ;Kð L!Ø!"  <ð1ð ð —
‘
˜4Õ ð!ð ð �v×'Ñ'×0Ñ0Ð1ð 2 ð !ð 	ô " #Ó&Ð&r   c                 óÐ  — t        |t        «      rD|D ]>  }|j                  › d|j                  d›d|j                  d›d�}|j                  |«       Œ@ yt        |t        «      r^|j                  d¬«      D ]H  \  }}}|j                  › d|j                  d›d|j                  d›d|› d|› d�
}|j                  |«       ŒJ yd|j                  j                  › d�}t        |«      ‚)	zÒWrite pipeline output to "txt" file

        Parameters
        ----------
        file : file object
        output : `pyannote.core.Timeline` or `pyannote.core.Annotation`
            Pipeline output
        r¡   r    ú
NTrž   r¢   z+ instances to "txt" files is not supported.)r?   r   r¥   r¦   Úendr~   r   r¤   r¨   r1   rŒ   )r   r˜   r“   r©   r¬   rª   r«   r4   s           r   Ú	write_txtzPipeline.write_txtT  sú   € ô �fœhÔ'Øò !�Ø Ÿ*™*˜ Q q§w¡w¨s m°1°Q·U±U¸3°K¸rÐB�Ø—
‘
˜4Õ ð!ð ä�fœjÔ)Ø!×,Ñ,¸Ð,Ó>ò !‘��1�aØ Ÿ*™*˜ Q q§w¡w¨s m°1°Q·U±U¸3°K¸qÀÀÀ1ÀQÀCÀrÐJ�Ø—
‘
˜4Õ ð!ð ð �v×'Ñ'×0Ñ0Ð1ð 2 ð !ð 	ô " #Ó&Ð&r   )FF)NFF)NN)rF   z pyannote.metrics.base.BaseMetric),r1   Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr,   r5   rA   rD   r   ÚboolrM   rN   r+   r]   r   r'   rd   ri   rl   rE   r   ÚfloatÚstrr‚   rˆ   r   r   r�   r�   r   r’   rt   r—   r   r~   r   r   r   r­   r±   r9   r   r   r   r   -   s  „ Ùòð ñó ðð ‡_�_ñ)ó ð)òBò
"ò0/.òb+ð NSñ-Ø˜t‘nð-Ø<DÀT¹Nð-à	ó-ð^$  dð $ ¨tó $ ðL6¨4ð 6°Dó 6ðt "&Ø!&Ø',ñ	/'à˜‰ð/'ð ˜‘ð/'ð ˜t‘nð	/'ð
 
ó/'òbð&˜Tð & jó &ðP1 $ð 1¨:ó 1ðf ñ*ó ð*ð "&Ø $ñ	&àð&ð ˜‘ð&ð �u‰oð	&ð
 
ó&ðP2 dð 2¨zó 2ð&"˜mð "°ó "ó
$ð˜yó ð$˜-ð $°ð $ÀEó $ð" ñó ðð
I˜&ð 
I¨.ó 
Ið'˜vð '¨u°X¸zÐ5IÑ/Jó 'ð8'˜fð '¨e°H¸jÐ4HÑ.Iô 'r   r   )Útypingr   r   r   r   r   Úpathlibr   Úcollectionsr	   r   r   r   Úfilelockr   rz   rn   Úpyannote.corer   r   Úoptuna.trialr   r   r9   r   r   ú<module>rÀ      s:   ð÷: 6Õ 5å Ý #Ý !Ý "Ý Ý Û Û å "Ý $Ý ÷A	'ò A	'r   