+
    UV-já~  ã                   óØ  € ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIHtHtH	t	H
t
  ! R R]4      t/ R]P                  bR]P                  bR	]P                  bR
]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  b/ R]P                  bR]P                   bR]P                  bR]P                  bR]P                  bR]P                  bR]P                  bR]P"                  bR ]P$                  bR!]P$                  bR"]P$                  bR#]P                  bR$]P                  bR%]P                  bR&]P&                  bR']P(                  bR(]P(                  bC/ R)]P(                  bR*]P(                  bR+]P                  bR,]P                  bR-]P                  bR.]P                  bR/]P                  bR0]P                  bR1]P                  bR2]P(                  bR3]P                  bR4]P                  bR5]P*                  bR6]P,                  bR7]P,                  bR8]P,                  bR9]P.                  bC/ R:]P.                  bR;]P                  bR<]P,                  bR=]P,                  bR>]P,                  bR?]P,                  bR@]P                  bRA]P                  bRB]P0                  bRC]P0                  bRD]P0                  bRE]P0                  bRF]P2                  bRG]P4                  bRH]P4                  bRI]P4                  bRJ]P4                  bCt0 R[mtRK RL ltRM RN ltRO RP lt ! RQ RR4      t  ! RS RT4      t!R\RU RV llt"R]RW RX llt#R^RY RZ llt$R# )_é    N)ÚEnum)Úpartial)ÚAnyÚDictÚListÚUnionc                   ób   € ] tR t^tRtRtRtRtRtRt	Rt
RtR	tR
tRtRtRtRtRtRtRtRtRtRtR# )ÚMessageFormatz(Enum for different message format types.Úlist_with_imageÚlist_with_image_firstÚlist_with_image_url_firstÚlist_with_image_typeÚlist_with_image_type_textÚ$list_with_image_type_text_image_lastÚimage_tokenÚimage_token_pipeÚimage_patch_tokenÚstart_image_tokenÚimage_token_newlineÚimage_token_wrappedÚnumbered_image_tokensÚprompt_onlyÚ	text_onlyÚprompt_with_image_tokenÚprompt_with_start_image_tokenÚvideo_with_text© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚLIST_WITH_IMAGEÚLIST_WITH_IMAGE_FIRSTÚLIST_WITH_IMAGE_URL_FIRSTÚLIST_WITH_IMAGE_TYPEÚLIST_WITH_IMAGE_TYPE_TEXTÚ$LIST_WITH_IMAGE_TYPE_TEXT_IMAGE_LASTÚIMAGE_TOKENÚIMAGE_TOKEN_PIPEÚIMAGE_PATCH_TOKENÚSTART_IMAGE_TOKENÚIMAGE_TOKEN_NEWLINEÚIMAGE_TOKEN_WRAPPEDÚNUMBERED_IMAGE_TOKENSÚPROMPT_ONLYÚ	TEXT_ONLYÚPROMPT_WITH_IMAGE_TOKENÚPROMPT_WITH_START_IMAGE_TOKENÚVIDEO_WITH_TEXTÚ__static_attributes__r   ó    Úe/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/prompt_utils.pyr
   r
      sl   † Ù2à'€OØ3ÐØ ;ÐØ1ÐØ ;ÐØ+QÐ(Ø€KØ)ÐØ+ÐØ+ÐØ/ÐØ/ÐØ3ÐØ€KØ€IØ7ÐØ$CÐ!Ø'„Or6   r
   Újina_vlmÚjvlmÚidefics2Úidefics3zlfm2-vlÚlfm2_vlÚ
aya_visionÚcohere2_visionÚpaddleocr_vlÚqwen2_vlÚ
qwen2_5_vlÚzaya1_vlÚqwen3_vlÚqwen3_vl_moeÚqwen3_5Úqwen3_5_moeÚqwen3_omni_moeÚminicpmoÚminicpmv4_6Úmistral3Úglm4vÚ	glm4v_moeÚglm_ocrÚdots_ocrÚernie4_5_moe_vlÚinternvl_chatÚnemotron_h_nano_omniÚ nemotronh_nano_omni_reasoning_v3Úkimi_vlÚkimi_k25ÚlocateanythingÚgemma3Úgemma3nÚgemma4Úgemma4_unifiedÚdiffusion_gemmaÚllama4ÚsmolvlmÚllavaÚ
llava_nextÚgranite_visionÚgranite4_visionÚmllamaÚpixtralÚmolmo2Úmolmo_pointÚstep3p7úllava-qwen2Úllava_qwen2úbunny-llamaÚphi3_vÚphi4mmÚmulti_modalityÚdeepseek_vl_v2Údeepseekocr_2Údeepseekocrzphi4-siglipÚ
hunyuan_vlÚyoutu_vlÚ	florence2ÚmolmoÚ
moondream3Ú
falcon_ocrÚ	paligemmaÚlagunaÚnemotron_labs_diffusionÚdeepseek_v4Úhrm_textc                ó0   € V ^8„  d   QhR\         R\        /# ©é   ÚcontentÚreturn©r   Ústr)Úformats   "r7   Ú__annotate__r‚   v   s   € ÷ $+ñ $+¤sð $+¬sñ $+r6   c                óä  € \        V \        4      '       d   V # \        V \        4      '       d¯   . pV  F}  p\        V\        4      '       g   K  VP	                  RR4      pVR9   g   K6  VP	                  RR4      ;'       g    VP	                  RR4      pV'       g   Kl  VP                  V4       K  	  V'       d    RP                  V4      P                  4       # R# V '       d   \        V 4      # R# )aú  
Extract text from multimodal content.

When using OpenAI-compatible multimodal API, content can be a list like:
[
    {"type": "text", "text": "Describe this image"},
    {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}
]

This function extracts only the text parts, preventing base64 image data
from being tokenized as text (which would cause token explosion).

Args:
    content: Either a string or a list of content items

Returns:
    A string containing only the text content
