Ë
    ³Œj¯7  ã                   óº  — d Z 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ZddlmZ ddlmZ ddlmZ  ej*                  e«      Zd	„ Zd
„ Zej4                  j7                  d«      rd„ Znd„ Z ej<                  d¬«      d„ «       Zej<                  d„ «       Z  G d„ d«      Z!d„ Z"de#de$de#fd„Z%de#de$de#fd„Z&de'de'de(e#   de'fd„Z)dede#fd „Z*y)!zLangSmith Pytest hooks.é    N)Údefaultdict)ÚLock)ÚAny)Úutils)Ú_get_test_suite_name)Útestc                 óœ   — 	 | j                  dd«      }|j                  dddd¬«       y	# t        $ r t        j	                  d«       Y y	w xY w)
zaSet a boolean flag for LangSmith output.

    Skip if --langsmith-output is already defined.
    Ú	langsmithÚ	LangSmithú--langsmith-outputÚ
store_trueFz'Use LangSmith output (requires 'rich').)ÚactionÚdefaultÚhelpzCLangSmith output flag cannot be added because it's already defined.N)ÚgetgroupÚ	addoptionÚ
ValueErrorÚloggerÚwarning)ÚparserÚgroups     úa/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langsmith/pytest_plugin.pyÚpytest_addoptionr      sT   € ð

