§
    	Êj	  ã                   óx   — d dl Zd dlmc mZ d dlZd dlmZ d dl	m
Z
mZmZ d dlmZ d„ Zd„ Zd„ Zd„ Zd	„ Zd
„ ZdS )é    N)Úresolve_model)Úflatten_messagesÚfollowup_textÚmessage_turns)ÚInvalidRequestc                  ó  — dddœg} t          | ¦  «        }|j        }d}||k    }|sÚt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        | ¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j	        |¦  «        ¦  «        ‚d x} x}x}x}}d S )
NÚuserÚhi©ÚroleÚcontent©ú==)zJ%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}.text
} == %(py9)sr   )Úpy0Úpy2Úpy4Úpy6Úpy9zassert %(py11)sÚpy11)
r   ÚtextÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12s          ú'C:\Projects\Muse2API\tests\test_core.pyÚ!test_single_user_message_verbatimr'      s5  € Ø&,¸Ð>Ð>Ð?ÐMÕÐ?Ñ@Ô@ÐMÐ@ÔEÐMÈÐMÐEÈÒMÐMÐMÐMÕMÔMÐMÐMÐMÐMÐEÈÐMÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔMÕÑMÔMÐMÕMÔMÕÑMÔMÐMÐMÕMÔMÐ?ÑMÔMÕMÔMÐ@ÑMÔMÕMÔMÐEÑMÔMÕMÔMÈÑMÔMÐMÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMó    c                  óÈ  — t          dddœddddœdd	d
idœgdœg¦  «        } d}| j        }||v }|sªt          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d}| j        }||v }|sªt          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}| j
        }d
g}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d S )NÚsystemzbe briefr   r	   r   zwhat is this)Útyper   Ú	image_urlÚurlzdata:image/png;base64,AAAA)r+   r,   z[System]
be brief)Úin)z,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.text
}Úflat)Úpy1Úpy3Úpy5zassert %(py7)sÚpy7z[User]
what is thisr   )z.%(py2)s
{%(py2)s = %(py0)s.images
} == %(py5)s)r   r   r2   )r   r   r   r   r   r   r   r   r   r   Úimages)r/   Ú@py_assert0Ú@py_assert4Ú@py_assert2Ú@py_format6Ú@py_format8r   r    s           r&   Ú$test_multi_turn_has_roles_and_imagesr:      sû  € ÝØ jÐ1Ð1ØØ ^Ð4Ð4Ø °Ð7SÐ/TÐUÐUð%
ð 	ð 	ðñ ô €Dð  Ð, 4¤9Ð,Ð 9Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð 9Ð,Ñ,Ô,Õ,Ô,ÐÑ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, 4Ñ,Ô,Ð,Õ,Ô, 4Ñ,Ô,Ð,Ð,Õ,Ô, 9Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø!Ð. T¤YÐ.Ð! YÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Õ.Ô.Ð!Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. TÑ.Ô.Ð.Õ.Ô. TÑ.Ô.Ð.Ð.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØŒ;Ð8Ð7Ð8Ð8ˆ;Ð8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8ˆ;Ð8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆ4Ñ8Ô8Ð8Õ8Ô8ˆ4Ñ8Ô8Ð8Ð8Õ8Ô8ˆ;Ñ8Ô8Õ8Ô8Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8r(   c                  ó  — t          dddœg¦  «        } t          dddœdddœdddœg¦  «        }t          | |¦  «        }d}||k    }|�s0t          j        d|fd||f¦  «        d	t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	d
t	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd
dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d S )Nr	   r
   r   Ú	assistantÚhelloÚagainr   )z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} == %(py7)sr   ÚfirstÚsecond©r   r0   r   r   r3   úassert %(py9)sr   ©