ÚtypeÚ Útextr}   Ú ©r†   Ú
input_text)Ú
isinstancer€   ÚlistÚdictÚgetÚappendÚjoinÚstrip)r}   Ú
text_partsÚitemÚ	item_typer†   s   &    r7   Úextract_text_from_contentr”   v   sÂ   € ô& �'œ3×ÒØˆä�'œ4× Ò Øˆ
ÛˆDÜ˜$¤×%Ô%Ø ŸH™H V¨RÓ0�	àÐ 6Ö6ØŸ8™8 F¨BÓ/×JÐJ°4·8±8¸IÀrÓ3J�Dß‘tØ"×)Ñ)¨$Ö/ñ ÷ 0:ˆs�x‰x˜
Ó#×)Ñ)Ó+ÐA¸rÐA÷ #Œ3ˆw‹<Ð*¨Ð*r6   c                ól   € V ^8„  d   QhR\         R\        \        \        \         3,          R3,          /# )r|   r’   r~   N)r   r   Útupler€   )r�   s   "r7   r‚   r‚   �   s,   € ÷ ñ œCð ¤E¬%´´S°­/¸4Ð*?Õ$@ñ r6   c                óô   € \        V \        4      '       d$   V P                  RR4      V P                  R4      3# \        V R4      '       d-   \        V R4      '       d   \	        V RR4      \	        V RR4      3# R# )z_Return (role, content) for a message-like item (dict or object with .role/.content), else None.ÚroleÚuserr}   r…   N)rŠ   rŒ   r�   ÚhasattrÚgetattr)r’   s   &r7   Ú_get_role_contentrœ   �   sg   € ä�$œ×ÒØ�x‰x˜ Ó'¨¯©°)Ó)<Ð<Ð<Üˆt�V×Ò¤¨¨y×!9Ò!9Ü�t˜V VÓ,¬g°d¸IÀrÓ.JÐJÐJÙr6   c                ót   € V ^8„  d   QhR\         \        \        3,          R\         \        \        3,          /# )r|   Úmessager~   )r   r€   r   )r�   s   "r7   r‚   r‚   ¦   s*   € ÷ ñ ¬D´´c°­Nð ¼tÄCÌÀH½~ñ r6   c                ó  € \        V 4      pVP                  R4      pVf   V# . pV F¬  p\        V\         4      '       d   \        V4      MTp\        V\         4      '       d`   RV9   dY   \        VR,          4      pVP                  R/ 4      p\        V\        4      '       d    \        P
                  ! V4      VR&   WTR&   VP                  V4       K®  	  W1R&   V#   \        P                  \        3 d	    / TR&    LAi ; i)zFCopy a message and convert OpenAI JSON-string tool arguments to dicts.Ú
tool_callsÚfunctionÚ	arguments)	rŒ   r�   rŠ   r€   ÚjsonÚloadsÚJSONDecodeErrorÚ	TypeErrorrŽ   )rž   Ú
normalizedr    Únormalized_callsÚ	tool_callr¡   r¢   s   &      r7   Ú_normalize_tool_call_argumentsrª   ¦   sò   € ä�g“€JØ—‘ Ó-€JØÒØÐàÐÛˆ	Ü'1°)¼T×'BÒ'B”D˜”OÈ	ˆ	Ü�i¤×&Ò&¨:¸Ô+BÜ˜I jÕ1Ó2ˆHØ Ÿ™ [°"Ó5ˆIÜ˜)¤S×)Ò)ð/Ü,0¯JªJ°yÓ,A�H˜[Ñ)ð %-�jÑ!Ø×Ñ 	Ö*ñ  ð  0ˆ|ÑØÐøô ×,Ñ,¬iÐ8ô /Ø,.�H˜[Ó)ð/ús   Â%CÃ D Ã?D c                   óÐ   a € ] tR t^¿t o Rt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR	 l4       t	]V 3R
 lR l4       t
]RV 3R lR ll4       tRtV tR# )ÚMessageBuilderz1Builder for creating messages in various formats.c                ó<   <€ V ^8„  d   QhRS[ RS[S[ S[ 3,          /# )r|   r†   r~   ©r€   r   )r�   Ú__classdict__s   "€r7   r‚   ÚMessageBuilder.__annotate__Ã   s#   ø€ ÷ ?ñ ?™3ð ?¡4©©S¨¥>ñ ?r6   c                ó   € RRRV RV /# )zCreate a simple text message.r„   r†   r}   r   )r†   s   &r7   Útext_messageÚMessageBuilder.text_messageÂ   s   € ð ˜ ¨¨i¸Ð>Ð>r6   c                ó<   <€ V ^8„  d   QhRS[ RS[S[ S[ 3,          /# r{   r®   )r�   r¯   s   "€r7   r‚   r°   È   s'   ø€ ÷ Eñ E¡ð E©©c±3¨h­ñ Er6   c                ó   € RRRV RV /# )z#Create a content-type text message.r„   r†   r}   r   )r}   s   &r7   Úcontent_messageÚMessageBuilder.content_messageÇ   s   € ð ˜ ¨°¸GÐDÐDr6   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# ©r|   r~   ©r   r€   )r�   r¯   s   "€r7   r‚   r°   Í   ó   ø€ ÷ !ñ !™4¡¡S �>ñ !r6   c                 ó
   € RR/# )zCreate an image message.r„   Úimager   r   r6   r7   Úimage_messageÚMessageBuilder.image_messageÌ   ó   € ð ˜Ð Ð r6   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# r¹   rº   )r�   r¯   s   "€r7   r‚   r°   Ò   s   ø€ ÷ %ñ %™t¡C© H�~ñ %r6   c                 ó
   € RR/# )zLCreate an image_url message (for models like ERNIE that expect this format).r„   Ú	image_urlr   r   r6   r7   Úimage_url_messageÚ MessageBuilder.image_url_messageÑ   s   € ð ˜Ð$Ð$r6   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# r¹   rº   )r�   r¯   s   "€r7   r‚   r°   ×   r»   r6   c                 ó
   € RR/# )zCreate an audio message.r„   Úaudior   r   r6   r7   Úaudio_messageÚMessageBuilder.audio_messageÖ   rÀ   r6   c          
      óH   <€ V ^8„  d   QhRS[ RS[RS[RS[S[ S[3,          /# )r|   Ú
video_pathÚ
max_pixelsÚfpsr~   )r€   Úintr   r   )r�   r¯   s   "€r7   r‚   r°   Ü   s5   ø€ ÷ 	
ñ 	
Ùð	
Ù%(ð	
Ù;>ð	
á	‰c‘3ˆh�ñ	
r6   c                ó   € RRRV RVRV/# )zCreate a video message.r„   ÚvideorÍ   rÎ   r   )rÌ   rÍ   rÎ   s   &&&r7   Úvideo_messageÚMessageBuilder.video_messageÛ   s"   € ð �GØ�ZØ˜*Ø�3ð	
ð 	
r6   r   N)é Ä  é   )r   r   r    r!   r"   Ústaticmethodr²   r¶   r¾   rÄ   rÉ   rÒ   r5   Ú__classdictcell__©r¯   s   @r7   r¬   r¬   ¿   s…   ø‡ € Ù;à÷?ó ð?ð ÷Eó ðEð ÷!ó ð!ð ÷%ó ð%ð ÷!ó ð!ð ÷	
ñ 	
ó ö	
r6   r¬   c                   óÈ   a € ] tR t^èt o RtV 3R lR ltRV 3R lR lltRV 3R lR lltV 3R lR	 ltRV 3R
 lR llt	RV 3R lR llt
V 3R lR ltRV 3R lR lltRtV tR# )ÚMessageFormatterz6Handles formatting messages for different model types.c                ó    <€ V ^8„  d   QhRS[ /# )r|   Ú
model_name©r€   )r�   r¯   s   "€r7   r‚   ÚMessageFormatter.__annotate__ë   s   ø€ ÷ Añ A¡3ñ Ar6   c                ó¸   € VP                  4       V n        \        P                  V P                  4      V n        V P                  '       g   \        R V 24      hR# )zUnsupported model: N)ÚlowerrÜ   ÚMODEL_CONFIGr�   Úformat_typeÚ
ValueError)ÚselfrÜ   s   &&r7   Ú__init__ÚMessageFormatter.__init__ë   sM   € Ø$×*Ñ*Ó,ˆŒÜ'×+Ñ+¨D¯O©OÓ<ˆÔØ××ÐÜÐ2°:°,Ð?Ó@Ð@ñ  r6   c                óp   <€ V ^8„  d   QhRS[ RS[ RS[RS[RS[RS[RS[S[ S[S[ S[3,          3,          /# ©r|   Úpromptr˜   Úskip_image_tokenÚskip_audio_tokenÚ
num_imagesÚ
num_audiosr~   ©r€   ÚboolrÏ   r   r   r   )r�   r¯   s   "€r7   r‚   rÞ   ñ   sl   ø€ ÷ Z
ñ Z
áðZ
ñ ðZ
ñ ð	Z
ñ
 ðZ