à—‘ ¨[Ó9ˆØ�‰Ø ØØØ:ð	 	õ 	
øô ò 
ä�‰ØQö	
ð
ús   ‚'* ªAÁ
Ac                 óÊ   ‡ — t        ˆ fd„dD «       «      rNt        ˆ fd„dD «       «      s‰ j                  dd«       t        ˆ fd„dD «       «      s‰ j                  dd	«       y
y
y
)zHandle output arguments.c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© )Ú.0ÚoptÚargss     €r   Ú	<genexpr>z&_handle_output_args.<locals>.<genexpr>,   s   øè ø€ Ð
9Ñ"8˜3ˆ3�$Œ;Ñ"8ùó   ƒ)r   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r   ©r   Úar    s     €r   r!   z&_handle_output_args.<locals>.<genexpr>.   s   øè ø€ Ð.¡g �1˜”9¡gùr"   )ú-qqr   r&   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r   r$   s     €r   r!   z&_handle_output_args.<locals>.<genexpr>1   s   øè ø€ Ð=Ñ&< �1˜”9Ñ&<ùr"   )ú-sz--capture=nor(   N)ÚanyÚinsert©r    s   `r   Ú_handle_output_argsr,   *   sU   ø€ ä
Ó
9Ñ"8Ó
9Ô9äÓ.¡gÓ.Ô.Ø�K‰K˜˜5Ô!äÓ=Ñ&<Ó=Ô=Ø�K‰K˜˜4Õ ð >ð :ó    z7.c                 ó   — t        |«       y)zCCall immediately after command line options are parsed (pytest v7).N©r,   )Úconfigr    s     r   Úpytest_cmdline_preparser1   7   ó
   € ä˜DÕ!r-   c                 ó   — t        | «       y)zHandle args in pytest v8+.Nr/   r+   s    r   Úpytest_load_initial_conftestsr4   =   r2   r-   T)Úhookwrapperc              #   ó�  K  — | j                  d«      }|�r|r|j                  ni }t        | dd«      }d|vr|�	 |j                  d«      }|�i |¥d|i¥}| j                  } t        d	i |¤Ž|«      | _        |�d| j                  vr|| j                  d<   |��d| j                  j                  vrw t        | j                  «      | j                  j                  dz   | j                  j                  | j                  j                  | j                  j                  ¬«      | _	        d–— y# t        j
                  $ r Y Œìw xY w­w)
zEApply LangSmith tracking to tests marked with @pytest.mark.langsmith.r
   Ú_requestNÚexperiment_metadataÚlangsmith_experiment_metadataÚrequest)r:   )ÚargnamesÚinitialnamesÚnames_closureÚname2fixturedefsr   )Úget_closest_markerÚkwargsÚgetattrÚgetfixturevalueÚpytestÚFixtureLookupErrorÚobjÚls_testÚfuncargsÚ_fixtureinfor;   Útyper<   r=   r>   )ÚitemÚmarkerr@   Úrequest_objr8   Úoriginal_funcs         r   Úpytest_runtest_callrN   B   sM  è ø€ ð ×$Ñ$ [Ó1€FÚñ #)�—’¨bˆô ˜d J°Ó5ˆØ ¨Ñ.°;Ð3JðØ&1×&AÑ&AØ3ó'Ð#ð 'Ð2ØS ÐSÐ(=Ð?RÑS�Fð Ÿ™ˆØ$”7Ñ$˜VÑ$ ]Ó3ˆŒØÐ" y¸¿¹Ñ'EØ'2ˆD�M‰M˜)Ñ$ØÐ" y¸×8IÑ8I×8RÑ8RÑ'Rà 7¤ T×%6Ñ%6Ó 7Ø×*Ñ*×3Ñ3°lÑBØ!×.Ñ.×;Ñ;Ø"×/Ñ/×=Ñ=Ø!%×!2Ñ!2×!CÑ!Cô	!ˆDÔô 
øô ×,Ñ,ò Ùðüs)   ‚8E»D- ÁCEÄ-EÅ EÅEÅEc                 ó(   — |j                  d«      ryy)z7Remove the short test-status character outputs ("./F").r   )Ú rP   rP   N)Ú	getoption)Úreportr0   s     r   Úpytest_report_teststatusrS   f   s   € ð
 ×ÑÐ,Ô-Øð .r-   c                   óR   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	efd
„Zd„ Zd„ Zy)ÚLangSmithPluginz'Plugin for rendering LangSmith results.c                 ó‚  — ddl m} ddlm} t	        t
        «      | _        i | _        t        «       | _	        i | _
        t        «       | _         |«       | _         || j                  «       | j                  d¬«      | _        | j                  j!                  «        | j                  j                  j#                  d«       y)zInitialize.r   )ÚConsole)ÚLiveé
   )ÚconsoleÚrefresh_per_secondzCollecting tests...N)Úrich.consolerW   Ú	rich.liverX   r   ÚlistÚtest_suitesÚtest_suite_urlsÚsetÚlangsmith_nodeidsÚprocess_statusr   Ústatus_lockrZ   Úgenerate_tablesÚliveÚstartÚprint)ÚselfrW   rX   s      r   Ú__init__zLangSmithPlugin.__init__r   s‹   € å(Ý"ä&¤tÓ,ˆÔØ!ˆÔÜ!$£ˆÔà ˆÔÜ›6ˆÔÙ“yˆŒáØ× Ñ Ó"¨D¯L©LÈRô
ˆŒ	ð 	�	‰	�‰ÔØ�	‰	×Ñ×ÑÐ 5Õ6r-   c                 óº  — t        «       | _        t        «       | _        |j                  D ]®  }| j                  j	                  |j
                  «       |j                  d«      }|sŒ<| j                  j	                  |j
                  «       |j                  j                  d«      xs t        |j                  «      }| j                  ||j
                  «       Œ° y)z)Group collected LangSmith tests by suite.r
   Útest_suite_nameN)ra   Úcollected_nodeidsrb   ÚitemsÚaddÚnodeidr?   r@   Úgetr   rE   Úadd_process_to_test_suite)ri   ÚsessionrJ   rK   Ú
test_suites        r   Úpytest_collection_finishz(LangSmithPlugin.pytest_collection_finish…   s¦   € ä!$£ˆÔÜ!$£ˆÔØ—M”MˆDØ×"Ñ"×&Ñ& t§{¡{Ô3Ø×,Ñ,¨[Ó9ˆFÚØ×&Ñ&×*Ñ*¨4¯;©;Ô7Ø#Ÿ]™]×.Ñ.Ð/@ÓAò Ü(¨¯©Ó2ð ð ×.Ñ.¨z¸4¿;¹;ÕGñ "r-   c                 ód   — || j                   |   vr| j                   |   j                  |«       yy)z&Group a test case with its test suite.N)r_   Úappend)ri   rt   Ú
process_ids      r   rr   z)LangSmithPlugin.add_process_to_test_suite“   s3   € à˜T×-Ñ-¨jÑ9Ñ9Ø×Ñ˜ZÑ(×/Ñ/°
Õ;ð :r-   c                 ól  — | j                   s%| j                  j                  j                  d«       | j                  5  | j                   j                  |i «      }t        ||g d¢¬«      | j                   |<   ddd«       | j                  j                  | j                  «       «       y# 1 sw Y   Œ3xY w)zUpdate test results.zRunning tests...)ÚfeedbackÚinputsÚreference_outputsÚoutputs)ÚunpackN)	rc   rf   rZ   rh   rd   rq   Ú_merge_statusesÚupdatere   )ri   rx   ÚstatusÚcurrent_statuss       r   Úupdate_process_statusz%LangSmithPlugin.update_process_status˜   s�   € ð ×"Ò"Ø�I‰I×Ñ×#Ñ#Ð$6Ô7à×ÓØ!×0Ñ0×4Ñ4°ZÀÓDˆNÜ.=ØØÚMô/ˆD×Ñ 
Ñ+÷ ð 	�	‰	×Ñ˜×-Ñ-Ó/Õ0÷ Ðús   ¾:B*Â*B3c                 ó,   — | j                  |ddi«       y)z/Initialize live display when first test starts.r�   ÚrunningN)rƒ   )ri   rp   s     r   Úpytest_runtest_logstartz'LangSmithPlugin.pytest_runtest_logstart§   s   € à×"Ñ" 6¨H°iÐ+@ÕAr-   c                 óä   — |j                   | j                  v rX|j                  dk(  rH|j                  s|j                  r/|j                  rdnd}| j                  |j                   d|i«       yyyy)z3Track setup failures and skips for LangSmith tests.ÚsetupÚfailedÚskippedr�   N)rp   rb   Úwhenr‰   rŠ   rƒ   )ri   rR   r�   s      r   Úpytest_runtest_logreportz(LangSmithPlugin.pytest_runtest_logreport«   sd   € ð �M‰M˜T×3Ñ3Ñ3Ø—‘˜wÒ&Ø—’ &§.¢.à!'§¢‘X°IˆFØ×&Ñ& v§}¡}°xÀÐ6HÕIð #1ð 'ð 4r-   c                 ó†   — ddl m} g }| j                  D ]$  }| j                  |«      }|j	                  |«       Œ&  ||Ž }|S )uŽ   Generate a collection of tablesâ€”one per suite.

        Returns a 'Group' object so it can be rendered simultaneously by Rich Live.
        r   )ÚGroup)r\   rŽ   r_   Ú_generate_tablerw   )ri   rŽ   ÚtablesÚ
suite_nameÚtabler   s         r   re   zLangSmithPlugin.generate_tablesµ   sH   € õ
 	'àˆØ×*Ô*ˆJØ×(Ñ(¨Ó4ˆEØ�M‰M˜%Õ ð +ñ �v�ˆØˆr-   r‘   c                 óÔ  ‡— ddl m} | j                  |   }d|› d| j                  j	                  |d«      › d�} ||d¬«      }|j                  d	«       |j                  d
«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       t        d«      }t        d«      }t        j                  «       }g }	t        t        «      }
|D �ci c]  }|| j                  j	                  |i «      “Œ! }}|j                  «       D ]Ñ  \  }}|j	                  d|«      |j	                  d|«      z
  }|	j                  |«       |j	                  di «      j                  «       D ]5  \  }}t        |t        t        t         f«      sŒ"|
|   j                  |«       Œ7 t#        t        |d›d�«      |«      }t#        t        |j	                  dd«      «      |«      }ŒÓ t%        d„ |j'                  «       D «       «      }|r%|t        |«      z  }|dk(  rdnd}d|› d|d›d|› d�}nd }|	rt%        |	«      t        |	«      z  d›d�}nd!}|
r'd"j)                  d#„ |
j                  «       D «       «      }nd}t#        |t        |«      «      }| j*                  j,                  ||z   z
  d$z  Št#        ‰d%«      Š|j                  «       D �]I  \  }}d&ddd'd(œj	                  |j	                  dd«      d)«      }|j	                  d|«      |j	                  d|«      z
  }d"j)                  ˆfd*„|j	                  di «      j                  «       D «       «      }t/        |j	                  d+i «      «      }t/        |j	                  d,i «      «      }t/        |j	                  d-i «      «      }|j1                  t3        t5        |«      ‰¬.«      t7        |‰¬.«      t7        |‰¬.«      t7        |‰¬.«      ‰ d/ d|› d|j	                  dd«      › d|› d�||d›d�«       �ŒL |j1                  d0d0d0d0d0d0d0«       |j1                  d1d0d0d0|||«       |S c c}w )2zGenerate results table.r   )ÚTablezTest Suite: [bold]z$[/bold]
LangSmith URL: [bright_cyan]z--z[/bright_cyan]Úleft)ÚtitleÚtitle_justifyÚTestÚInputszRef outputsÚOutputsÚStatusÚFeedbackÚDurationr�   ÚdurationÚend_timeÚ
start_timerz   z.2fÚsÚqueuedc              3   óD   K  — | ]  }|j                  d «      dk(  –— Œ y­w)r�   ÚpassedN)rq   )r   r¡   s     r   r!   z2LangSmithPlugin._generate_table.<locals>.<genexpr>å   s    è ø€ ÐXÑ@W¸1˜1Ÿ5™5 ›?¨hÕ6Ñ@Wùs   ‚ é   ÚgreenÚredÚ[Ú]z.0%z[/z
Passed: --z--sÚ
c              3   óZ   K  — | ]#  \  }}|› d t        |«      t        |«      z  › �–— Œ% y­w)ú: N)ÚsumÚlen)r   ÚkÚvs      r   r!   z2LangSmithPlugin._generate_table.<locals>.<genexpr>ñ   s1   è ø€ ð +Ù6O©d¨a°�1�#�Rœ˜A›¤ Q£™Ð(Ô)Ñ6Oùs   ‚)+é   é   ÚyellowÚcyan)r…   r¤   r‰   rŠ   Úwhitec              3   ó~   •K  — | ]4  \  }}t        |‰¬ «      › dt        |t        «      rt        |«      n|› �–— Œ6 y­w)©Úmax_lenr¬   N)Ú_abbreviateÚ
isinstanceÚboolÚint)r   r¯   r°   Úmax_dynamic_col_widths      €r   r!   z2LangSmithPlugin._generate_table.<locals>.<genexpr>  sD   øè ø€ ð !á>‘D�A�qô ˜qÐ*?Ô@ÐAÀÌjÐYZÔ\`ÔNaÄCÈÄFÐghÐCiÔjÙ>ùs   ƒ:=r{   r|   r}   r·   NrP   z[bold]Averages[/bold])Ú
rich.tabler”   r_   r`   rq   Ú
add_columnr®   Útimer   r^   rc   rn   rw   rº   Úfloatr¼   r»   Úmaxr­   ÚvaluesÚjoinrZ   ÚwidthÚ_dumps_with_fallbackÚadd_rowÚ_abbreviate_test_nameÚstrr¹   )ri   r‘   r”   Úprocess_idsr–   r’   Ú
max_statusÚmax_durationÚnowÚ	durationsÚnumeric_feedbacksÚpidÚsuite_statusesr�   rž   r¯   r°   Úpassed_countÚrateÚcolorÚaggregate_statusÚaggregate_durationÚaggregate_feedbackÚstatus_colorrz   r{   r|   r}   r½   s                               @r   r�   zLangSmithPlugin._generate_tableÃ   sm  ø€ å$à×&Ñ& zÑ2ˆà& z lð 3Ø!×1Ñ1×5Ñ5°jÀ$ÓGÐHÈðZˆá˜E°Ô8ˆØ×Ñ˜Ô Ø×Ñ˜Ô"Ø×Ñ˜Ô'Ø×Ñ˜Ô#Ø×Ñ˜Ô"Ø×Ñ˜Ô$Ø×Ñ˜Ô$ô ˜“]ˆ
Ü˜:“ˆÜ�i‰i‹kˆØˆ	Ü'¬Ó-ÐáKVÓWÉ;ÀC˜#˜t×2Ñ2×6Ñ6°s¸BÓ?Ñ?È;ˆÐWØ)×/Ñ/Ö1‰KˆC�Ø—z‘z *¨cÓ2°V·Z±ZÀÈcÓ5RÑRˆHØ×Ñ˜XÔ&ØŸ
™
 :¨rÓ2×8Ñ8Ö:‘��1Ü˜a¤%¬¬dÐ!3Õ4Ø% aÑ(×/Ñ/°Õ2ð ;ô œs h¨s ^°1Ð#5Ó6¸ÓEˆLÜœS §¡¨H°hÓ!?Ó@À*ÓM‰Jð 2ô ÑXÀ×@UÑ@UÔ@WÓXÓXˆÙØ¤# nÓ"5Ñ5ˆDØ# qšy‘G¨eˆEØ!" 5 '¨¨4°¨*°B°u°g¸QÐ?Ñà+ÐÙÜ$'¨	£N´S¸³^Ñ$CÀCÐ#HÈÐ!JÑà!&ÐÙØ!%§¡ñ +Ø6G×6MÑ6MÔ6Oó+ó "Ñð "&Ðä˜<¬Ð-?Ó)@ÓAˆØ!%§¡×!3Ñ!3°zÀLÑ7PÑ!QÐVWÑ WÐÜ #Ð$9¸1Ó =Ðà)×/Ñ/×1‰KˆC�à#Ø!ØØ!ñ	÷
 ‰c�&—*‘*˜X xÓ0°'Ó:ð ð —z‘z *¨cÓ2°V·Z±ZÀÈcÓ5RÑRˆHØ—y‘yó !à"ŸJ™J z°2Ó6×<Ñ<Ô>ó!ó ˆHô *¨&¯*©*°X¸rÓ*BÓCˆFÜ 4Ø—
‘
Ð.°Ó3ó!Ðô +¨6¯:©:°iÀÓ+DÓEˆGØ�M‰MÜ%¤c¨#£hÐ8MÔNÜ˜FÐ,AÔBÜÐ-Ð7LÔMÜ˜GÐ-BÔCØ*Ð*Ð+ðð �L�>  6§:¡:¨h¸Ó#AÐ"BÀ"À\ÀNÐRSÐTØØ˜C�. Ð"ö
ð% 2ð> 	�‰�b˜"˜b " b¨"¨bÔ1à�‰Ø#ØØØØØØô	
ð ˆùòW Xs   Ã:$Q%c                 ór   — d|j                   _        |j                  j                  d«      }|r	d„ |_        yy)z9Disable warning reporting and show no warnings in output.Fzwarnings-pluginc                   ó   — y r   r   )r    r@   s     r   Ú<lambda>z2LangSmithPlugin.pytest_configure.<locals>.<lambda>0  s   € ¸tr-   N)ÚoptionÚshowwarningsÚpluginmanagerÚ
get_pluginÚwarning_summary)ri   r0   Úreporters      r   Úpytest_configurez LangSmithPlugin.pytest_configure(  s9   € ð &+ˆ�‰Ô"ð ×'Ñ'×2Ñ2Ð3DÓEˆÙÙ'CˆHÕ$ð r-   c                 ó‚   — | j                   j                  «        | j                   j                  j                  d«       y)z3Stop Rich Live rendering at the end of the session.z
Finishing up...N)rf   ÚstoprZ   rh   )ri   rs   s     r   Úpytest_sessionfinishz$LangSmithPlugin.pytest_sessionfinish2  s)   € à�	‰	�‰ÔØ�	‰	×Ñ×ÑÐ 3Õ4r-   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rj   ru   rr   rƒ   r†   rŒ   re   rÉ   r�   râ   rå   r   r-   r   rU   rU   o   sE   „ Ù1ò7ò&Hò<ò
1òBòJòðc¨#ó còJDó5r-   rU   c                 ó¨  — | j                  dd«       | j                  d«      r¯t        j                  j	                  d«      sd}t        |«      ‚t        j                  j                  d«      rd}t        |«      ‚t        j                  «       rd}t        |«      ‚| j                  j                  t        «       d	«       d
| j                  _        yy)z Register the 'langsmith' marker.Úmarkersz/langsmith: mark test to be tracked in LangSmithr   ÚrichzoMust have 'rich' installed to use --langsmith-output. Please install with: `pip install -U 'langsmith[pytest]'`ÚPYTEST_XDIST_TESTRUNUIDzq--langsmith-output not supported with pytest-xdist. Please remove the '--langsmith-output' option or '-n' option.z“--langsmith-output not supported when env varLANGSMITH_TEST_TRACKING='false'. Please remove the'--langsmith-output' option or enable test tracking.Úlangsmith_output_pluginFN)Úaddinivalue_linerQ   Ú	importlibÚutilÚ	find_specr   ÚosÚenvironrq   Úls_utilsÚtest_tracking_is_disabledrÞ   ÚregisterrU   rÜ   rÝ   )r0   Úmsgs     r   râ   râ   8  sÅ   € à
×ÑØÐDôð ×ÑÐ,Ô-Ü�~‰~×'Ñ'¨Ô/ðLð ô ˜S“/Ð!Ü�:‰:�>‰>Ð3Ô4ðPð ô ˜S“/Ð!Ü×-Ñ-Ô/ð+ð ô ˜S“/Ð!Ø×Ñ×%Ñ%¤oÓ&7Ð9RÔSà%*ˆ�‰Õ"ð/ .r-   Úxr¸   Úreturnc                 ó8   — t        | «      |kD  r| d |dz
   dz   S | S )Né   ú...)r®   )rù   r¸   s     r   r¹   r¹   W  s)   € Ü