r   r   r   r   r   r   r   r   r   r   )r?   r@   r    Ú@py_assert6r!   r9   r$   s          r&   Ú&test_followup_sends_only_new_user_textrE      s³  € Ý F°tÐ<Ð<Ð=Ñ>Ô>€EÝØ DÐ)Ð)Ø¨Ð1Ð1Ø GÐ,Ð,ðñ ô €Fõ
 ˜ Ñ'Ô'Ð2¨7Ð2Ð'¨7Ò2Ð2Ð2Ñ2Õ2Ô2Ð2Ð2Ð2Ð2Ð'¨7Ð2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2�=Ñ2Ô2Ð2Õ2Ô2�=Ñ2Ô2Ð2Ð2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2˜Ñ2Ô2Ð2Õ2Ô2˜Ñ2Ô2Ð2Ð2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2 Ñ2Ô2Ð2Õ2Ô2 Ñ2Ô2Ð2Ð2Õ2Ô2Ð'Ñ2Ô2Õ2Ô2¨7Ñ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2r(   c                  ób  — t          dddœg¦  «        } t          dddœg¦  «        }t          dddœdddœdddœg¦  «        }t          | |¦  «        }d }||u }|�s0t          j        d	|fd
||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}t          | |¦  «        }d }||u }|�s0t          j        d	|fd
||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}t          | | ¦  «        }d }||u }|�s0t          j        d	|fd
||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d S )Nr	   r
   r   za different chatz