ñ ðZ
ñ ðZ
ñ 
‰s‘D™™c˜•NÐ"Õ	#ñZ
r6   c                óÎ  aa€ S^8”  d/   V P                   \        9   d   \        RV P                    R24      hV P                   R9   d,   VP                  R4      '       d   V P                  ! SV3/ VB # / \
        P                  V P                  b\
        P                  \        V P                  RR7      b\
        P                  \        V P                  RRR7      b\
        P                  V P                  b\
        P                  \        V P                  RR7      b\
        P                  \        V P                  RR	R
7      b\
        P                  \        V P                   RR7      b\
        P"                  \        V P                   RR7      b\
        P$                  \        V P                   RR7      b\
        P&                  \        V P                   RR	R7      b\
        P(                  \        V P                   RR7      b\
        P*                  \        V P                   RR7      b\
        P,                  V P.                  b\
        P0                  V3R lb\
        P2                  V P4                  b\
        P6                  VV3R lb\
        P8                  VV3R lb\
        P:                  V P                  /CpVP                  V P<                  4      p	V	! SVVVSV3/ VB # )z)Format a message based on the model type.zModel z< does not support multi-image chat. Please only use 1 image.rÑ   T)Úimage_first)rñ   Úuse_image_urlr†   )Úmessage_typeF)ró   rñ   ú<image>)Útokenz	<|image|>z
<im_patch>ú<start_of_image>)rõ   rñ   z<image>
z(<image>./</image>)
c                  ó   <€ S# ©Nr   )ÚargsÚkwré   s   *,€r7   Ú<lambda>Ú1MessageFormatter.format_message.<locals>.<lambda>8  s   ø€ ¹6r6   c                  ó$   <€ R S,          S,           # )rô   r   ©rù   rú   rì   ré   s   *,€€r7   rû   rü   :  s   ø€ ÀyØõHàöHr6   c                  ó$   <€ SR S,          ,           # )rö   r   rþ   s   *,€€r7   rû   rü   =  s   ø€ ÈVØ  :Õ-öN.r6   )
r@   rA   rC   rD   rE   rF   rG   rX   rY   rI   )rÜ   ÚSINGLE_IMAGE_ONLY_MODELSrã   r�   Ú_format_video_messager
   r#   Ú_format_list_with_imager$   r   r%   r&   Ú_format_list_with_image_typer'   r(   r)   Ú_format_with_tokenr*   r+   r,   r-   r.   r/   Ú_format_numbered_tokensr0   r1   Ú_format_text_onlyr2   r3   r4   râ   )
rä   ré   r˜   rê   rë   rì   rí   ÚkwargsÚformatter_mapÚ	formatters
   &f&&&f&,  r7   Úformat_messageÚMessageFormatter.format_messageñ   sÞ  ù€ ð ˜Œ>˜dŸo™oÔ1IÔIÜØ˜Ÿ™Ð)ð *+ð ,óð ð �?‰?ð 
ô 
ð �j‰j˜×!Ò!Ø×-Ò-¨f°dÑE¸fÑEÐEð,
Ü×)Ñ)¨4×+GÑ+Gð,
ä×/Ñ/´Ø×,Ñ,¸$ô2ð,
ô
 ×3Ñ3´WØ×,Ñ,¸$Èdô6ð,