ˆ1ƒv�ÒØ��7˜Q‘;Ð %Ñ'Ð'àˆr-   Ú	test_namec                 óÄ   — t        | «      |kD  rQ| j                  d«      \  }}t        d|z   «      |kD  rd||dz
   d  z   S |t        d|z   «      z
  }d|| d  z   dz   |z   S | S )Nz::z.py::rý   rü   z...::)r®   Úsplit)rþ   r¸   Úfiler   Úfile_lens        r   rÈ   rÈ   ^  s�   € Ü
ˆ9ƒ~˜ÒØ—_‘_ TÓ*‰
ˆˆdÜˆw˜‰~Ó Ò(Ø˜4 '¨A¡+ Ð 0Ð1Ñ1Ð1ØœS ¨4¡Ó0Ñ0ˆØ�t˜X˜I˜JÐ'Ñ'¨$Ñ.°Ñ5Ð5àÐr-   r€   Úcurrentr~   c                óÈ   — |D ]X  }| j                  |d «      x}sŒ|j                  |i «      }t        |t        «      rt        |t        «      r
i |¥|¥||<   ŒT|||<   ŒZ i |¥| ¥S r   )Úpoprq   rº   Údict)r€   r  r~   ÚpathÚpath_updateÚpath_currents         r   r   r   i  ss   € ÛˆØ Ÿ*™* T¨4Ó0Ð0ˆ;Ñ0Ø"Ÿ;™; t¨RÓ0ˆLÜ˜+¤tÔ,´¸LÌ$Ô1OØ ? <Ð ?°;Ð ?�˜’à +�˜’ð ð !ˆgÐ ˜Ð Ð r-   rE   c                 óL   — 	 t        j                  | «      S # t        $ r Y yw xY w)NÚunserializable)ÚjsonÚdumpsÚ	Exception)rE   s    r   rÆ   rÆ   t  s'   € ð Ü�z‰z˜#‹ÐøÜò  Ùð ús   ‚ —	#¢#)+ré   Úimportlib.utilrð   r  Úloggingró   rÀ   Úcollectionsr   Ú	threadingr   Útypingr   rC   r
   r   rõ   Úlangsmith.testing._internalr   r   rF   Ú	getLoggerræ   r   r   r,   Ú__version__Ú
startswithr1   r4   ÚhookimplrN   rS   rU   râ   rÉ   r¼   r¹   rÈ   r  r^   r   rÆ   r   r-   r   Ú<module>r     s  ðÙ ã Û Û Û 	Û Ý #Ý Ý ã å 'Ý <Ý 7à	ˆ×	Ñ	˜8Ó	$€ò
ò*!ð 
×Ñ× Ñ  Ô&ó"ò"ð
 €‡�˜TÔ"ñ 
ó #ð 
ðF ‡�ñó ð÷F5ñ F5òR+ð>�3ð  ð ¨ó ð Sð °3ð ¸3ó ð!˜Dð !¨4ð !¸DÀ¹Ið !È$ó !ð ˜cð   cô  r-   