hi, editedr<   r=   r>   )Úis)z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} is %(py7)sr   r?   ÚotherrA   rB   r   ÚeditedrC   )r?   rH   rI   r    rD   r!   r9   r$   s           r&   Ú)test_followup_rejects_a_different_historyrJ   #   s„  € Ý F°tÐ<Ð<Ð=Ñ>Ô>€EÝ FÐ7IÐJÐJÐKÑLÔL€EÝØ LÐ1Ð1Ø¨Ð1Ð1Ø GÐ,Ð,ðñ ô €Fõ
 ˜ Ñ&Ô&Ð.¨$Ð.Ð&¨$Ð.Ð.Ð.Ñ.Õ.Ô.Ð.Ð.Ð.Ð.Ð&¨$Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.�=Ñ.Ô.Ð.Õ.Ô.�=Ñ.Ô.Ð.Ð.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.˜Ñ.Ô.Ð.Õ.Ô.˜Ñ.Ô.Ð.Ð.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. Ñ.Ô.Ð.Õ.Ô. Ñ.Ô.Ð.Ð.Õ.Ô.Ð&Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ý˜ Ñ'Ô'Ð/¨4Ð/Ð'¨4Ð/Ð/Ð/Ñ/Õ/Ô/Ð/Ð/Ð/Ð/Ð'¨4Ð/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�=Ñ/Ô/Ð/Õ/Ô/�=Ñ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/˜Ñ/Ô/Ð/Õ/Ô/˜Ñ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ Ñ/Ô/Ð/Õ/Ô/ Ñ/Ô/Ð/Ð/Õ/Ô/Ð'Ñ/Ô/Õ/Ô/¨4Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ý˜ Ñ&Ô&Ð.¨$Ð.Ð&¨$Ð.Ð.Ð.Ñ.Õ.Ô.Ð.Ð.Ð.Ð.Ð&¨$Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.�=Ñ.Ô.Ð.Õ.Ô.�=Ñ.Ô.Ð.Ð.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.˜Ñ.Ô.Ð.Õ.Ô.˜Ñ.Ô.Ð.Ð.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. Ñ.Ô.Ð.Õ.Ô. Ñ.Ô.Ð.Ð.Õ.Ô.Ð&Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.r(   c                  ó   — ddl m}  d} | |¦  «        }|s‹ddt          j        ¦   «         v st	          j        | ¦  «        rt	          j        | ¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚d x}}d} | |¦  «        }| }|s‹ddt          j        ¦   «         v st	          j        | ¦  «        rt	          j        | ¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}}d	} | |¦  «        }| }|s‹ddt          j        ¦   «         v st	          j        | ¦  «        rt	          j        | ¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}}d
} | |¦  «        }| }|s‹ddt          j        ¦   «         v st	          j        | ¦  «        rt	          j        | ¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}}d S )Nr   )Úis_thread_urlzhttps://muse.ai/thread/abcz,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}rL   )r   r   r   zhttps://muse.ai/thread/newz0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}zhttps://muse.ai/thread/new/zhttps://muse.ai/)	Úmuse2api.drivers.browser.driverrL   r   r   r   r   r   r   r   )rL   r   r    Ú@py_format5r!   r8   s         r&   Ú+test_thread_url_ignores_the_new_thread_pagerO   0   sï  € Ø=Ð=Ð=Ð=Ð=Ð=à5Ð6ˆ=ˆ=Ð5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆ=Ñ6Ô6Ð6Õ6Ô6ˆ=Ñ6Ô6Ð6Ð6Õ6Ô6Ð5Ñ6Ô6Õ6Ô6Ð6Ñ6Ô6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ø9Ð:ˆ}ˆ}Ð9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:ˆ}Ñ:Ô:Ð:Õ:Ô:ˆ}Ñ:Ô:Ð:Ð:Õ:Ô:Ð9Ñ:Ô:Õ:Ô:Ð:Ñ:Ô:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø:Ð;ˆ}ˆ}Ð:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ˆ}Ñ;Ô;Ð;Õ;Ô;ˆ}Ñ;Ô;Ð;Ð;Õ;Ô;Ð:Ñ;Ô;Õ;Ô;Ð;Ñ;Ô;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø/Ð0ˆ}ˆ}Ð/Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆ}Ñ0Ô0Ð0Õ0Ô0ˆ}Ñ0Ô0Ð0Ð0Õ0Ô0Ð/Ñ0Ô0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0r(   c            	      ó>  — d} d}t          | |¦  «        }|j        }d}||k    }|sít          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        | ¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j	        |¦  «        ¦  «        ‚d x} x}x}x}x}}d
} d}t          | |¦  «        }|j        }d}||k    }|sít          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        | ¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j	        |¦  «        ¦  «        ‚d x} x}x}x}x}}d } d}t          | |¦  «        }|j        }d}||k    }|sít          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        | ¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j	        |¦  «        ¦  «        ‚d x} x}x}x}x}}t          j        t          ¦  «        5  t          dd¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nzgpt-4oÚchatz	muse-chatr   )zR%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
}.id
} == %(py11)sr   )r   r   r   r   Úpy8r   zassert %(py13)sÚpy13ÚunknownÚimagez
muse-imageÚvideoz
muse-video)r   Úidr   r   r   r   r   r   r   r   ÚpytestÚraisesr   )r   r    r!   r#   Ú@py_assert10Ú@py_assert9r%   Ú@py_format14s           r&   Útest_resolve_modelr]   9   s.  € Ø!Ð< 6Ð<�=˜ 6Ñ*Ô*Ð<Ð*Ô-Ð<°Ð<Ð-°Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð-°Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<�=Ñ<Ô<Ð<Õ<Ô<�=Ñ<Ô<Ð<Ð<Õ<Ô<˜Ñ<Ô<Õ<Ô< 6Ñ<Ô<Õ<Ô<Ð*Ñ<Ô<Õ<Ô<Ð-Ñ<Ô<Õ<Ô<°Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø"Ð? GÐ?�=˜ GÑ,Ô,Ð?Ð,Ô/Ð?°<Ð?Ð/°<Ò?Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?Ð/°<Ð?Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?�=Ñ?Ô?Ð?Õ?Ô?�=Ñ?Ô?Ð?Ð?Õ?Ô?˜Ñ?Ô?Õ?Ô? GÑ?Ô?Õ?Ô?Ð,Ñ?Ô?Õ?Ô?Ð/Ñ?Ô?Õ?Ô?°<Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ØÐ:˜wÐ:�=˜˜wÑ'Ô'Ð:Ð'Ô*Ð:¨lÐ:Ð*¨lÒ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð*¨lÐ:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:�=Ñ:Ô:Ð:Õ:Ô:�=Ñ:Ô:Ð:Ð:Õ:Ô:˜Ñ:Ô:Õ:Ô:˜wÑ:Ô:Õ:Ô:Ð'Ñ:Ô:Õ:Ô:Ð*Ñ:Ô:Õ:Ô:¨lÑ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ý	Œ•~Ñ	&Ô	&ð ,ð ,Ý�l FÑ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,s   Í4NÎNÎN)Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   rX   Úmuse2api.core.modelsr   Úmuse2api.core.promptr   r   r   Úmuse2api.errorsr   r'   r:   rE   rJ   rO   r]   © r(   r&   ú<module>rf      sÑ   ðØ  € € € € € € € € € € € € €€€€à .Ð .Ð .Ð .Ð .Ð .Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ *Ð *Ð *Ð *Ð *Ð *ðNð Nð Nð
9ð 
9ð 
9ð3ð 3ð 3ð
/ð 
/ð 
/ð1ð 1ð 1ð,ð ,ð ,ð ,ð ,r(   