ô ×.Ñ.°×0QÑ0Qð,
ô ×3Ñ3´WØ×1Ñ1Àô6ð,
ô ×>Ñ>ÄØ×1Ñ1Ø#Ø!ôAð,
ô" ×%Ñ%¤wØ×'Ñ'¨yô(ð#,
ô( ×*Ñ*¬GØ×'Ñ'¨{ô-ð),
ô. ×+Ñ+¬WØ×'Ñ'¨|ô.ð/,
ô4 ×+Ñ+¬WØ×'Ñ'Ð/AÈuô.ð5,
ô: ×-Ñ-¬wØ×'Ñ'¨{ô0ð;,
ô@ ×-Ñ-¬wØ×'Ñ'Ð/Fô0ðA,
ôF ×/Ñ/°×1MÑ1MðG,
ôH ×%Ñ%Ô'AðI,
ôJ ×#Ñ# T×%;Ñ%;ðK,
ôL ×1Ñ1õ 4ðM,
ôR ×7Ñ7õ :.ðS,
ôV ×)Ñ)¨4×+EÑ+EñW,
ˆð\ "×%Ñ% d×&6Ñ&6Ó7ˆ	ÙØØØØØØñ
ð ñ
ð 	
r6   c                óf   <€ V ^8„  d   QhRS[ RS[ RS[RS[RS[RS[RS[RS[R	S[S[ S[3,          /	# )
r|   ré   r˜   rê   rë   rì   rí   rñ   rò   r~   ©r€   rï   rÏ   r   r   )r�   r¯   s   "€r7   r‚   rÞ   M  sm   ø€ ÷ 2ñ 2áð2ñ ð2ñ ð	2ñ
 ð2ñ ð2ñ ð2ñ ð2ñ ð2ñ 
‰c‘3ˆh�ñ2r6   c	                óv  € \         P                  V4      .p
VR8X  d_   V'       gW   V^ 8”  dP   V'       d   \         P                  M\         P                  pV! 4       .V,          pV'       d	   WÊ,           MW¬,           p
VR8X  d3   V'       g+   V^ 8”  d$   V
\         P	                  4       .V,          ,           p
RVRV
/# )z#Format as a list with image tokens.r™   r˜   r}   )r¬   r²   rÄ   r¾   rÉ   )rä   ré   r˜   rê   rë   rì   rí   rñ   rò   r  r}   Úimage_builderÚimage_tokenss   &&&&&&&&&,   r7   r  Ú(MessageFormatter._format_list_with_imageM  sŸ   € ô "×.Ñ.¨vÓ6Ð7ˆà�6Œ>×"2°zÀA´~÷ !ô ×0Ò0ä#×1Ñ1ð ñ
 *›OÐ,¨zÕ9ˆLß0;�lÖ,ÀÕAWˆGà�6Œ>×"2°zÀA´~Ø¤×!=Ñ!=Ó!?Ð @À:Õ MÕMˆGà˜˜i¨Ð1Ð1r6   c                óZ   <€ V ^8„  d   QhRS[ RS[ RS[RS[RS[RS[RS[S[ S[3,          /# rè   r  )r�   r¯   s   "€r7   r‚   rÞ   j  sY   ø€ ÷ 1ñ 1áð1ñ ð1ñ ð	1ñ
 ð1ñ ð1ñ ð1ñ 
‰c‘3ˆh�ñ1r6   c                ó   € RVRV/# )z(Format a regular text-only chat message.r˜   r}   r   )rä   ré   r˜   rê   rë   rì   rí   r  s   &&&&&&&,r7   r  Ú"MessageFormatter._format_text_onlyj  s   € ð ˜˜i¨Ð0Ð0r6   c                óf   <€ V ^8„  d   QhRS[ RS[ RS[RS[RS[RS[RS[ RS[R	S[S[ S[3,          /	# )
r|   ré   r˜   rê   rë   rì   rí   ró   rñ   r~   r  )r�   r¯   s   "€r7   r‚   rÞ   w  sm   ø€ ÷ &ñ &áð&ñ ð&ñ ð	&ñ
 ð&ñ ð&ñ ð&ñ ð&ñ ð&ñ 
‰c‘3ˆh�ñ&r6   c	                ó^  € VR8X  d   \         P                  M\         P                  p
RVRV
! V4      ./pVR8X  d«   V'       gg   V^ 8”  d`   V'       d+   \         P                  4       .V,          VR,          ,           M)VR,          \         P                  4       .V,          ,           VR&   V'       g5   V^ 8”  d.   VR,          \         P	                  4       .V,          ,           VR&   VR8X  dA   VR,          ^ ,          P                  RVR,          ^ ,          P                  R4      4      VR&   V# )z%Format as a list with typed messages.r}   r˜   r™   Ú	assistantr†   )r¬   r¶   r²   r¾   rÉ   r�   )rä   ré   r˜   rê   rë   rì   rí   ró   rñ   r  Úmsg_funcrž   s   &&&&&&&&&,  r7   r  Ú-MessageFormatter._format_list_with_image_typew  s  € ð ˜yÔ(ô ×*Ò*ä×,Ñ,ð 	ð
 ˜4 ©X°fÓ-=Ð,>Ð?ˆà�6Œ>ß#¨
°Q¬÷ #ô $×1Ñ1Ó3Ð4°zÕAÀGÈIÕDVÖVà  Õ+Ü%×3Ñ3Ó5Ð6¸ÕCõDð ˜	Ñ"÷ $¨
°Q¬à˜IÕ&¬.×*FÑ*FÓ*HÐ)IÈJÕ)VÕVð ˜	Ñ"ð �;ÔØ!(¨Õ!3°AÕ!6×!:Ñ!:Ø˜7 9Õ-¨aÕ0×4Ñ4°VÓ<ó"ˆG�IÑð ˆr6   c                óf   <€ V ^8„  d   QhRS[ RS[ RS[RS[RS[RS[RS[ RS[R	S[S[ S[3,          /	# )
r|   ré   r˜   rê   rë   rì   rí   rõ   rñ   r~   r  )r�   r¯   s   "€r7   r‚   rÞ   Ÿ  sm   ø€ ÷ 2ñ 2áð2ñ ð2ñ ð	2ñ
 ð2ñ ð2ñ ð2ñ ð2ñ ð2ñ 
‰c‘3ˆh�ñ2r6   c	                ó"  € Tp
VR8X  d,   V'       g$   V^ 8”  d   Wu,          pV'       d   V V
 2MV
 V 2p
VR8X  dK   V'       gC   V^ 8”  d<   RP                  \        V4       Uu. uF  pRV^,            R2NK  	  up4      pV V
 2p
RVRV
/# u upi )z%Format with image tokens in the text.r™   r…   ú<|audio_ú|>r˜   r}   )r�   Úrange)rä   ré   r˜   rê   rë   rì   rí   rõ   rñ   r  r}   ÚprefixÚiÚaudio_prefixs   &&&&&&&&&,    r7   r  Ú#MessageFormatter._format_with_tokenŸ  s    € ð ˆà�6Œ>×"2°zÀA´~ØÕ'ˆFß.9˜˜  	Ñ*À'ÀÈ6È(Ð?SˆGà�6Œ>×"2°zÀA´~ØŸ7™7ÄÀjÔ@QÓ#RÑ@Q¸1 h¨q°­s¨e°2Ó$6Ñ@QÑ#RÓSˆLØ%˜ w iÐ0ˆGà˜˜i¨Ð1Ð1ùò $Ss   Á#Bc                óZ   <€ V ^8„  d   QhRS[ RS[ RS[RS[RS[RS[RS[S[ S[3,          /# rè   r  )r�   r¯   s   "€r7   r‚   rÞ   ¸  sY   ø€ ÷ 2ñ 2áð2ñ ð2ñ ð	2ñ
 ð2ñ ð2ñ ð2ñ 
‰c‘3ˆh�ñ2r6   c           
     ó¾  € TpVR8X  dÆ   . p	V'       gL   V^ 8”  dE   T	P                  RP                  \        V4       U
u. uF  p
RV
^,            R2NK  	  up
4      4       V'       gL   V^ 8”  dE   T	P                  RP                  \        V4       U
u. uF  p
RV
^,            R2NK  	  up
4      4       V	'       d   RP                  V	4       V 2pRVRV/# u up
i u up
i )zjFormat with numbered image/audio tokens.

Order follows Phi-4 convention: <|image_N|> before <|audio_N|>.
r™   r…   z<|image_r  r  r˜   r}   )rŽ   r�   r  )rä   ré   r˜   rê   rë   rì   rí   r  r}   Úprefix_partsr   s   &&&&&&&,   r7   r  Ú(MessageFormatter._format_numbered_tokens¸  sÛ   € ð ˆà�6Œ>àˆLß#¨
°Q¬Ø×#Ñ#Ø—G‘G¼¸zÔ9JÓKÑ9J°A˜x¨¨!­ u¨BÓ/Ñ9JÑKÓLô÷ $¨
°Q¬Ø×#Ñ#Ø—G‘G¼¸zÔ9JÓKÑ9J°A˜x¨¨!­ u¨BÓ/Ñ9JÑKÓLô÷ ØŸW™W \Ó2Ð3°G°9Ð=�à˜˜i¨Ð1Ð1ùò Lùò Ls   ¾CÂCc                óZ   <€ V ^8„  d   QhRS[ RS[ RS[RS[RS[RS[RS[S[ S[3,          /# rè   r  )r�   r¯   s   "€r7   r‚   rÞ   Ø  sY   ø€ ÷ "2ñ "2áð"2ñ ð"2ñ ð	"2ñ
 ð"2ñ ð"2ñ ð"2ñ 
‰c‘3ˆh�ñ"2r6   c           	     ó"  € VR,          p\        V\        4      '       g   V.pVP                  RR	4      p	VP                  R^4      p
\        V
\        4      '       d   T
MV
.\        V4      ,          p\        V4      \        V4      8w  d%   \	        R\        V4       R\        V4       R24      h\        W‹4       UUu. uF  w  rÍ\        P                  WÉV4      NK  	  pppVP                  \        P                  V4      4       RVRV/# u uppi )
a
  Format a video message with text.

Accepts either a single path in ``video=`` or a list of paths; emits
one ``{"type": "video", ...}`` content item per video, followed by the
text. ``fps`` may be a scalar (applied to all) or a list of the same
length as the videos.
rÑ   rÍ   rÎ   zGot z fps values for z videos.r˜   r}   rÔ   )
rŠ   r‹   r�   Úlenrã   Úzipr¬   rÒ   rŽ   r²   )rä   ré   r˜   rê   rë   rì   rí   r  ÚvideosrÍ   rÎ   Úfps_listÚvÚfr}   s   &&&&&&&,       r7   r  Ú&MessageFormatter._format_video_messageØ  sú   € ð" ˜•ˆÜ˜&¤$×'Ò'Ø�XˆFà—Z‘Z ¨iÓ8ˆ
Ø�j‰j˜ Ó"ˆÜ$ S¬$×/Ò/‘3°c°U¼SÀ»[Õ5HˆÜˆx‹=œC ›KÔ'ÜØ”s˜8“}�oÐ%5´c¸&³k°]À(ÐKóð ô ˜FÔ-ô
á-‘�ô ×(Ñ(¨¸Ö:Ù-ð 	ñ 
ð 	�‰”~×2Ñ2°6Ó:Ô;Ø˜˜i¨Ð1Ð1ùó
s   Â=!D)râ   rÜ   N)r™   FFrÕ   rÕ   )FF)r}   T)T©r™   FFr   r   )r   r   r    r!   r"   rå   r
  r  r  r  r  r  r  r5   r×   rØ   s   @r7   rÚ   rÚ   è   sd   ø‡ € Ù@÷Að A÷Z
ò Z
÷x2ò 2÷:1ð 1÷&ò &÷P2ò 2÷22ð 2÷@"2÷ "2ð "2r6   rÚ   c                ó¼   € V ^8„  d   QhR\         R\         R\         R\        R\        R\        R\        R\        \         \        \         \
        3,          3,          /# )	r|   rÜ   ré   r˜   rê   rë   rì   rí   r~   rî   )r�   s   "r7   r‚   r‚   ý  sj   € ÷ $ñ $Üð$äð$ô ð$ô ð	$ô
 ð$ô ð$ô ð$ô Œ3””Sœ#�X•ÐÕñ$r6   c                óH   € \        V 4      pVP                  ! VVVVVV3/ VB # )a^  
Get the appropriate JSON message based on the specified model.

Args:
    model_name: The model for which to generate the message
    prompt: The text prompt to be included in the message
    role: The role of the message (default: "user")
    skip_image_token: Whether to skip adding image tokens
    skip_audio_token: Whether to skip adding audio tokens
    num_images: Number of image tokens to add
    num_audios: Number of audio tokens to add
    **kwargs: Additional arguments (e.g., video path, max_pixels, fps)

Returns:
    A dictionary or string representing the message for the specified model
)rÚ   r
  )	rÜ   ré   r˜   rê   rë   rì   rí   r  r	  s	   &&&&&&&, r7   Úget_message_jsonr3  ý  s=   € ô4 ! Ó,€Ià×#Ò#ØØØØØØñð ñð r6   c                ó€   € V ^8„  d   QhR\         \        \        \        3,          ,          R\        R\        R\        /# )r|   ÚmessagesÚadd_generation_promptÚtokenizer~   )r   r   r€   r   rï   )r�   s   "r7   r‚   r‚   $  sE   € ÷ x+ñ x+ä”4œœS˜•>Õ"ðx+ô  ðx+ô ð	x+ô 	ñx+r6   c                ó  a aaaaa€ R V 3R lloR V3R lloR VVVV3R llpR R lpSP                  R	R
4      pR R lp R
p	S e)   \        S R4      '       d   Vf   \        S R	R
4      e   S p	M‡S eY   \        S R4      '       dG   \        S P                  R4      '       d+   Vf   \        S P                  R	R
4      e   S P                  p	M+S e(   \        S R4      '       d   Vf   \        S R	R
4      e   S p	V	f   V! 4       # \	        S4      p
RV
9  d   V! V	R4      '       d   RV
R&    V	P
                  ! S3RVRS/V
B #   \         d%   pTf   T! T4      '       d   T! 4       u R
p?# h R
p?ii ; i  \         d    T! 4       u # i ; i)z0Apply chat template using processor's tokenizer.c                ó$   € V ^8„  d   QhR\         /# r¹   rÝ   )r�   s   "r7   r‚   Ú'get_chat_template.<locals>.__annotate__-  s   € ÷ ñ œcñ r6   c                  óâ   <€ Sf   R# \        SRR 4      p \        V \        4      '       d   V '       d   V # \        SRR 4      p\        VRR 4      p \        V \        4      '       d   V '       d   V # R# )Nrô   r   Ú	tokenizer)r›   rŠ   r€   )r   r<  Ú	processors     €r7   Ú_get_image_tokenÚ+get_chat_template.<locals>._get_image_token-  sc   ø€ ØÒÙä˜i¨¸Ó=ˆÜ�k¤3×'Ò'¯KØÐä˜I {°DÓ9ˆ	Ü˜i¨¸Ó=ˆÜ�k¤3×'Ò'¯KØÐár6   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r|   r}   r   r~   r   )r�   s   "r7   r‚   r:  <  s!   € ÷ -;ñ -;¤#ð -;´Cð -;¼Cñ -;r6   c                 ó  <€ \        V \        4      '       d   V # \        V \        4      '       Edõ   . pSP                  R R4      pWRR0pV  EFI  p\        V\        4      '       Ed   VP                  RR4      pVR
9   dS   VP                  RR4      ;'       g    VP                  RR4      pV'       d   VP                  \        V4      4       K„  K†  VR9   d   VP                  V4       K   VR9   d   VP                  R4       Kº  VR8X  d   VP                  R4       KÔ  VP                  RR4      ;'       g    VP                  RR4      pV'       d   VP                  \        V4      4       EK%  EK(  Vf   EK/  VP                  \        V4      4       EKL  	  . pRp	V Fb  p
V
'       g   K  W¤9   pV	'       d7   V'       g/   V
^ ,          P                  4       '       g   VP                  R	4       VP                  V
4       Tp	Kd  	  RP                  V4      P                  4       # \        V \        4      '       dB   V P                  RR4      ;'       g    V P                  RR4      pV'       d   \        V4      # R# V e   \        V 4      # R# )Úaudio_tokenz<audio>z<video>r„   r…   r†   r}   rÑ   Fr‡   rˆ   )r½   rÃ   Úinput_image)rÈ   Úinput_audio)	rŠ   r€   r‹   r�   rŒ   rŽ   Úisspacer�   r�   )r}   r   ÚpartsÚaudio_markerÚmultimodal_markersr’   r“   r†   Ústitched_partsÚprev_is_markerÚpartÚcurrent_is_markerr  s   &&          €r7   Ú_flatten_contentÚ+get_chat_template.<locals>._flatten_content<  s	  ø€ Ü�gœs×#Ò#ØˆNä�gœt×$Ó$ØˆEØ!Ÿ:™: m°YÓ?ˆLØ"-¸YÈ	Ð!RÐÜ�Ü˜d¤D×)Ó)Ø $§¡¨°Ó 4�IØ Ð$:Ô:Ø#Ÿx™x¨°Ó3×NÐN°t·x±xÀ	È2Ó7N˜ßØ!ŸL™L¬¨T«Ö3ñ  à"Ð&KÔKØŸ™ [Ö1Ø"Ð&>Ô>ØŸ™ YÖ/Ø" gÔ-ØŸ™ YÖ/à#Ÿx™x¨°Ó3×NÐN°t·x±xÀ	È2Ó7N˜ßØ!ŸL™L¬¨T«×3ò  àÕ%Ø—L‘L¤ T£×+ñ%  ð(  ˆNØ"ˆNÛ�ßÙØ$(Ñ$>Ð!ß!×*;ÀDÈÅGÇOÁO×DUÒDUØ"×)Ñ)¨#Ô.Ø×%Ñ% dÔ+Ø!2’ñ ð —7‘7˜>Ó*×0Ñ0Ó2Ð2ä�gœt×$Ò$Ø—;‘;˜v rÓ*×HÐH¨g¯k©k¸)ÀRÓ.HˆDß $”3�t“9Ð,¨"Ð,à&Ò2Œs�7‹|Ð:¸Ð:r6   c                ó$   € V ^8„  d   QhR\         /# r¹   rÝ   )r�   s   "r7   r‚   r:  k  s   € ÷ )(ñ )(¤sñ )(r6   c                  ó`  <€ S! 4       p . pS
 F¢  p\        V\        4      '       d   VP                  R RRV/4       K0  \        V\        4      '       d?   VP                  R VP	                  R R4      RS! VP	                  RR4      V 4      /4       K„  VP                  R RR\        V4      /4       K¤  	  V'       g   R# \        V4      ^8X  d&   V^ ,          R ,          R8X  d   V^ ,          R,          # . pV F~  pVP	                  R R4      pVP	                  RR4      pVR9   d6   VP                  4       pTP                  V'       d   V RV 2MV R24       Kc  TP                  V'       d   TMR4       K€  	  S	'       d   VP                  R4       RP                  V4      P                  4       # )	r˜   r™   r}   r…   z: Ú:z
Assistant:Ú
)Úsystemr™   r  Útool)	rŠ   r€   rŽ   rŒ   r�   r)  Ú
capitalizer�   r�   )r   r§   rž   Úlinesr˜   r}   r  rM  r>  r6  r5  s          €€€€r7   Ú_messages_to_plain_promptÚ4get_chat_template.<locals>._messages_to_plain_promptk  s}  ø€ Ù&Ó(ˆØˆ
ãˆGÜ˜'¤3×'Ò'Ø×!Ñ! 6¨6°9¸gÐ"FÔGÙä˜'¤4×(Ò(Ø×!Ñ!à §¡¨F°FÓ ;Ø!Ñ#3Ø#ŸK™K¨	°2Ó6¸ó$ðôñ à×Ñ˜v v¨y¼#¸g»,ÐGÖHñ!  ÷$ Ùäˆz‹?˜aÔ J¨q¥M°&Õ$9¸VÔ$CØ˜a•= Õ+Ð+àˆÛ!ˆGØ—;‘;˜v vÓ.ˆDØ—k‘k )¨RÓ0ˆGØÐ>Ô>ØŸ™Ó*�Ø—‘·w ˜x r¨'¨Ñ3ÀvÀhÈaÀLÖQà—‘¯™W°RÖ8ñ "÷ !Ø�L‰L˜Ô&à�y‰y˜Ó×%Ñ%Ó'Ð'r6   c                ó0   € V ^8„  d   QhR\         R\        /# )r|   Úerrorr~   )Ú	Exceptionrï   )r�   s   "r7   r‚   r:  –  s   € ÷ 
ñ 
¤yð 
´Tñ 
r6   c                 ó<   € \        V 4      pR V9   ;'       g    RV9   # )zchat_template is not setzno template argument was passedrÝ   )rZ  rž   s   & r7   Ú_missing_template_errorÚ2get_chat_template.<locals>._missing_template_error–  s*   € Ü�e“*ˆà&¨'Ñ1÷ <ð <Ø0°GÑ;ð	
r6   Úchat_templateNc                ó<   € V ^8„  d   QhR\         R\        R\        /# )r|   Útemplate_processorÚnamer~   )r   r€   rï   )r�   s   "r7   r‚   r:  Ÿ  s!   € ÷ 	
ñ 	
´#ð 	
¼Sð 	
ÄTñ 	
r6   c                 óh  €  \         P                  ! V P                  4      pYP
                  9   ;'       ge    \        ;QJ d4    R TP
                  P                  4        4       F  '       g   K   R# 	  R # ! R TP
                  P                  4        4       4      #   \        \        3 d     R # i ; i)Fc              3   óp   "  € T F,  pVP                   \        P                  P                  8H  x € K.  	  R # 5irø   )ÚkindÚinspectÚ	ParameterÚVAR_KEYWORD)Ú.0Ú	parameters   & r7   Ú	<genexpr>ÚCget_chat_template.<locals>._supports_template_kw.<locals>.<genexpr>¥  s,   é € ð 3
á:�	ð �N‰Nœg×/Ñ/×;Ñ;Ö;Û:ùs   ‚46T)rf  Ú	signatureÚapply_chat_templater¦   rã   Ú
parametersÚanyÚvalues)ra  rb  rm  s   && r7   Ú_supports_template_kwÚ0get_chat_template.<locals>._supports_template_kwŸ  s§   € ð	Ü×)Ò)Ð*<×*PÑ*PÓQˆIð ×+Ñ+Ñ+÷ 
ð 
¯s«sñ 3
à&×1Ñ1×8Ñ8Ô:ó3
¯s¬sð 	
ªsð 	
¨sñ 3
à&×1Ñ1×8Ñ8Ô:ó3
ó 0
ð 	
øô œ:Ð&ô 	Úð	ús   ‚ B ÂB1Â0B1rn  r<  Úenable_thinkingFr7  r6  )r�   rš   r›   r<  rŒ   rn  rã   ÚAttributeError)r=  r5  r6  r7  r  rW  r]  Úchat_template_overriderr  ra  Útemplate_kwargsÚerM  r>  s   fff&l       @@r7   Úget_chat_templatery  $  s»  ý€ ÷ð ÷-;ð -;÷^)(ó )(õV
ð $ŸZ™Z¨¸Ó>Ðõ	
ð2+Ø!ÐàÒ!Ü˜	Ð#8×9Ò9à&Ò2Ü˜9 o°tÓ<ÒHð "+ÑàÒ!Ü˜	 ;×/Ò/Ü˜	×+Ñ+Ð-B×CÒCà&Ò2Ü˜9×.Ñ.°ÀÓFÒRð "+×!4Ñ!4ÑØÒ"¤w¨yÐ:O×'PÒ'Pð 'Ò2Ü˜9 o°tÓ<ÒHà%.Ð"àÒ%Ù,Ó.Ð.ä˜v›,ˆØ OÔ3Ñ8MØÐ 1÷9
ò 9
ð 27ˆOÐ-Ñ.ð
	Ø%×9Ò9Øñà!ðð '<ðð "ñ	ð øô ô 	Ø%Ò-Ñ2IÈ!×2LÒ2LÙ0Ó2Õ2Øûð	ûô ô +Ù(Ó*Ò*ð+ús[   ÁE4 Á
B9E4 Ä E4 Ä%E4 Ä+E ÅE1ÅE,ÅE,Å%E1Å&E4 Å+E,Å,E1Å1E4 Å4F	ÆF	c                óx  € V ^8„  d   QhR\         \        \        \        3,          \        3,          R\         \        \        \        \        3,          \        \        ,          3,          R\
        R\
        R\        R\        R\         \        \        \        \        3,          ,          \        \        3,          /# )r|   Úconfigré   r6  Úreturn_messagesrì   rí   r~   )r   r   r€   r   r   rï   rÏ   )r�   s   "r7   r‚   r‚   ß  s¥   € ÷ QSñ QSä”$”sœC�x•.¤#Ð%Õ&ðQSô ”#”tœC¤˜H•~¤t¬C¥yÐ0Õ1ðQSô  ð	QSô
 ðQSô ðQSô ðQSô Œ4””Sœ#�X•Õ¤¤cÐ)Õ*ñQSr6   c                óî  € \        V\        4      '       d   TMVP                  pVR,          pV\        9  Ed9   \        V\        4      '       d
   RRRV/.p	EM\        V\        4      '       d.   \        V4      p
\        V
P                  RR4      4      V
R&   V
.p	M¿\        V\        4      '       dš   . p	V F�  p\        V\        4      '       d   V	P                  RRRV/4       K0  \        V4      ;pf   KA  Vw  rÞ\        V\        4      '       d   \        V4      MRV/p
VR8w  d   \        V4      V
R&   V	P                  V
4       K’  	  MRRR\	        V4      /.p	V'       d   V	# \        W	V3/ VB # . p	\        V\        4      '       d#   V	P                  \        VV3RVRV/VB 4       EM$\        V\        4      '       dy   VP                  RR4      pR	V9   g   R
V9   g   VR8X  d   V	P                  \        V4      4       EMË\        VR,          4      pV	P                  \        VVV3RVRV/VB 4       EM–\        V\        4      '       Ed€   Rp\        V4       FC  w  pp\        V\        4      '       d   TpK   \        V4      ;pf   K1  V^ ,          R9  g   KA  TpKE  	  \        V4       EF  w  pp\        V\        4      '       d6   VV8H  pV	P                  \        VV3RV'       * RV'       * RVRV/VB 4       KR  \        V4      ;pf   Kc  Vw  rÞ\        V\        4      ;'       d     R	V9   ;'       g    R
V9   ;'       g    VR8H  pV'       d   V	P                  \        V4      4       KÂ  \        V4      pVV8H  pT	P                  \        VVV3RV'       * ;'       g    VR9   RV'       * ;'       g    VR9   RVRV/VB 4       EK  	  V'       d   V	# VR9   d
   V	R,          # \        W	V3/ VB # )a  
Apply chat template to prompts.

Args:
    processor: The processor with chat template functionality
    config: Model configuration
    prompt: Single prompt string, dict, or list of prompts
    add_generation_prompt: Whether to add generation prompt
    return_messages: Whether to return messages list instead of template
    num_images: Number of images in the input
    num_audios: Number of audio files in the input
    **kwargs: Additional arguments for message formatting

Returns:
    Formatted messages or chat template
Ú
model_typer˜   r™   r}   r…   rT  rì   rí   r    Útool_call_idrê   rë   éÿÿÿÿ)rS  r  rT  )rS  r  )ru   rr   rq   rt   )rŠ   rŒ   Ú__dict__rá   r€   r”   r�   r‹   rŽ   rœ   ry  r3  rª   Ú	enumerate)r=  r{  ré   r6  r|  rì   rí   r  r~  r5  Úmsgr’   Úrole_contentr˜   r}   Úlast_user_idxr   ÚpÚrcÚ	is_targetÚhas_tool_metadatas   &&&&&&&,             r7   rn  rn  ß  s'  € ô4 " &¬$×/Ò/‰V°V·_±_€FØ˜Õ%€Jð œÕ%Ü�fœc×"Ò"Ø ¨°FÐ;Ð<ŠHÜ˜¤×%Ò%Ü�v“,ˆCÜ6°s·w±w¸yÈ"Ó7MÓNˆC�	‰NØ�u‰HÜ˜¤×%Ò%ØˆHÛ�Ü˜d¤C×(Ò(Ø—O‘O V¨V°YÀÐ$EÖFÜ&7¸Ó&=Ð=�lÔJØ$0‘M�DÜ(2°4¼×(>Ò(>œ$˜tœ*ÀVÈTÀN�CØ˜v”~Ü)BÀ7Ó)K˜˜I™Ø—O‘O CÖ(ò ð   ¨´C¸³KÐ@ÐAˆHçØˆOÜ  Ð6KÑVÈvÑVÐVð €Hä�&œ#×Òà�‰ÜØØñð &ðð &ð	ð
 ñö	
