Ë
    Ó“Ój8+  ã                   óX  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
mZ  e e	j                  d¬«      «      Zdej                  d<   d ej                  «       › �Z ej"                  dd	«      ej                  d
<    ej"                  dd«      ej                  d<    ej"                  dd«      ej                  d<    ej"                  dd«      ej                  d<   eej                  d<    eedz  «      ej                  d<    eedz  «      ej                  d<    eedz  «      ej                  d<    eedz  «      ej                  d<    eedz  «      ej                  d<    eedz  «      ej                  d <    eed!z  «      ej                  d"<   d#ej                  d$<   d#ej                  d%<   d#ej                  d&<   dej                  d'<   dej                  d(<   dej                  d)<   dej                  d*<   dej                  d+<   d,ej                  d-<   d.ej                  d/<   d0ej                  d1<   ddlZddlZdd2lmZmZ dd3lmZ ddlZdd4lmZ dd5lmZ dd6l m!Z! dd7l"m#Z# ej                  d-   Z$d8Z%d9Z&d:Z'd;Z(d<Z)d=Z*d>Z+d?Z,d@Z-e-fdAedBedCedDefdE„Z.dgdFedGedDefdH„Z/dhdBedAedGedIe0de1e   dJe0fdK„Z2dL„ Z3 e3«        dM„ Z4 ejj                  dN¬O«      dP„ «       Z6 ejj                  dQ¬R«      dS„ «       Z7ejj                  dDefdT„«       Z8ejj                  dU„ «       Z9ejj                  dDefdV„«       Z:ejj                  dDe;fdW„«       Z<ejj                  dDe;fdX„«       Z=ejj                  dDe;fdY„«       Z>	 	 didZedBedAed[e1e;   dDdf
d\„Z?djdDe;fd]„Z@dkd^ed_eAd`eAdaeBfdb„ZCdldceAfdd„ZDdeedDefdf„ZEy)muÁ  
conftest.py â€” configuration pytest partagÃ©e.

CRITIQUE : redirige la base MySQL (une base `meeconic_test_<pid>` crÃ©Ã©e puis supprimÃ©e par la session) et
PHOTOS_DIR / THUMBS_DIR / INCOMING_DIR / LOG_DIR / BACKUPS_DIR vers un dossier temporaire AVANT le premier
`import main` â€” sinon les tests tourneraient sur la vraie base de donnÃ©es et les vraies photos des familles
(le genre d'accident Ã  l'origine de l'incident du 2026-09-03).

Le serveur MySQL/MariaDB de test se rÃ¨gle avec TEST_MYSQL_HOST / _PORT / _USER / _PASSWORD
(dÃ©faut : 127.0.0.1:3306, root sans mot de passe â€” le XAMPP de dÃ©veloppement).

Ces variables d'environnement doivent Ãªtre dÃ©finies au chargement du module
(pas dans une fixture) car `core.config` les lit Ã  l'import.

Jeu de donnÃ©es de test (crÃ©Ã© une fois par session, sans aucune donnÃ©e de dÃ©mo) :
  Ã©cole Â« ecole-test Â»  : famille TST-1001 (consentement donnÃ©, 2 photos) et
                          famille CON-3003 (SANS consentement, 1 photo), photos/ecole-test/cam1/CODE/
                          famille OLD-7007 (consentement donnÃ©, 1 photo) dans l'ANCIEN layout photos/OLD-7007/
  Ã©cole Â« autre-ecole Â» : famille OTH-2002 (consentement donnÃ©, 1 photo)
é    N)ÚPathÚmeeconic_test_)ÚprefixÚtestÚAPP_ENVÚTEST_MYSQL_HOSTú	127.0.0.1Ú
MYSQL_HOSTÚTEST_MYSQL_PORTÚ3306Ú
MYSQL_PORTÚTEST_MYSQL_USERÚrootÚ
MYSQL_USERÚTEST_MYSQL_PASSWORDÚ ÚMYSQL_PASSWORDÚMYSQL_DBÚbackupsÚBACKUPS_DIRÚphotosÚ
PHOTOS_DIRÚthumbsÚ
THUMBS_DIRÚincomingÚINCOMING_DIRÚlogsÚLOG_DIRÚproductsÚPRODUCTS_DIRÚassetsÚ
ASSETS_DIRÚfalseÚORGANIZER_ENABLEDÚBACKGROUND_TASKS_ENABLEDÚEMAIL_ENABLEDÚSTRIPE_SECRET_KEYÚSTRIPE_WEBHOOK_SECRETÚSTORYFACE_API_KEYÚ
SENTRY_DSNÚALERT_EMAILztest-admin-pwÚADMIN_PASSWORDz'test-jwt-secret-not-for-prod-0123456789ÚADMIN_JWT_SECRETÚ60ÚPHOTO_RETENTION_DAYS)ÚAsyncClientÚASGITransport)ÚImage)Úconfig)Úget_db)Ú
utcnow_iso)Úschool_servicez
ecole-testzautre-ecolezdirector-pw-testzother-director-pwzTST-1001zCON-3003zOTH-2002zOLD-7007Úcam1ÚschoolÚcodeÚphotographerÚreturnc                 ó4   — t         j                  | z  |z  |z  S )uS   Dossier d'une famille dans le layout actuel : photos/{Ã©cole}/{photographe}/{CODE}/)r3   r   )r8   r9   r:   s      ú;C:\1-DATA\Trabajo\photos-meeconic\backend\tests\conftest.pyÚ
family_dirr>   N   s   € ä×Ñ˜vÑ%¨Ñ4°tÑ;Ð;ó    ÚfolderÚnamec                 ó˜   — | |z  }|j                   j                  dd¬«       t        j                  dd|«      j	                  |d«       |S )NT©ÚparentsÚexist_okÚRGB)é°  i   ÚJPEG)ÚparentÚmkdirr2   ÚnewÚsave)r@   rA   ÚcolorÚpaths       r=   Ú_make_photorO   S   sD   € Ø�D‰=€DØ‡K�K×Ñ˜d¨TÐÔ2Ü	‡I�Iˆe�[ %Ó(×-Ñ-¨d°FÔ;Ø€Kr?   ÚconsentÚlegacyc           
      óT  — | j                  d|||j                  «       › d�t        «       ||r
t        «       nd |rdnd f«       | j                  d|f«       | j                  d||t        k(  rdndf«       |rt        j
                  |z  nt        ||«      }|D ]  }t        ||«       Œ y )Nz€INSERT OR REPLACE INTO families (code, family_name, email, created_at, school_id, consent_at, consent_ip) VALUES (?,?,?,?,?,?,?)z@example.comr	   z(DELETE FROM students WHERE family_code=?z;INSERT INTO students (family_code, class_name) VALUES (?,?)úCE1 AúCP A)ÚexecuteÚlowerr5   ÚSCHOOLr3   r   r>   rO   )	Úconnr9   r8   rA   rP   r   rQ   r@   Úps	            r=   Ú_make_familyrZ   Z   s¦   € Ø‡L�Lð	!à	ˆt˜Ÿ
™
›�~ \Ð2´J³LÀ&ÑZaÌ*Ì,ÐgkÙ‰ Tð	+ô,ð
 	‡L�LÐ;¸d¸WÔEØ‡L�LÐNØ 6¬VÒ#3™¸Ð@ôBá)/ŒV×Ñ Ò%´ZÀÈÓ5M€FÛˆÜ�F˜AÕñ r?   c            
      ó¢  — t        j                  «        t        j                  t        «      s t        j
                  dt        t        ¬«       t        j                  t        «      s t        j
                  dt        t        ¬«       t        «       5 } t        dft        dffD ]   \  }}|D ]  }| j                  d||f«       Œ Œ" t        | t        t        ddd	d
g«       t        | t        t        dddg«       t        | t        t        dddg«       t        | t        t        dddgd¬«       | j!                  «        d d d «       y # 1 sw Y   y xY w)Nu   Ã‰cole Test)ÚslugÚdirector_passwordu   Autre Ã‰cole)rS   ÚCE2zCM2 A)rT   z@INSERT IGNORE INTO school_classes (school_id, name) VALUES (?,?)ÚTesteurTúportrait.jpgzfratrie.jpgÚConsentFzsolo.jpgÚAutruiz	autre.jpgÚAncienzvieille.jpg)rQ   )Úmain_moduleÚinit_allr6   Ú
get_schoolrW   Úcreate_schoolÚDIRECTOR_PASSWORDÚOTHER_SCHOOLÚOTHER_DIRECTOR_PASSWORDr4   rU   rZ   Ú	DEMO_CODEÚNOCONSENT_CODEÚ
OTHER_CODEÚLEGACY_CODEÚcommit)rX   r8   ÚnamesrA   s       r=   Ú
_bootstraprq   h   s  € Ü×ÑÔÜ×$Ñ$¤VÔ,Ü×$Ñ$ ]¼ÔSdÕeÜ×$Ñ$¤\Ô2Ü×$Ñ$ ^¼,ÔZqÕrÜ	Œ�Tä%Ð'@ÐAÄLÐR[ÐC\Ó]‰MˆF�EÛ�Ø—‘Ð_ÐbhÐjnÐaoÕpñ ð ^ô 	�Tœ9¤f¨i¸ÀÐP]Ð?^Ô_Ü�Tœ>¬6°9¸eÀjÀ\ÔRÜ�Tœ:¤|°X¸tÀkÀ]ÔSÜ�Tœ;¬°¸$ÀÀÐX\Õ]Ø�‰Œ÷ 
�‰ús   ÂB+EÅEc                 óÄ  — ddl }|j                  «        	 ddlm} ddl} |«        |j                  t        j                  t        j                  t        j                  t        j                  ¬«      }t        j                  }|j                  }d} ||«      }	|	s½ddt        j                  «       v st        j                   t        «      rt        j"                  t        «      ndt        j"                  |«      t        j"                  |«      t        j"                  |«      t        j"                  |	«      dœz  }
t%        t        j&                  |
«      «      ‚dx}x}x}}	|j)                  «       j+                  d	t        j                  › d
�«       |j-                  «        t3        j4                  t6        d¬«       y# t.        $ r}t1        d|› �«       Y d}~Œ8d}~ww xY w)u@   Nettoie le dossier temporaire une fois tous les tests terminÃ©s.r   N)Údispose_engine)ÚhostÚportÚuserÚpasswordr   zjassert %(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.MYSQL_DB
}.startswith
}(%(py6)s)
}r3   )Úpy0Úpy2Úpy4Úpy6Úpy8zDROP DATABASE IF EXISTS `Ú`z&[conftest] test database not dropped: T)Úignore_errors)ÚloggingÚshutdownÚcore.dbrs   ÚpymysqlÚconnectr3   r
   r   r   r   r   Ú
startswithÚ@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚcursorrU   ÚcloseÚ	ExceptionÚprintÚshutilÚrmtreeÚ_TMP_DIR)ÚsessionÚ
exitstatusr   rs   r‚   ÚcÚ@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert7Ú@py_format9Úes               r=   Úpytest_sessionfinishrœ   }   s?  € ãØ×ÑÔð
<Ý*ÛÙÔØ�O‰O¤×!2Ñ!2¼×9JÑ9JÔQW×QbÑQbÜ%+×%:Ñ%:ð ó <ˆä�‰Ð;ˆ×)Ñ)Ð;Ð*:Ð;Ñ)Ð*:Ó;Ð;Ñ;×;×;×;×;Õ;Œv×;×;Ó;Œv×;×;Ô;ˆ×;×;Ò;Ð)×;×;Ò;Ð*:×;×;Ò;Ð;×;×;×;×;×;Ö;Ø	�‰‹
×ÑÐ6´v·±Ð6GÀqÐIÔJØ	�‰Œ	ô ‡M�M”(¨$Ö/øô ò <ÜÐ6°q°cÐ:×;Ñ;ûð<ús   –FF> Æ>	GÇGÇGT)Úautousec               #   ó<   K  — ddl m}   | «        d–—  | «        y­w)uƒ   Le rate limiter est persistant (en base) : on le vide entre les tests,
    sinon un test qui dÃ©clenche un 429 pollue les suivants.r   ©Ú	reset_allN)Úcore.rate_limitr    rŸ   s    r=   Ú_reset_rate_limitsr¢   �   s   è ø€ õ *Ù„KÛ	Ù…Kùs   ‚r“   )Úscopec                  ó"   — t         j                  S ©N)rd   Úapp© r?   r=   r¦   r¦   ™   s   € ä�?‰?Ðr?   c                  ó   — t         S r¥   )rk   r§   r?   r=   Ú	demo_coder©   ž   s   € äÐr?   c                ó¬   K  — t        | ¬«      }t        |d¬«      4 ƒd {  –—† }|­–— d d d «      ƒd {  –—†  y 7 Œ7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)N)r¦   zhttp://test)Ú	transportÚbase_url)r1   r0   )r¦   r«   r•   s      r=   Úclientr­   £   s>   è ø€ ä #Ô&€IÜ Y¸×GÕGÈ1Ø‹÷ H×GÑGøÐGø×G×GÑGüs<   ‚A ;¡A¤?ªAµ=¶A½A¿AÁAÁAÁAc              ƒ   óF  K  — | j                  ddt        i¬«      ƒ d {  –—† }|j                  }d}||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  }t        j                  |j                  «      d	z   d
|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  «       d   S 7 Œÿ­w)Nú/api/admin/loginrw   ©ÚjsonéÈ   ©ú==©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚr©rx   ry   Úpy5ú
>assert %(py7)sÚpy7Útoken)Úpostr,   Ústatus_coder‡   Ú_call_reprcomparer…   r†   rˆ   r‰   Ú_format_assertmsgÚtextrŠ   r‹   r±   ©r­   r¶   r–   Ú@py_assert4r—   Ú@py_format6Ú@py_format8s          r=   Úadmin_tokenrÅ   ª   s´   è ø€ à�k‰kÐ,°JÄÐ3OˆkÓP×P€AØ�=‰=Ð'˜CÐ'ˆ=˜CÑ×'×'Õ'ˆ=˜C×'×'×'×'×'Ñ'ˆ1×'×'Ó'ˆ1×'×'Ô'ˆ=×'×'Ò'˜C×'×'×' §¡×'×'×'×'×'×'Ð'Ø�6‰6‹8�GÑÐð 	Qús   ‚D!ŸD D D!c              ƒ   ó"   K  — d| › �t         dœS ­w)u,   OpÃ©rateur travaillant sur l'Ã©cole de test.úBearer ©ÚAuthorizationzX-School)rW   ©rÅ   s    r=   Úadmin_headersrË   ±   s   è ø€ ð  ' { mÐ4Ä&ÑIÐIùó   ‚c              ƒ   ó"   K  — d| › �t         dœS ­w)NrÇ   rÈ   )ri   rÊ   s    r=   Úother_admin_headersrÎ   ·   s   è ø€ à& { mÐ4Ä,ÑOÐOùrÌ   c              ƒ   ó\  K  — | j                  dt        t        dœ¬«      ƒ d {  –—† }|j                  }d}||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  }t	        j                  |j                  «      d	z   d
|iz  }t        t	        j                  |«      «      ‚d x}x}}dd|j                  «       d   › �iS 7 �Œ­w)Nr¯   )rw   r8   r°   r²   r³   rµ   r¶   r·   r¹   rº   rÉ   rÇ   r»   )r¼   rh   rW   r½   r‡   r¾   r…   r†   rˆ   r‰   r¿   rÀ   rŠ   r‹   r±   rÁ   s          r=   Údirector_headersrÐ   ¼   sÃ   è ø€ à�k‰kÐ,Ô@QÔ]cÑ3dˆkÓe×e€AØ�=‰=Ð'˜CÐ'ˆ=˜CÑ×'×'Õ'ˆ=˜C×'×'×'×'×'Ñ'ˆ1×'×'Ó'ˆ1×'×'Ô'ˆ=×'×'Ò'˜C×'×'×' §¡×'×'×'×'×'×'Ð'Ø˜w q§v¡v£x°Ñ'8Ð&9Ð:Ð;Ð;ð 	fûs   ‚"D,¤D)¥DD,Úorder_idÚitemsc	                 ó  — ddl }	|�|nt        d„ |D «       «      }t        «       5 }
|
j                  d| |dd|||	j	                  |«      |xs
 t        «       |||f«       |
j                  «        ddd«       y# 1 sw Y   yxY w)uN   InsÃ¨re directement une commande (Ã©vite de passer par Stripe dans les tests).r   Nc              3   ó2   K  — | ]  }|d    |d   z  –— Œ y­w)Ú
unit_priceÚquantityNr§   )Ú.0Úis     r=   Ú	<genexpr>zinsert_order.<locals>.<genexpr>Ç   s!   è ø€ Ð/_ÑY^ÐTU°°,±À!ÀJÁ-Õ0OÑY^ùs   ‚zÜINSERT INTO orders (id, family_code, customer_name, customer_email, total, status, items_json,
               created_at, payment_status, stripe_payment_intent_id, school_id)
               VALUES (?,?,?,?,?,?,?,?,?,?,?)zClient Testzclient@example.com)r±   Úsumr4   rU   Údumpsr5   ro   )rÑ   r9   r8   rÒ   Úpayment_statusÚstatusÚpi_idÚ
created_atÚtotalr±   rX   s              r=   Úinsert_orderrá   Ã   s‚   € ó ØÐ&‰E¬CÑ/_ÑY^Ó/_Ó,_€EÜ	Œ�TØ�‰ð1ð �t˜]Ð,@À%ÈÐQU×Q[ÑQ[Ð\aÓQbØÒ'œ:›<¨¸ÀðHô		Ið 	�‰Œ÷ 
�‰ús   ¥A	A7Á7B c                 ó   — || |||||dœS )N)Úphoto_filenameÚ	format_idÚformat_labelrÖ   rÕ   Úis_magicÚ	job_labelr§   )ÚfmtÚphotoÚpriceÚqtyÚmagicÚlabelÚjobs          r=   Úitemrï   Ò   s   € Ø#°#ÀuÐZ]Ø¨UÀñFð Fr?   rÀ   Úqr_pxÚblurÚcontrastc                 ó  — ddl }ddl}ddl}|j                  «       }|j	                  | dd¬«      j                  |ddd¬	«       t        j                  |j                  |j                  «       «      «      j                  d
«      j                  ||ft        j                  «      }	|j                  j                  d«      }
|
j                  dd|d   |d   df«      j                  dd«      j!                  d«      }t        j"                  |«      }|j%                  |	|d   |z
  dz  |d   |z
  dz  f«       |dk7  r&ddlm} |j+                  |«      j-                  |«      }|r&ddlm} |j1                  |j3                  |«      «      }|S )uU   Foto sintÃ©tica (gris, con ruido suave) con un QR REAL de `text` pegado en el centro.r   NÚmF)ÚerrorÚmicroÚpngé   é   )ÚkindÚscaleÚborderrF   é   é–   é   é   éÿ   Úuint8é   ç      ð?)ÚImageEnhance)ÚImageFilter)ÚioÚnumpyÚsegnoÚBytesIOÚmakerL   r2   ÚopenÚgetvalueÚconvertÚresizeÚNEARESTÚrandomÚdefault_rngÚnormalÚclipÚastypeÚ	fromarrayÚpasteÚPILr  ÚContrastÚenhancer  ÚfilterÚGaussianBlur)rÀ   Úsizerð   rñ   rò   r  Únpr	  ÚbufÚqrÚrngÚbaseÚimgr  r  s                  r=   Úqr_imager$  Ù   sN  € ãÛÛØ
�*‰*‹,€CØ	‡J�Jˆt˜3 e€JÓ,×1Ñ1°#¸EÈÐTUÐ1ÔVÜ	�‰�B—J‘J˜sŸ|™|›~Ó.Ó	/×	7Ñ	7¸Ó	>×	EÑ	EÀuÈeÀnÔV[×VcÑVcÓ	d€BØ
�)‰)×
Ñ
 Ó
"€CØ�J‰J�s˜B  a¡¨$¨q©'°1Ð 5Ó6×<Ñ<¸QÀÓD×KÑKÈGÓT€DÜ
�/‰/˜$Ó
€CØ‡I�Iˆb�D˜‘G˜e‘O¨Ñ)¨D°©G°e©OÀÑ+AÐBÔCØ�3‚Ý$Ø×#Ñ# CÓ(×0Ñ0°Ó:ˆÙÝ#Ø�j‰j˜×1Ñ1°$Ó7Ó8ˆØ€Jr?   Úseedc                 óà   — ddl }|j                  j                  |«      }|j                  dd| d   | d   df«      j	                  dd«      j                  d«      }t        j                  |«      S )	z,Retrato sin QR (ruido de color + degradado).r   Nén   é(   rÿ   r   r  r  )r  r  r  r  r  r  r2   r  )r  r%  r  r!  r"  s        r=   Úplain_imager)  î   sa   € ãØ
�)‰)×
Ñ
 Ó
%€CØ�:‰:�c˜2  Q¡¨¨a©°!Ð4Ó5×:Ñ:¸1¸cÓB×IÑIÈ'ÓR€DÜ�?‰?˜4Ó Ð r?   rN   c                 óh   — |j                   j                  dd¬«       | j                  |dd¬«       |S )NTrC   rH   é\   )Úquality)rI   rJ   rL   )r#  rN   s     r=   Ú	save_jpegr-  ö   s0   € Ø‡K�K×Ñ˜d¨TÐÔ2Ø‡H�HˆT�6 2€HÔ&Ø€Kr?   ))éx   éP   r²   )F)ÚpaidÚpendingNNN)zprint-10x15r`   g      "@rÿ   FÚTirageN)©i@  rG   i¤  r   r  )r3  r   )FÚ__doc__Úbuiltinsr…   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter‡   Úosr�   ÚtempfileÚpathlibr   Úmkdtempr’   ÚenvironÚgetpidÚ_TEST_DBÚgetenvÚstrÚpytestÚpytest_asyncioÚhttpxr0   r1   r  r2   Úmainrd   Úcorer3   r�   r4   Úcore.timeutilr5   Úservicesr6   r,   rW   ri   rh   rj   rk   rl   rm   rn   ÚPHOTOGRAPHERr>   rO   ÚboolÚlistrZ   rq   rœ   Úfixturer¢   r¦   r©   r­   rÅ   ÚdictrË   rÎ   rÐ   rá   rï   ÚintÚfloatr$  r)  r-  r§   r?   r=   Ú<module>rP     sŠ  ðñ÷( „ ƒ	Û Û Ý áÐ �× Ñ Ð(8Ô9Ó:€à#€‡
�
ˆ9Ñ Ø˜I˜BŸI™I›K˜=Ð)€Ø(˜rŸy™yÐ):¸KÓH€‡
�
ˆ<Ñ Ø(˜rŸy™yÐ):¸FÓC€‡
�
ˆ<Ñ Ø(˜rŸy™yÐ):¸FÓC€‡
�
ˆ<Ñ Ø(˜rŸy™yÐ)>ÀÓC€‡
�
ÐÑ Ø'€‡
�
ˆ:Ñ Ù" 8¨iÑ#7Ó8€‡
�
ˆ=Ñ Ù  ¨HÑ!4Ó5€‡
�
ˆ<Ñ Ù  ¨HÑ!4Ó5€‡
�
ˆ<Ñ Ù  ¨JÑ!6Ó7€‡
�
ˆ>Ñ Ù  ¨FÑ!2Ó3€‡
�
ˆ9Ñ Ù  ¨JÑ!6Ó7€‡
�
ˆ>Ñ Ù  ¨HÑ!4Ó5€‡
�
ˆ<Ñ Ø#*€‡
�
ÐÑ Ø)0€‡
�
Ð%Ñ &Ø#*€‡
�
ˆ?Ñ Ø#%€‡
�
ÐÑ Ø&(€‡
�
Ð"Ñ #Ø#%€‡
�
ÐÑ Ø#%€‡
�
ˆ<Ñ Ø#%€‡
�
ˆ=Ñ Ø#2€‡
�
ÐÑ Ø#L€‡
�
ÐÑ Ø%)€‡
�
Ð!Ñ "ã Û ß ,Ý ã Ý Ý Ý $Ý #à—‘Ð,Ñ-€Ø	€Ø€Ø&Ð Ø-Ð à€	Ø€Ø€
Ø€Ø€ð <Hñ <�sð < #ð <°Sð <ÈDó <ñ
˜ð  Cð À$ó ñ˜Sð ¨#ð °Sð À4ð ÐQUÐVYÑQZð Ðdhó òñ$ „ò0ð$ €‡�˜Ôñó ðð €‡��iÔ ñó !ðð ‡�ð�3ò ó ðð ×Ññó ðð ×Ñð ò ó ðð ×ÑðJ¨ò Jó ðJð
 ×ÑðP¨dò Pó ðPð ×Ñð< dò <ó ð<ð [aØFJñ˜3ð  cð °3ð ¸tÀD¹zð ØOSóñFÐnró Fñ�3ð °#ð À3ð ÐV[ó ñ*!¨ó !ð˜ð  $ô r?   