+
    lHàj~B  ã                  óT  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIHtHtH	t	H
t
 ^ RIHtHtHtHtHt ^ RIHtHt ]P(                  ! ]4      tRRRR	R
RRRRRRRR/RRRRR/RRRR]! ]4      RRR]/RRRR]! ]4      RRR]//RR.//tR]R&   R R ltR R  ltR! R" ltR# tR$ R% ltR& tR' R( lt R)R*R+R*R,R*R-R*R.R/R0R/R1R/R2R//t!R3 R4 lt"R5 R6 lt#R7 R8 lt$R9 R: lt%R;R<RRRR=/3R>R?RR@RRA/3RBRCRRRRD/3RERFRR@RRG/33t&RHt'RI RJ lt(RK RL lt)RM RN lt*]PV                  ! RRO]]%]. R/RP]*RQ7	       R# )RuÔ  ``video_generate``: one tool dispatching to a plugin-registered :class:`VideoGenProvider`
(``agent/video_gen_provider.py`` ABC, ``agent/video_gen_registry.py``, ``plugins/video_gen/<name>/``).

Ships **no in-tree provider**: enable a plugin and select it in ``hermes tools`` â†’ Video
Generation. The tool layer only does lightweight validation; each provider clamps/ignores
unsupported params inside ``generate``. Video edit/extend are deliberately not exposed here.
)ÚannotationsN)ÚAnyÚDictÚListÚOptional)ÚCOMMON_ASPECT_RATIOSÚCOMMON_RESOLUTIONSÚDEFAULT_ASPECT_RATIOÚDEFAULT_RESOLUTIONÚerror_response)ÚregistryÚ
tool_errorÚnameÚvideo_generateÚdescriptionuG   (rebuilt at get_definitions() time â€” see _build_dynamic_video_schema)Ú
parametersÚtypeÚobjectÚ
propertiesÚpromptÚstringz\Text instruction describing the desired video, motion, subject, style, camera movement, etc.ÚdurationÚintegerzkDesired video duration in seconds. Providers clamp to their supported range. Omit for the provider default.Úaspect_ratioÚenumzOutput aspect ratio.ÚdefaultÚ
resolutionzOutput resolution.Úrequiredúdict[str, Any]ÚVIDEO_GENERATE_SCHEMAc               ó    € V ^8„  d   QhRRRR/# )é   ÚkeyÚstrÚreturnúOptional[str]© )Úformats   "Ú@/home/ubuntu/.hermes/hermes-agent/tools/video_generation_tool.pyÚ__annotate__r)   H   s   € ÷ Oñ O˜Sð O ]ñ Oó    c                ó  €  ^ RI HpHp V! V! 4       RV 4      p\        T\        4      '       d'   TP                  4       '       d   TP                  4       # R#   \         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)zIReturn the stripped ``video_gen.<key>`` string from config.yaml, or None.)Úcfg_getÚload_configÚ	video_genz#Could not read video_gen config: %sN)	Úhermes_cli.configr,   r-   Ú	ExceptionÚloggerÚdebugÚ
isinstancer#   Ústrip)r"   r,   r-   ÚvalueÚexcs   &    r(   Ú_read_video_gen_keyr7   H   sg   € ðß:Ù™› {°CÓ8ˆô ' u¬c×2Ò2°u·{±{·}²}ˆ5�;‰;‹=ÐNÈ$ÐNøô ô Ü�‰Ð:¸CÔ@Ýûðús   ‚A ÁBÁ"A>Á>Bc               ó   € V ^8„  d   QhRR/# ©r!   r$   r%   r&   )r'   s   "r(   r)   r)   S   s   € ÷ +ñ +¨ñ +r*   c                 ó   € \        R 4      # )Úprovider©r7   r&   r*   r(   Ú_read_configured_video_providerr=   S   s   € Ü˜zÓ*Ð*r*   c               ó   € V ^8„  d   QhRR/# r9   r&   )r'   s   "r(   r)   r)   W   s   € ÷ (ñ ( mñ (r*   c                 ó   € \        R 4      # )Úmodelr<   r&   r*   r(   Ú_read_configured_video_modelrA   W   s   € Ü˜wÓ'Ð'r*   c                 ó.   € ^ RI Hp  ^ RIHp V! 4        W3# )zgImport the provider registry after (idempotent) plugin discovery so user-installed plugins are visible.)Úvideo_gen_registry)Ú_ensure_plugins_discovered)ÚagentrC   Úhermes_cli.pluginsrD   )rC   rD   s     r(   Ú_discovered_registryrG   [   s   € å(Ý=ÙÔ ØÐ9Ð9r*   c               ó   € V ^8„  d   QhRR/# )r!   r$   Úboolr&   )r'   s   "r(   r)   r)   c   s   € ÷ `ñ `¨Tñ `r*   c                 óº   € \        4       w  r\        ;QJ d*    R V P                  4        4       F  '       g   K   R# 	  R# ! R V P                  4        4       4      # )z=True when at least one registered provider reports available.c              3  ó<   "  € T F  p\        VR R4      x € K  	  R# 5i)Úis_availableFN)Ú_provider_call)Ú.0Úps   & r(   Ú	<genexpr>Ú6check_video_generation_requirements.<locals>.<genexpr>f   s   é € Ð_ÑA^¸AŒ~˜a °×7Ð7ÓA^ùs   ‚TF)rG   ÚanyÚlist_providers)Úregistry_modÚ_s     r(   Ú#check_video_generation_requirementsrV   c   sG   € ä*Ó,�O€Lß‹3Ñ_À×A\ÑA\ÔA^Ó_�3Œ3Ð_Š3Ð_ˆ3Ñ_À×A\ÑA\ÔA^Ó_Ó_Ð_r*   c                 óØ   €  \        4       w  rV P                  4       pVf   V! RR7       V P                  4       pV#   \         d"   p\        P	                  RT4        Rp?R# Rp?ii ; i)zdActive provider or None; a miss forces a discovery refresh (sessions older than the plugin install).NT)Úforcez(video_gen provider resolution failed: %s)rG   Úget_active_providerr0   r1   r2   )rT   Úensure_discoveredr;   r6   s       r(   Ú_resolve_active_providerr[   i   sc   € ð	Ü*>Ó*@Ñ'ˆØ×3Ñ3Ó5ˆØÒÙ DÕ)Ø#×7Ñ7Ó9ˆHØˆøÜô Ü�‰Ð?ÀÔEÝûðús   ‚:= ½A)ÁA$Á$A)c               ó    € V ^8„  d   QhRRRR/# )r!   Ú
configuredr%   r$   r#   r&   )r'   s   "r(   r)   r)   w   s   € ÷ 
.ñ 
.¨ð 
.¸#ñ 
.r*   c                ó    € V '       d'   \         P                  ! \        R V  R2RV R7      4      # \         P                  ! \        RRR7      4      # )zvideo_gen.provider='uŸ   ' is set but no plugin registered that name. Run `hermes plugins list` to see installed video gen backends, or `hermes tools` â†’ Video Generation to pick one.Úprovider_not_registered)ÚerrorÚ
error_typer;   u†   No video generation backend is configured. Run `hermes tools` â†’ Video Generation to enable one (xAI, FAL, OpenRouter, or DeepInfra).Úno_provider_configured)r`   ra   )ÚjsonÚdumpsr   )r]   s   &r(   Ú_missing_provider_errorre   w   s]   € ßÜ�zŠzœ.Ø)¨*¨ð 6Fð Gð 1¸:ô	Gó Hð 	Hô
 �:Š:”nðVà+ô-ó .ð .r*   ÚtrueTÚ1ÚyesÚonÚfalseFÚ0ÚnoÚoffc               ó    € V ^8„  d   QhRRRR/# )r!   r5   r   r$   zOptional[int]r&   )r'   s   "r(   r)   r)   ˆ   s   € ÷ ñ �sð ˜}ñ r*   c                ód   €  V e   V R8X  d   R # \        V 4      #   \        \        3 d     R # i ; i)NÚ )ÚintÚ	TypeErrorÚ
ValueError©r5   s   &r(   Ú_coerce_intru   ˆ   s7   € ðØ’}¨°¬ˆtÐC¼¸U»ÐCøÜ”zÐ"ô Úðús   ‚ �
 š/®/c               ó    € V ^8„  d   QhRRRR/# )r!   r5   r   r$   zOptional[bool]r&   )r'   s   "r(   r)   r)   �   s   € ÷ Vñ V˜ð V ñ Vr*   c                óÄ   € \        V \        4      '       d   V # \        V \        4      '       d2   \        P	                  V P                  4       P                  4       4      # R # ©N)r3   rI   r#   Ú_BOOL_WORDSÚgetr4   Úlowerrt   s   &r(   Ú_coerce_boolr|   �   sD   € Ü�%œ×ÒØˆÜ5?ÀÄs×5KÒ5KŒ;�?‰?˜5Ÿ;™;›=×.Ñ.Ó0Ó1ÐUÐQUÐUr*   c               ó    € V ^8„  d   QhRRRR/# )r!   r5   r   r$   zOptional[list[str]]r&   )r'   s   "r(   r)   r)   •   s   € ÷ ^ñ ^ sð ^Ð/Bñ ^r*   c                ó.  € \        V \        4      '       d   V .p \        V \        \        34      '       g   R # V  Uu. uFC  p\        V\        4      '       g   K  VP	                  4       '       g   K3  VP	                  4       NKE  	  up;'       g    R # u upi rx   )r3   r#   ÚlistÚtupler4   )r5   Úitems   & r(   Ú_normalize_reference_imagesr‚   •   sf   € Ü�%œ×ÒØ�ˆÜ�eœd¤E˜]×+Ò+ÙÙ%*ÓU¡U˜T¬j¸¼s×.CŒLÈÏ
É
ÏŒLˆD�J‰JŽL¡UÑU×]Ð]ÐY]Ð]ùÒUs   ¼BÁBÁ1Bc               ó$   € V ^8„  d   QhRRRRRR/# )r!   Úargsr   Ú_kwr   r$   r#   r&   )r'   s   "r(   r)   r)   �   s!   € ÷ <ñ < ð <¸ð <Àñ <r*   c                ój  aaa€ V P                  R 4      ;'       g    RP                  4       oV P                  R4      ;'       g    RP                  4       ;'       g    Rp\        V P                  R4      4      pVP                  R4      p^ RIHp V! W#V4      w  r#pVe   V# R\        V P                  R4      4      RV P                  R4      ;'       g    \        P                  4       ;'       g    \        R	V P                  R	4      ;'       g    \        P                  4       ;'       g    \        R
V P                  R
4      ;'       g    RP                  4       ;'       g    RR\        V P                  R4      4      R\        V P                  R4      4      R\        V P                  R4      4      /pS'       g   \        R4      # RV 9   g   RV 9   d   \        R4      # \        4       p\        4       oSf   \        V4      # \        4       ;'       g    SP                  4       oRSRVRV/VCp	V	P                  4        U
Uu/ uF  w  r«Vf   K  W«bK  	  p	p
p\!        SRR4      pR VVV3R llp SP"                  ! RR S/V	B p\-        T\.        4      '       g
   T! RR4      # \0        P2                  ! T4      # u upp
i   \$         d.   p\&        P)                  RYÏ4       T! RT R2R4      u Rp?# Rp?i\*         d0   p\&        P)                  RYÏ4       T! RT RT 2R4      u Rp?# Rp?ii ; i) r   rp   Ú	image_urlNÚreference_image_urlsÚtask_id)Ú_confine_source_imagesr   r   r   Únegative_promptÚaudioÚseedÚupscalez'prompt is required for video generationÚ	operationÚ	video_urlz†video_generate only supports text-to-video, image-to-video, and reference-to-video; use a provider-specific tool for video edit/extendr@   r   Ú?c               ó$   € V ^8„  d   QhRRRRRR/# )r!   r`   r#   ra   r$   r&   )r'   s   "r(   r)   Ú,_handle_video_generate.<locals>.__annotate__Ç   s&   € ÷ Wñ W�Cð W Sð W¨Sñ Wr*   c                ót   <€ \         P                  ! \        Y\        SR R4      S;'       g    RSR7      4      # )r   rp   )r`   ra   r;   r@   r   )rc   rd   r   Úgetattr)r`   ra   r@   r   r;   s   &&€€€r(   Ú_errÚ$_handle_video_generate.<locals>._errÇ   s7   ø€ Ü�zŠzœ.ØÜ˜X v¨rÓ2¸%¿+¸+À2ÈfôVó Wð 	Wr*   zBvideo_gen provider '%s' rejected kwargs (signature too narrow): %sz
Provider 'z\' signature is out of date with the video_generate schema. Report this to the plugin author.Úprovider_contractz"video_gen provider '%s' raised: %sz	' error: Úprovider_exceptionz#Provider returned a non-dict resultr&   )rz   r4   r‚   Útools.image_generation_toolrŠ   ru   r	   r
   r|   r   r=   r[   re   rA   Údefault_modelÚitemsr•   Úgeneraterr   r1   Úwarningr0   r3   Údictrc   rd   )r„   r…   r‡   rˆ   r‰   rŠ   Úconfine_errorÚoptionalr]   ÚkwargsÚkÚvÚpnamer–   Úresultr6   r@   r   r;   s   &,              @@@r(   Ú_handle_video_generater§   �   sý  ú€ Ø�h‰h�xÓ ×&Ð& B×-Ñ-Ó/€FØ—‘˜+Ó&×,Ð,¨"×3Ñ3Ó5×=Ð=¸€IÜ6°t·x±xÐ@VÓ7WÓXÐØ�g‰g�iÓ €Gõ CÙ5KØ¨ó62Ñ2€I ]àÒ ØÐð 	”K §¡¨Ó 4Ó5Ø˜Ÿ™ .Ó1×IÐIÔ5I×PÑPÓR×jÐjÔVjØ�t—x‘x Ó-×CÐCÔ1C×JÑJÓL×bÐbÔPbØ˜DŸH™HÐ%6Ó7×=Ð=¸2×DÑDÓF×NÐNÈ$Ø”˜dŸh™h wÓ/Ó0Ø”˜DŸH™H VÓ,Ó-Ø”< §¡¨Ó 3Ó4ð6€H÷ ÜÐCÓDÐDØ�dÔ˜k¨TÔ1ÜðUóVð 	Vô 1Ó2€JÜ'Ó)€HØÒÜ& zÓ2Ð2ô )Ó*×FÐF¨h×.DÑ.DÓ.F€Eà�˜ YÐ0FÐH\ðjØ`hðj€Fð  &Ÿ|™|œ~Ô?™~‘t�q°ŒdˆaŠd™~€FÑ?Ü�H˜f cÓ*€E÷Wò WðNØ×"Ò"Ñ;¨&Ð;°FÑ;ˆô �fœd×#Ò#ÙÐ9Ð;NÓOÐOÜ�:Š:�fÓÐùó+ @øô ô !ä�‰Ð[Ð]bÔhÙØ˜˜ð  0ð 1àó!õ 	!ûô ô NÜ�‰Ð;¸UÔHÙ�j   y°°Ð6Ð8LÓMÕMûðNúsB   ÉJ<ÉJ<É3K ËL2Ë"K5Ë/L2Ë5L2ÌL2Ì$L-Ì'L2Ì-L2Úsupports_negative_promptr‹   zContent to avoid in the output.Úsupports_audiorŒ   Úbooleanz6Enable native audio generation (affects pricing tier).Úsupports_seedr�   zSeed for reproducible outputs.Úsupports_upscalerŽ   zlHigh-resolution pass via the backend's video upscaler (~2x, extra cost/latency). Omit for native resolution.u[  Generate a video from a text prompt (text-to-video), animate a still image (image-to-video), or guide generation with reference images. Pass `image_url` to animate an image or `reference_image_urls` for reference-to-video. Video edit/extend workflows are not part of this unified surface; use a dedicated provider-specific tool when one is available. The backend and model family are user-configured via `hermes tools` â†’ Video Generation; the agent does not pick them. Long-running generations may take 30 seconds to several minutes â€” the call blocks until the video is ready. Returns the result in the `video` field â€” either an HTTP URL or an absolute file path. To show it to the user, reference that path/URL in your response using the file-delivery convention for the current platform (your platform guidance describes how files are delivered here).c               ó$   € V ^8„  d   QhRRRRRR/# )r!   r   r#   r   r   r$   r&   )r'   s   "r(   r)   r)     s&   € ÷ \ñ \˜ð \¨.ð \¸^ñ \r*   c           	     ó   € R V RRRRVRR.//# )r   r   r   r   r   r   r   r&   )r   r   s   &&r(   Ú_schemar¯     s(   € à�{Ø�v˜x¨°zÀ:ÐPXÈzÐZð\ð \r*   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r!   r;   r   Úmethodr#   r   r$   r&   )r'   s   "r(   r)   r)     s(   € ÷ ñ ˜Sð ¨#ð ¸ð Àñ r*   c                ó^   €  \        W4      ! 4       ;'       g    T#   \         d    Tu # i ; i)zO``provider.<method>()`` or ``default`` when it raises or returns a falsy value.)r•   r0   )r;   r±   r   s   &&&r(   rM   rM     s1   € ðÜ�xÔ(Ó*×5Ð5¨gÐ5øÜô ØŠðús   ‚ ™ œ,«,c               ó   € V ^8„  d   QhRR/# )r!   r$   r   r&   )r'   s   "r(   r)   r)     s   € ÷ Z1ñ Z1 ^ñ Z1r*   c            
     ó°  a€ \         R,          R,          p \        .p\        4       p\        4       pVf6   VP	                  R4       \        RP                  V4      RV R,          /4      # \        VR/ 4      p\        VR. 4      pT;'       g    VP                  4       o\        V3R lV 4       / 4      p\        VP                  R	4      ;'       g    . 4      pVP                  R
4      pV'       d   VP                  V4       RV9   d   RV9  d   VP	                  R4       MRV9   d   RV9  d   VP	                  R4       T;'       g%    \        VP                  R	4      ;'       g    . 4      p	RV	9   p
RV	9   pV
'       d   V'       g   VP	                  R4       MV
'       g   VP	                  R4       VP                  R8X  d=   TP	                  R4        ^ RIHp V! R4      pV'       d   VP	                  RV 24       RV R,          /pV
'       dH   RRRR/VR&   \#        VP                  R4      ;'       g    ^ 4      pV^ 8”  d   RRRRR/RVRR V R!2/VR"&   VP                  R#VP                  R#4      4      pVP                  R$VP                  R$4      4      p\%        V R%,          4      pV'       d1   V'       d)   \#        V4      VR&&   \#        V4      VR'&   R(V R)V R*2VR&   VVR%&   R/ FI  w  pp\%        V V,          4      pVP                  V4      '       d   \'        VV,          4      VR+&   VVV&   KK  	  \(         F%  w  pppVP                  V4      '       g   K   VVV&   K'  	  VP                  R,4      '       d)   VP                  R-4      '       g   VP	                  R.4       \        RP                  V4      V4      #   \          d    Rp ELïi ; i)0z´Description AND params from capabilities() + the model's catalog entry; enums and duration
bounds tighten to the active model. Unadvertised args are still accepted (replay compat).r   r   u|   
No video backend is available. Calls will return an error until the user picks one via `hermes tools` â†’ Video Generation.Ú
r   ÚcapabilitiesÚlist_modelsc              3  óˆ   <"  € T F7  p\        V\        4      '       g   K  VP                  R 4      S8X  g   K3  Vx € K9  	  R# 5i)ÚidN)r3   rŸ   rz   )rN   ÚmÚactive_models   & €r(   rP   Ú._build_dynamic_video_schema.<locals>.<genexpr>$  s.   øé € Ð`¡&˜Q¬J°q¼$×,?”qÀAÇEÁEÈ$ÃKÐS_ÑD_—q’q£&ùs   ƒA A¸
AÚ
modalitiesÚmodalityÚimageÚtextu_   - this model is image-to-video only â€” image_url is REQUIRED; text-only calls will be rejecteduA   - this model is text-to-video only â€” image_url is not supportedz,- image-to-video only: image_url is REQUIREDz%- text-to-video only (no image input)ÚxaizÇ- chaining: for edit/extend pass the public HTTPS MP4 in `video` or `public_url` from the prior Imagine result (files-cdn). For image-to-video / reference-to-video pass public image URLs the same way)Úxai_storage_notice_textr.   rp   z- storage: r   r   r   zVPublic HTTPS URL of a still image to animate (image-to-video). Omit for text-to-video.r‡   Úmax_reference_imagesÚarrayrœ   ÚmaxItemszUp to z= public HTTPS reference image URLs (style or character refs).rˆ   Úmin_durationÚmax_durationr   ÚminimumÚmaximumzVideo duration in seconds (Ú-z!). Omit for the provider default.r   Úaudio_always_onr©   u~   - audio: native stereo audio is generated with every video (always on; no toggle) â€” describe the desired sound in the prompt))r   Úaspect_ratios)r   Úresolutions)r   Ú_GENERIC_DESCRIPTIONrA   r[   Úappendr¯   ÚjoinrM   r›   ÚnextÚsetrz   Úaddr   Útools.xai_httprÂ   r0   rq   rŸ   r   Ú_CAPABILITY_PARAMS)Ústatic_propsÚpartsÚconfigured_modelr;   ÚcapsÚmodelsÚ
model_metaÚmodel_modalitiesr¾   Úeffective_modalitiesÚcan_i2vÚt2vrÂ   Únoticer   Úmax_refsrÆ   rÇ   Úduration_paramr"   Úcaps_keyÚparamÚflagr»   s                          @r(   Ú_build_dynamic_video_schemaræ     s½  ø€ ô )¨Õ6°|ÕD€LÜ,Ð-€EÜ3Ó5ÐÜ'Ó)€HØÒØ�‰ðPô	Qô �t—y‘y Ó'¨(°LÀÕ4JÐ)KÓLÐLÜ˜( N°BÓ7€DÜ˜H m°RÓ8€FØ#×?Ð? x×'=Ñ'=Ó'?€LÜÔ`¡&Ó`ÐbdÓe€Jô ˜:Ÿ>™>¨,Ó7×=Ð=¸2Ó>ÐØ�~‰~˜jÓ)€HßØ×Ñ˜XÔ&ØÐ"Ô" vÐ5EÔ'EØ�‰ð/õ	0ð 
Ð#Ô	#¨Ð7GÔ(GØ�‰ÐXÔYØ+×PÐP¬s°4·8±8¸LÓ3I×3OÐ3OÈRÓ/PÐØÐ-Ñ-€GØ
Ð(Ñ
(€Cß—sØ�‰ÐCÕDßØ�‰Ð<Ô=Ø‡}�}˜ÔØ�‰ðô	ð
	Ý>Ù,¨[Ó9ˆF÷ Ø�L‰L˜; v hÐ/Ô0Ø"*¨L¸Õ,BÐ!C€Jßà�HØð<ð#>ˆ
�;Ñô
 �t—x‘xÐ 6Ó7×<Ð<¸1Ó=ˆØ�aŒ<à˜Ø˜& (Ð+Ø˜HØØ˜X˜Jð '1ð 1ð23ˆJÐ-Ñ.ð —>‘> .°$·(±(¸>Ó2JÓK€LØ—>‘> .°$·(±(¸>Ó2JÓK€LÜ˜, zÕ2Ó3€NßŸÜ$'¨Ó$5ˆ�yÑ!Ü$'¨Ó$5ˆ�yÑ!à)¨,¨°q¸¸ð G-ð -ð 	�}Ñ%ð ,€JˆzÑó \‰ˆˆXÜ�\ #Õ&Ó'ˆØ�8‰8�H×ÒÜ   h¥Ó0ˆE�&‰MØˆ
�3‹ñ	 \÷
 /Ñˆˆc�5Ø�8‰8�D�>Œ>Ø#ˆJ�s‹Oñ /ð ‡x�xÐ!×"Ò"¨4¯8©8Ð4D×+EÒ+EØ�‰ðô	ô �4—9‘9˜UÓ# ZÓ0Ð0øô[ ô 	Ø‹Fð	ús   ÇO ÏOÏOr.   u   ðŸŽ¬)	r   ÚtoolsetÚschemaÚhandlerÚcheck_fnÚrequires_envÚis_asyncÚemojiÚdynamic_schema_overrides),Ú__conditional_annotations__Ú__doc__Ú
__future__r   rc   ÚloggingÚtypingr   r   r   r   Úagent.video_gen_providerr   r   r	   r
   r   Útools.registryr   r   Ú	getLoggerÚ__name__r1   r   r   Ú__annotations__r7   r=   rA   rG   rV   r[   re   ry   ru   r|   r‚   r§   rÕ   rÎ   r¯   rM   ræ   Úregister)rï   s   @r(   Ú<module>rú      s  øðôõ #ã Û ß ,Ó ,÷õ ÷ 0à	×	Ò	˜8Ó	$€ð Ðð Ð\ØØ�ØØØ˜Øð<ðð Ø˜	ØðLðð Ø˜Ø™Ð1Ó2ØÐ5ØÐ/ð	ð Ø˜Ø™Ð/Ó0ØÐ3ØÐ-ð	ð+
ð@ 	�X�JðE#ð*)Ð �~ó *õZOõ+õ(ò:õ`òõ
.ð �t˜S $¨¨t°T¸4Ø˜˜s E¨4°¸¸uðF€õõVõ^õ<ðH  Ð!2Ø�ØÐ8ð5ð ð �wØ�	ØÐOð!ð ð �fØ�	ØÐ7ðð ð ˜Ø�	ØðEð%ð ðÐ ð.8ð õ"\õõZ1ðz 	× Ò Ø	ØØ Ø"Ø0ØØØ
Ø8÷	:r*   