ô 
�FœD×	!Ò	!à�z‰z˜& &Ó)ˆØ˜6Ô! ^°vÔ%=ÀÈÄØ�O‰OÔ:¸6ÓBÖCä/°°yÕ0AÓBˆGØ�O‰OÜ ØØØñð  *ð	ð
  *ðð ñö	ô 
�FœD×	!Ó	!àˆÜ˜fÖ%‰DˆAˆqÜ˜!œS×!Ò!Ø !’Ü)¨!Ó,Ð,�"Ô9Ø�a•5Ð ?Ö?Ø$%’Mñ &ô ˜f×%‰DˆAˆqÜ˜!œS×!Ò!Ø Ñ.�	Ø—‘Ü$Ø"Øñð .7¬ðð .7¬ð	ð
 $.ðð $.ðð !ñö
ô #4°AÓ"6Ð6�,ÔCØ ,‘�ô %/¨q´$Ó$7÷ %ð %Ø  AÑ%×NÐN¨¸1Ñ)<×NÐNÀÈÁð "÷ %Ø—O‘OÔ$BÀ1Ó$EÖFô 8¸Ó@�GØ ! ]Ñ 2�IØ—O‘OÜ(Ø&Ø#Ø ñð 2;¬]÷ .?ð .?Ø#Ð'>Ñ>ðð 2;¬]÷ .?ð .?Ø#Ð'>Ñ>ðð (2ðð (2ðð %ñ÷ñ7 &÷T Øˆð ÐFÔFØ˜�|Ðä˜YÐ2GÑRÈ6ÑRÐRr6   >   ra   ru   rt   r^   rk   rh   rf   r0  )F)TFr   r   )%rf  r£   Úenumr   Ú	functoolsr   Útypingr   r   r   r   r
   r*   r#   r$   r)   r.   r%   r&   r,   r'   r+   r-   r/   r0   r2   r1   rá   r   r”   rœ   rª   r¬   rÚ   r3  ry  rn  r   r6   r7   Ú<module>r�     sÍ  ðÛ Û Ý Ý ß )Ó )ô(�Dô (ð0Hà�×.Ñ.ðHð ˆM×*Ñ*ðHð �×-Ñ-ð	Hð
 �×3Ñ3ðHð ˆ}×2Ñ2ðHð ˆ}×2Ñ2ðHð �-×/Ñ/ðHð �m×3Ñ3ðHð �M×7Ñ7ðHð �×-Ñ-ðHð �-×5Ñ5ðHð �×3Ñ3ðHð �×3Ñ3ðHð �M×7Ñ7ðHð  ˆ}×2Ñ2ð!Hð" �=×6Ñ6ð#Hð$ �m×9Ñ9ñ%Hð& �×)Ñ)ð'Hð( �=×4Ñ4ð)Hð* �×3Ñ3ð+Hð, ˆ]×0Ñ0ð-Hð. �×4Ñ4ð/Hð0 ˆ}×2Ñ2ð1Hð2 �×3Ñ3ð3Hð4 �}×>Ñ>ð5Hð6 �]×7Ñ7ð7Hð8 ˜M×>Ñ>ð9Hð: '¨×(JÑ(Jð;Hð< ˆ}×,Ñ,ð=Hð> �×-Ñ-ð?Hð@ �m×9Ñ9ðAHðB ˆm×-Ñ-ðCHðD ˆ}×6Ñ6ðEHðF ˆm×5Ñ5òGHðH �m×=Ñ=ðIHðJ �}×>Ñ>ðKHðL ˆm×+Ñ+ðMHðN ˆ}×2Ñ2ðOHðP ˆ]×*Ñ*ðQHðR �-×/Ñ/ðSHðT �m×3Ñ3ðUHðV �}×4Ñ4ðWHðX ˆm×+Ñ+ðYHðZ ˆ}×6Ñ6ð[Hð\ ˆm×1Ñ1ð]Hð^ �=×6Ñ6ð_Hð` ˆ}×.Ñ.ðaHðd �=×4Ñ4ðeHðf �=×4Ñ4ðgHðh �=×4Ñ4ðiHðj ˆm×1Ñ1òkHðl ˆm×1Ñ1ðmHðn �m×/Ñ/ðoHðp �m×7Ñ7ðqHðr �]×6Ñ6ðsHðt �=×4Ñ4ðuHðv �=×4Ñ4ðwHðx �-×5Ñ5ðyHðz �×3Ñ3ð{Hð~ �×*Ñ*ðHð@ ˆ]×&Ñ&ðAHðB �-×+Ñ+ðCHðD �-×+Ñ+ðEHðF �×6Ñ6ðGHðH ˆm×%Ñ%ðIHðJ ˜}×6Ñ6ðKHðL �=×*Ñ*ðMHðN �×'Ñ'ñOH€òVÐ õ$+õNõ÷2&
ñ &
÷RR2ñ R2÷j$÷Nx+÷vQSñ QSr6   