ó
    pyüiŸŠ  ã                   ó~  • S SK r S SKJr  S SKrS SKJr  SSKJrJ	r	J
r
Jr  SSKJr  SSKJr  SSKJr  \" 5       (       a  S SKr\" \5      rS	S
SS.SSS.S.\	S\
S   0S\
S   0S.r\" \S   R/                  5       5      r " S S\5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S \5      r " S! S"\5      r " S# S$\5      r  " S% S&\5      r! " S' S(\5      r" " S) S*\5      r# " S+ S,\5      r$ " S- S.\5      r%\\\\\\\\ \!\"\#\#\$\%S/.r&S0 r'   S7S1\S2\(S-  S3\)S-  S4\(4S5 jjr*S8S6 jr+g)9é    N)Ú
NamedTuple)Útqdmé   )ÚGGUF_CONFIG_DEFAULTS_MAPPINGÚGGUF_CONFIG_MAPPINGÚGGUF_TOKENIZER_MAPPINGÚ_gguf_parse_value)Úis_torch_available)Úis_gguf_available)Ú
get_loggerÚversionÚtensor_countÚkv_count)r   r   r   Ú	file_typeÚquantization_version)r   r   )ÚGGUFÚgeneralÚ	tokenizerÚtokenizer_config)ÚignoreÚconfigr   r   r   c                   óH   • \ rS rSr% \R
                  \S'   \\S'   \\S'   Sr	g)Ú
GGUFTensoré8   ÚweightsÚnameÚmetadata© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚnpÚndarrayÚ__annotations__ÚstrÚdictÚ__static_attributes__r   ó    Úe/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/modeling_gguf_pytorch_utils.pyr   r   8   s   ‡ Ø�Z‰ZÓØ
ƒIØ†Nr)   r   c                   óZ   • \ rS rSrSS jrS\S\4S jrS\\\4   S\S	\S\4S
 jrS r	Sr
g)ÚTensorProcessoré>   Nc                 ó$   • U=(       d    0 U l         g ©N©r   )Úselfr   s     r*   Ú__init__ÚTensorProcessor.__init__?   s   € Ø—l ˆ�r)   Úhf_nameÚreturnc                 ó   • U$ )z@
Preprocesses the tensor name to ease loading the GGUF tensors.
r   ©r1   r4   s     r*   Úpreprocess_nameÚTensorProcessor.preprocess_nameB   s	   € ð ˆr)   Úgguf_to_hf_name_mapÚsuffixÚ	qual_namec                 ó   • g)zÐ
Called when get_gguf_hf_weights_map fails to map a HF parameter
(tensor) and corresponding GGUF one.

This is particularly useful to resolve one-to-many
HF-GGUF mappings sometimes appear in some MoE models.
Nr   )r1   r:   r;   r<   r4   s        r*   Úperform_fallback_tensor_mappingÚ/TensorProcessor.perform_fallback_tensor_mappingH   s   € ð 	r)   c                 ó   • [        X0 5      $ r/   ©r   ©r1   r   r   Úkwargss       r*   ÚprocessÚTensorProcessor.processT   s   € Ü˜'¨Ó,Ð,r)   r0   r/   )r   r    r!   r"   r2   r&   r8   r'   r>   rD   r(   r   r)   r*   r,   r,   >   sL   † ô#ð sð ¨sô ð
Ø#'¨¨S¨¡>ð
Ø;>ð
ØKNð
ØY\ô
õ-r)   r,   c            	       ó€   ^ • \ rS rSrSU 4S jjrS r SS\R                  S\S\S-  S\R                  4S	 jjr	S
r
U =r$ )ÚLlamaTensorProcessoréX   Nc                 ó    >• [         TU ]  US9  g ©Nr0   ©Úsuperr2   ©r1   r   Ú	__class__s     €r*   r2   ÚLlamaTensorProcessor.__init__Y   ó   ø€ Ü‰Ñ ÐÒ'r)   c                 ó&  • SU;   d  SU;   az  U R                   R                  S5      nU R                   R                  S5      nS XE4;   a  [        X0 5      $ SU;   a  U R                  XU5      nOSU;   a  U R                  XU5      n[        X0 5      $ )Nz.attn_k.z.attn_q.Únum_attention_headsÚnum_key_value_heads)r   Úgetr   Ú_reverse_permute_weights)r1   r   r   rC   Ú	num_headsÚnum_kv_headss         r*   rD   ÚLlamaTensorProcessor.process\   s�   € Ø˜Ó ¨tÓ!3ØŸ™Ÿ™Ð(=Ó>ˆIØŸ;™;Ÿ?™?Ð+@ÓAˆLà˜	Ð0Ó0Ü! '°Ó4Ð4Ø˜TÓ!Ø×7Ñ7¸ÈIÓV‘Ø˜tÓ#Ø×7Ñ7¸ÈLÓY�Ü˜'¨Ó,Ð,r)   r   Ún_headrW   r5   c                 óØ   • Ub  X#:w  a  UnUR                   S   U-  S-  nUR                  " X$S/UR                   SS  Q76 nUR                  SS5      R                  UR                   5      $ )Nr   é   r   )ÚshapeÚreshapeÚswapaxes)r1   r   rY   rW   ÚdimÚws         r*   rU   Ú-LlamaTensorProcessor._reverse_permute_weightsi   sl   € ð
 Ñ#¨Ó(>Ø!ˆFà�m‰m˜AÑ &Ñ(¨AÑ-ˆØ�OŠO˜F¨Ð?¨W¯]©]¸1¸2Ð->Ò?ˆØ�z‰z˜!˜QÓ×'Ñ'¨¯©Ó6Ð6r)   r   r/   )r   r    r!   r"   r2   rD   r#   r$   ÚintrU   r(   Ú__classcell__©rN   s   @r*   rG   rG   X   sJ   ø† ÷(ò-ð LPñ
7Ø—z‘zð
7Ø+.ð
7Ø>AÀD¹jð
7à	�‰÷
7ó 
7r)   rG   c                   ó  ^ • \ rS rSr\R
                  " S5      r\R
                  " S5      r\R
                  " S5      rSU 4S jjr	S\
S\
4S jrS	\\
\
4   S
\
S\
S\
4S jrS\
4S jrS\R                   S\\
\4   S\
S\
4S jrSrU =r$ )ÚQwen2MoeTensorProcessorév   zmlp.experts.\d+.z7model\.layers\.(?P<bid>\d+)\.mlp\.experts\.gate_up_projú3(?P<name>.*\.ffn_(?P<w>gate|down|up)_exps)\.weight$c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   Ú Qwen2MoeTensorProcessor.__init__{   rP   r)   r4   r5   c                 óF   • [         R                  " U R                  SU5      $ ©Nzmlp.experts.©ÚreÚsubÚHF_EXPERT_RENAME_PATTERNr7   s     r*   r8   Ú'Qwen2MoeTensorProcessor.preprocess_name~   ó   € Ü�vŠv�d×3Ñ3°^ÀWÓMÐMr)   r:   r;   r<   c                 ó’   • [         R                  " U R                  U5      =n(       a  X4-   nXaSUS    SU 3'   XaSUS    SU 3'   g g )Núblk.Úbidú.ffn_gate_expsú.ffn_up_exps)rn   Ú	fullmatchÚHF_MOE_W13_PATTERN©r1   r:   r;   r<   r4   ÚmÚfull_hf_names          r*   r>   Ú7Qwen2MoeTensorProcessor.perform_fallback_tensor_mapping�   s_   € ô —’˜T×4Ñ4°gÓ>Ð>ˆ1Õ>Ø$Ñ.ˆLØKW $ q¨¡x j°¸v¸hÐ GÑHØIU $ q¨¡x j°¸V¸HÐ EÒFð ?r)   r   c                 óB  • [         R                  " U R                  U5      =n(       aQ  UR                  S5      nUR                  S5      nU(       a(  U R	                  XXTS      US   5        [        US 0 5      $ SU;   a  [        R                  " USS9n[        X0 5      $ )NÚtensor_key_mappingÚparsed_parametersr   r`   Úffn_gate_inp_shexpr   ©Úaxis)rn   rx   ÚGGUF_MOE_WEIGHTS_PATTERNrT   Ú_set_moe_expert_tensorr   r#   Úexpand_dims©r1   r   r   rC   r{   r   r€   s          r*   rD   ÚQwen2MoeTensorProcessor.processŠ   sš   € Ü—’˜T×:Ñ:¸DÓAÐAˆ1ÕAØ!'§¡Ð,@Ó!AÐØ &§
¡
Ð+>Ó ?ÐÞ!Ø×+Ñ+¨GÐHZÐ]cÑ[dÑHeÐghÐilÑgmÔnÜ! '¨4°Ó4Ð4Ø 4Ó'ô —n’n W°1Ñ5ˆGÜ˜'¨Ó,Ð,r)   r   r€   r`   c                 óš  • [         R                  " [        R                  " U5      5      nUS:X  a  XRS   U'   g [	        UR
                  5      nSnXg   nUS-  Xg'   X2S   ;  a$  [         R                  " XeR                  S9US   U'   US   U   n	US:X  a  U	R                  USU5      n	OU	R                  XxU5      n	U	R                  U5        g ©NÚdownÚtensorsr   r[   )ÚdtypeÚgater   ©
ÚtorchÚ
from_numpyr#   ÚcopyÚlistr\   Úzerosr�   ÚnarrowÚcopy_©
r1   r   r€   r4   r`   Útorch_weightsr\   Ú	shard_dimÚ
shard_sizeÚouts
             r*   r…   Ú.Qwen2MoeTensorProcessor._set_moe_expert_tensor—   sÆ   € Ü×(Ò(¬¯ª°Ó)9Ó:ˆØ�‹;Ø4A˜iÑ(¨Ò1ô ˜Ÿ™Ó'ˆEØˆIØÑ)ˆJØ)¨A™~ˆEÑØ°	Ñ:Ó:Ü8=¿ºÀE×QdÑQdÑ8eÐ! )Ñ,¨WÑ5Ø 1°)Ñ <¸WÑ EˆCØ�F‹{Ø—j‘j ¨A¨zÓ:‘à—j‘j ¸
ÓC�Ø�I‰I�mÕ$r)   r   r/   )r   r    r!   r"   rn   Úcompilerp   ry   r„   r2   r&   r8   r'   r>   rD   r#   r$   r…   r(   rc   rd   s   @r*   rf   rf   v   sÃ   ø† Ø!ŸzšzÐ*=Ó>ÐØŸšÐ$^Ó_ÐØ!ŸzšzÐ*`ÓaÐ÷(ðN sð N¨sô NðVØ#'¨¨S¨¡>ðVØ;>ðVØKNðVØY\ôVð- Sô -ð%¨b¯j©jð %ÈTÐRUÐW[ÐR[É_ð %Ðgjð %Ðor÷ %ò %r)   rf   c            
       óæ   ^ • \ rS rSrSr\R                  " S5      r\R                  " S5      rSU 4S jjr	S\
4S jrS\R                  S	\S
\
S\
S\4
S jrS\R                  S	\S
\
S\4S jrSrU =r$ )ÚGptOssTensorProcessoré®   a3  
Tensor processor for GPT-OSS models (MoE with 128 experts).
Handles:
- Splitting stacked expert tensors (down_proj, gate_proj, up_proj) into individual experts.
- Interleaving gate and up projections if stored in a combined tensor (gate_up_projs).
- Bias tensors (1D) are passed through without transpose.
z<blk\.(?P<bid>\d+)\.ffn_(?P<proj>down|gate|up)_projs\.weight$z-blk\.(?P<bid>\d+)\.ffn_gate_up_projs\.weight$c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   ÚGptOssTensorProcessor.__init__¼   rP   r)   r   c                 óL  • U R                   R                  U5      =n(       aW  UR                  S5      nUR                  S5      nU(       a.  U(       a'  U R                  XUS   US   U5        [	        US 0 5      $ U R
                  R                  U5      =n(       aS  UR                  S5      nUR                  S5      nU(       a*  U(       a#  U R                  XUS   U5        [	        US 0 5      $ SU;   a%  [        UR                  5      S:X  a  [	        X0 5      $ [	        X0 5      $ )Nr   r€   ru   Úprojú.biasr   )	r„   ÚmatchrT   Ú_split_moe_expert_tensorr   ÚGGUF_MOE_COMBINED_PATTERNÚ_interleave_gate_up_tensorÚlenr\   r‡   s          r*   rD   ÚGptOssTensorProcessor.process¿   s  € à×-Ñ-×3Ñ3°DÓ9Ð9ˆ1Õ9Ø!'§¡Ð,@Ó!AÐØ &§
¡
Ð+>Ó ?ÐÞ!Ö&7Ø×-Ñ-¨gÈ!ÈEÉ(ÐTUÐV\ÑT]Ð_qÔrÜ! '¨4°Ó4Ð4ð ×.Ñ.×4Ñ4°TÓ:Ð:ˆ1Õ:Ø!'§¡Ð,@Ó!AÐØ &§
¡
Ð+>Ó ?ÐÞ!Ö&7Ø×/Ñ/°ÈAÈeÉHÐVhÔiÜ! '¨4°Ó4Ð4ð �d‹?œs 7§=¡=Ó1°QÓ6Ü˜g¨RÓ0Ð0ô ˜'¨Ó,Ð,r)   r   r€   ru   r¤   r   c                 óD  • U R                   R                  SS5      n[        [        XaR                  S   5      5       H_  nX   nSU SU SU S3n	UR                  5        H  u  p«X©;   d  M  U	R                  X«5      n	M     [        R                  " USS	9US
   U	'   Ma     g)z:Split a stacked MoE tensor into individual expert tensors.Únum_local_expertsé€   r   úmodel.layers.ú.block_sparse_moe.experts.Ú.z_proj.weightT©r’   rŒ   N)	r   rT   ÚrangeÚminr\   ÚitemsÚreplacer�   Útensor)r1   r   r€   ru   r¤   r   Únum_expertsÚiÚexpert_weightr4   ÚkeyÚ
mapped_keys               r*   r§   Ú.GptOssTensorProcessor._split_moe_expert_tensor×   s    € ð —k‘k—o‘oÐ&9¸3Ó?ˆô ”s˜;¯©°aÑ(8Ó9Ö:ˆAØ#™JˆMà% c UÐ*DÀQÀCÀqÈÈÈlÐ[ˆGà#5×#;Ñ#;Ö#=‘�Ø•>Ø%Ÿo™o¨cÓ>’Gñ $>ô 5:·L²LÀÐUYÑ4ZÐ˜iÑ(¨Ó1ò ;r)   c                 óH  • U R                   R                  SS5      nUR                  S   nUS-  nUSS2SU2SS24   nUSS2US2SS24   n	[        [	        XQR                  S   5      5       H±  n
XŠ   R
                  nXš   R
                  nSU SU
 S	3nSU SU
 S
3nUR                  5        H6  u  nnXý;   a  UR                  UU5      nXþ;   d  M$  UR                  UU5      nM8     [        R                  " USS9US   U'   [        R                  " USS9US   U'   M³     g)zì
Process a combined gate+up tensor.
Expected shape: [num_experts, intermediate_size, hidden_size].
Interleaving: gate occupies first half of intermediate dimension,
up occupies second half. Transpose to [hidden, half_inter] per expert.
r­   r®   r   r[   Nr   r¯   r°   z.gate_proj.weightz.up_proj.weightTr²   rŒ   )
r   rT   r\   r³   r´   ÚTrµ   r¶   r�   r·   )r1   r   r€   ru   r   r¸   Ú
inter_sizeÚ
half_interÚ	gate_partÚup_partr¹   Úgate_weightÚ	up_weightÚ	gate_nameÚup_namer»   r¼   s                    r*   r©   Ú0GptOssTensorProcessor._interleave_gate_up_tensorî   s6  € ð —k‘k—o‘oÐ&9¸3Ó?ˆØ—]‘] 1Ñ%ˆ
Ø 1‘_ˆ
ØšA˜{ 
˜{ªAÐ-Ñ.ˆ	Øš!˜Z™[ª!Ð+Ñ,ˆä”s˜;¯©°aÑ(8Ó9Ö:ˆAØ#™,Ÿ.™.ˆKØ™
Ÿ™ˆIà'¨ uÐ,FÀqÀcÐIZÐ[ˆIØ% c UÐ*DÀQÀCÀÐWˆGð $6×#;Ñ#;Ö#=‘��ZØÓ#Ø )× 1Ñ 1°#°zÓ B�IØ•>Ø%Ÿo™o¨c°:Ó>’Gñ	 $>ô 7<·l²lÀ;ÐUYÑ6ZÐ˜iÑ(¨Ñ3Ü49·L²LÀÐQUÑ4VÐ˜iÑ(¨Ó1ò ;r)   r   r/   )r   r    r!   r"   Ú__doc__rn   r�   r„   r¨   r2   r&   rD   r#   r$   r'   r§   r©   r(   rc   rd   s   @r*   rŸ   rŸ   ®   s´   ø† ñð  "ŸzšzÐ*iÓjÐà "§
¢
Ð+[Ó \Ð÷(ð- Sô -ð0[à—‘ð[ð  ð[ð ð	[ð
 ð[ð !ô[ð."Wà—‘ð"Wð  ð"Wð ð	"Wð
 !÷"Wò "Wr)   rŸ   c                   ó†   ^ • \ rS rSrS
U 4S jjrS rS\R                  S\S\4S jr	S\R                  S\S\4S jr
S	rU =r$ )ÚBloomTensorProcessori  c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   ÚBloomTensorProcessor.__init__  rP   r)   c                 ó¸   • SU;   aI  U R                   S   nU R                   S   nSU;   a  U R                  XU5      nOU R                  XU5      n[        X0 5      $ )NÚattn_qkvrY   Úhidden_sizeÚweight)r   Ú_reverse_reshape_weightsÚ_reverse_reshape_biasr   )r1   r   r   rC   rV   Ún_embeds         r*   rD   ÚBloomTensorProcessor.process  s_   € Ø˜ÓØŸ™ HÑ-ˆIØ—k‘k -Ñ0ˆGØ˜4ÓØ×7Ñ7¸ÈGÓT‘à×4Ñ4°WÈÓQ�Ü˜'¨Ó,Ð,r)   r   rY   rÔ   c                 ó  • [         R                  " USSS9u  pEnUR                  X#U-  U5      nUR                  X#U-  U5      nUR                  X#U-  U5      n[         R                  " XEU/SS9nUR                  US-  X2-  -  U5      $ )Né   r   r‚   r   )r#   Úarray_splitr]   Ústack)r1   r   rY   rÔ   ÚqÚkÚvÚqkv_weightss           r*   rÒ   Ú-BloomTensorProcessor._reverse_reshape_weights!  sŒ   € ô —.’. ¨!°!Ñ4‰ˆˆaà�I‰I�f¨Ñ/°Ó9ˆØ�I‰I�f¨Ñ/°Ó9ˆØ�I‰I�f¨Ñ/°Ó9ˆÜ—h’h  a˜y¨qÑ1ˆà×"Ñ" 6¨A¡:°Ñ1BÑ#CÀWÓMÐMr)   c                 óü   • [         R                  " US5      u  pEnUR                  X#U-  5      nUR                  X#U-  5      nUR                  X#U-  5      n[         R                  " XEU/SS9R	                  5       nU$ )Nr×   r   r‚   )r#   rØ   r]   rÙ   Úflatten)r1   r   rY   rÔ   Úq_biasÚk_biasÚv_biasÚqkv_biass           r*   rÓ   Ú*BloomTensorProcessor._reverse_reshape_bias-  su   € ô "$§¢°¸Ó!;Ñˆ˜à—‘ °6Ñ(9Ó:ˆØ—‘ °6Ñ(9Ó:ˆØ—‘ °6Ñ(9Ó:ˆä—8’8˜V¨VÐ4¸1Ñ=×EÑEÓGˆØˆr)   r   r/   )r   r    r!   r"   r2   rD   r#   r$   rb   rÒ   rÓ   r(   rc   rd   s   @r*   rË   rË     sS   ø† ÷(ò-ð
N°·
±
ð 
NÀCð 
NÐRUô 
Nð
¨R¯Z©Zð 
Àð 
Ès÷ 
ò 
r)   rË   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚT5TensorProcessori:  c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   ÚT5TensorProcessor.__init__;  rP   r)   c                 ó–   • S nUR                  S5       H%  nUR                  5       (       d  M  [        U5      n  O   [        XSU05      $ )Nr±   ru   )ÚsplitÚisdigitrb   r   )r1   r   r   rC   ru   Úchunks         r*   rD   ÚT5TensorProcessor.process>  sC   € ØˆØ—Z‘Z –_ˆEØ�}‰}�‹Ü˜%“j�Ùñ %ô ˜'¨%°¨Ó6Ð6r)   r   r/   ©r   r    r!   r"   r2   rD   r(   rc   rd   s   @r*   rç   rç   :  s   ø† ÷(÷7ð 7r)   rç   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚGPT2TensorProcessoriG  c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   ÚGPT2TensorProcessor.__init__H  rP   r)   c                 óú   • SU;   d  SU;   d  SU;   d  SU;   a  UR                   nUS:X  aF  SnUR                  S0 5      n[        R                  " [        R
                  " U5      5      US   U'   S n[        X0 5      $ )	Nzattn_qkv.weightzffn_down.weightzffn_up.weightzattn_output.weightúoutput.weightzlm_head.weightr€   rŒ   )r¿   rT   r�   r‘   r#   r’   r   )r1   r   r   rC   r€   s        r*   rD   ÚGPT2TensorProcessor.processK  s†   € ð  Ó%Ø  DÓ(Ø $Ó&Ø# tÓ+à—i‘iˆGð �?Ó"ð $ˆDØ &§
¡
Ð+>ÀÓ CÐÜ16×1AÒ1AÄ"Ç'Â'È'ÓBRÓ1SÐ˜iÑ(¨Ñ.ØˆDÜ˜'¨Ó,Ð,r)   r   r/   rï   rd   s   @r*   rñ   rñ   G  s   ø† ÷(÷-ð -r)   rñ   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚMambaTensorProcessoria  c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   ÚMambaTensorProcessor.__init__b  rP   r)   c                 óŠ   • SU;   a  [         R                  " USS9nSU;   a  [         R                  " U* 5      n[        X0 5      $ )Nzssm_conv1d.weightr   r‚   Ússm_a)r#   r†   Úlogr   rB   s       r*   rD   ÚMambaTensorProcessor.processe  sB   € Ø $Ó&ô —n’n W°1Ñ5ˆGØ�d‹?ô —f’f˜g˜XÓ&ˆGÜ˜'¨Ó,Ð,r)   r   r/   rï   rd   s   @r*   rø   rø   a  s   ø† ÷(÷	-ð 	-r)   rø   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚNemotronTensorProcessoriq  c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   Ú NemotronTensorProcessor.__init__r  rP   r)   c                 ó0   • SU;   a  US-
  n[        X0 5      $ ©Nznorm.weightr   rA   rB   s       r*   rD   ÚNemotronTensorProcessor.processv  ó    € Ø˜DÓ Ø ‘kˆGÜ˜'¨Ó,Ð,r)   r   r/   rï   rd   s   @r*   r   r   q  s   ø† ÷(÷-ð -r)   r   c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚGemma2TensorProcessori|  c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   ÚGemma2TensorProcessor.__init__}  rP   r)   c                 ó0   • SU;   a  US-
  n[        X0 5      $ r  rA   rB   s       r*   rD   ÚGemma2TensorProcessor.process‚  r  r)   r   r/   rï   rd   s   @r*   r  r  |  s   ø† ÷(÷
-ð -r)   r  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )ÚLfm2TensorProcessoriˆ  c                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   ÚLfm2TensorProcessor.__init__‰  rP   r)   c                 óP   • SU;   a  [         R                  " USS9n[        X0 5      $ )Nzshortconv.conv.weightr   r‚   )r#   r†   r   rB   s       r*   rD   ÚLfm2TensorProcessor.processŒ  s'   € Ø" dÓ*ä—n’n W°1Ñ5ˆGÜ˜'¨Ó,Ð,r)   r   r/   rï   rd   s   @r*   r  r  ˆ  s   ø† ÷(÷-ð -r)   r  c                   ó8  ^ • \ rS rSr\R
                  " S5      r\R
                  " S5      r\R
                  " S5      r\R
                  " S5      r	SU 4S jjr
S\S\4S	 jrS
\\\4   S\S\S\4S jrS\4S jrS\R"                  S\\\4   S\S\4S jrSrU =r$ )ÚMiniMaxM2TensorProcessori“  zmlp\.experts\.\d+\.z<(?:model\.)?layers\.(?P<bid>\d+)\.mlp\.experts\.gate_up_projrh   z>(?:model\.)?layers\.(?P<bid>\d+)\.mlp\.e_score_correction_biasc                 ó    >• [         TU ]  US9  g rJ   rK   rM   s     €r*   r2   Ú!MiniMaxM2TensorProcessor.__init__™  rP   r)   r4   r5   c                 óF   • [         R                  " U R                  SU5      $ rl   rm   r7   s     r*   r8   Ú(MiniMaxM2TensorProcessor.preprocess_nameœ  rr   r)   r:   r;   r<   c                 ó   • [         R                  " U R                  U5      =n(       a  X4-   nXaSUS    SU 3'   XaSUS    SU 3'   g [         R                  " U R                  U5      =n(       a  X4-   USUS    S3'   g g )Nrt   ru   rv   rw   z.exp_probs_b.bias)rn   rx   ry   ÚHF_BIAS_PATTERNrz   s          r*   r>   Ú8MiniMaxM2TensorProcessor.perform_fallback_tensor_mappingŸ  s—   € ô —’˜T×4Ñ4°gÓ>Ð>ˆ1Õ>Ø$Ñ.ˆLØKW $ q¨¡x j°¸v¸hÐ GÑHØIU $ q¨¡x j°¸V¸HÐ EÒFä—,’,˜t×3Ñ3°WÓ=Ð=ˆQÕ=ØFOÑFYÐ $ q¨¡x jÐ0AÐ BÒCð >r)   r   c                 ó  • [         R                  " U R                  U5      =n(       aQ  UR                  S5      nUR                  S5      nU(       a  U R	                  XXTS      US   5        [        US 0 5      $ [        X0 5      $ )Nr   r€   r   r`   )rn   rx   r„   rT   r…   r   r‡   s          r*   rD   Ú MiniMaxM2TensorProcessor.process«  s€   € Ü—’˜T×:Ñ:¸DÓAÐAˆ1ÕAØ!'§¡Ð,@Ó!AÐØ &§
¡
Ð+>Ó ?ÐÞ!Ø×+Ñ+¨GÐHZÐ]cÑ[dÑHeÐghÐilÑgmÔnÜ˜g t¨RÓ0Ð0Ü˜'¨Ó,Ð,r)   r   r€   r`   c                 óš  • [         R                  " [        R                  " U5      5      nUS:X  a  XRS   U'   g [	        UR
                  5      nSnXg   nUS-  Xg'   X2S   ;  a$  [         R                  " XeR                  S9US   U'   US   U   n	US:X  a  U	R                  USU5      n	OU	R                  XxU5      n	U	R                  U5        g rŠ   r�   r—   s
             r*   r…   Ú/MiniMaxM2TensorProcessor._set_moe_expert_tensor´  sÆ   € Ü×(Ò(¬¯ª°Ó)9Ó:ˆØ�‹;Ø4A˜iÑ(¨Ò1ô ˜Ÿ™Ó'ˆEØˆIØÑ)ˆJØ)¨A™~ˆEÑØ°	Ñ:Ó:Ü8=¿ºÀE×QdÑQdÑ8eÐ! )Ñ,¨WÑ5Ø 1°)Ñ <¸WÑ EˆCØ�F‹{Ø—j‘j ¨A¨zÓ:‘à—j‘j ¸
ÓC�Ø�I‰I�mÕ$r)   r   r/   )r   r    r!   r"   rn   r�   rp   ry   r„   r  r2   r&   r8   r'   r>   rD   r#   r$   r…   r(   rc   rd   s   @r*   r  r  “  sÒ   ø† Ø!ŸzšzÐ*@ÓAÐØŸšÐ$cÓdÐØ!ŸzšzÐ*`ÓaÐØ—j’jÐ!bÓc€O÷(ðN sð N¨sô Nð
ZØ#'¨¨S¨¡>ð
ZØ;>ð
ZØKNð
ZØY\ô
Zð- Sô -ð%¨b¯j©jð %ÈTÐRUÐW[ÐR[É_ð %Ðgjð %Ðor÷ %ò %r)   r  )ÚllamaÚqwen2moeÚgpt_ossÚqwen3moeÚbloomÚt5Ú	t5encoderÚgpt2ÚmambaÚnemotronÚgemma2Úgemma3Úlfm2ú
minimax-m2c                 óÈ   • XR                   ;  a  / $ U R                   U   nUR                   Vs/ s H&  n[        UR                  U   UR                  5      PM(     sn$ s  snf r/   )ÚfieldsÚdatar	   ÚpartsÚtypes)ÚreaderÚfieldÚvalueÚ_data_indexs       r*   Ú
read_fieldr7  Ú  sT   € Ø—M‘MÓ!Øˆ	Ø�M‰M˜%Ñ €EØX]×XbÒXbÓcÒXbÈÔ˜eŸk™k¨+Ñ6¸¿¹ÖDÑXbÑcÐcùÒcs   ¯-AÚ	processorÚ
model_typeÚ
num_layersr<   c           
      ó4  • [        5       (       a  [        5       (       a	  SSKJnJn  O [
        R                  S5        [        S5      eUc  U R                  R                  OUnUc  U R                  R                  OUnUS:X  a  SnO5US:X  a  S	nO,US
:X  a  SnO#US:X  a  SnOUS:X  a  SnOUS:X  a  SnOUS:X  a  SnSnUR                  5        H  u  p‰X’:X  d  M  Un  O   Uc  [        SU S35      eU" Xs5      n
0 nU R                  5       nU HŽ  nUR                  U5      nUSpþUR                  S5      (       d  UR                  S5      (       a  UR!                  SS5      u  pïSU-   nU
R#                  U5      nUc  UR%                  X¿XM5        M„  XM-   UUU-   '   M�     U R'                  5       =n(       a[  U HU  u  nn[)        UXX4 U S3S9nUR                  5        VVs0 s H  u  nnUU;  d  M  UU_M     nnnUR+                  U5        MW     U$ s  snnf )a=  
GGUF uses this naming convention for their tensors from HF checkpoint:
`blk.N.BB.weight` and `blk.N.BB.bias`
where N signifies the block number of a layer, and BB signifies the
attention/mlp layer components.
See "Standardized tensor names" in
https://github.com/ggerganov/ggml/blob/master/docs/gguf.md for details.
r   )ÚMODEL_ARCH_NAMESÚget_tensor_name_mapúÛLoading a GGUF checkpoint in PyTorch, requires both PyTorch and GGUF>=0.10.0 to be installed. Please see https://pytorch.org/ and https://github.com/ggerganov/llama.cpp/tree/master/gguf-py for installation instructions.úKPlease install torch and gguf>=0.10.0 to load a GGUF checkpoint in PyTorch.NÚcoherez	command-rÚ	qwen2_moer!  Ú	qwen3_moer#  Úgemma3_textr+  Úumt5r%  Ú
minimax_m2r-  r"  úgpt-osszUnknown gguf model_type: zÏ in gguf-py. This might because you're using an outdated version of gguf-py package, you can install `gguf` package from source refer to https://github.com/ggerganov/llama.cpp/tree/master/gguf-py#developmentÚ z.weightr¥   r±   r   )r<   )r   r
   Úggufr<  r=  ÚloggerÚerrorÚImportErrorr   r9  Únum_hidden_layersrµ   ÚNotImplementedErrorÚ
state_dictr8   ÚendswithÚrsplitÚget_namer>   Únamed_childrenÚget_gguf_hf_weights_mapÚupdate)Úhf_modelr8  r9  r:  r<   r<  r=  Úarchr»   r5  Úname_mapr:   rN  r4   r   r;   Ú	gguf_namerR  ÚchildÚsub_maprÛ   rÜ   s                         r*   rS  rS  â  s\  € ô ×ÑÔ1×3Ñ3ß>Ð>ä�‰ðAô	
ô ÐgÓhÐhà/9Ñ/A�—‘×+Ò+Àz€JØ6@Ñ6H�—‘×2Ò2Èj€Jà�XÓØ ‰
Ø	�{Ó	"Ø‰
Ø	�{Ó	"Ø‰
Ø	�}Ó	$Ø‰
Ø	�vÓ	Ø‰
Ø	�|Ó	#Ø!‰
Ø	�yÓ	 Øˆ
Ø€DØ&×,Ñ,Ö.‰
ˆØÕØˆDÙñ /ð �|Ü!Ø'¨
 |ð 4Uð Uó
ð 	
ñ # 4Ó4€Hð ÐØ×$Ñ$Ó&€JÛˆØ×+Ñ+¨GÓ4ˆà ˆfØ×Ñ˜I×&Ñ&¨'×*:Ñ*:¸7×*CÑ*CØ"Ÿ>™>¨#¨qÓ1‰LˆDØ˜6‘\ˆFà×%Ñ% dÓ+ˆ	ØÑØ×5Ñ5Ð6IÐS\ÔfÙà2;Ñ2EÐ˜I¨Ñ.Ó/ñ ð" "×0Ñ0Ó2Ð2€~Õ2Û)‰KˆD�%Ü-Ø�y¨jÀkÐRVÐQWÐWXÐDYñˆGð )0¯©¬ÔXª¡  1¸1ÐDWÑ;W“t�q˜!’t©ˆGÑXØ×&Ñ& wÖ/ñ *ð Ðùó Ys   Ç"HÇ3Hc                 ó¶  ^/^0• [        5       (       a  [        5       (       a	  SSKJnJn  O [
        R                  S5        [        S5      eU" U 5      nUR                  n[        UR                  5       5      n[         V	s0 s H  o™0 _M     n
n	[        US5      S   n[        US5      nSnSU;   a	  S	U;   a  S	nOXS
U;   d  SU;   aJ  SU
S   S'   U(       a)  SUS   R                  5       ;   a  SnSU;   a	  S/U
S   S'   OSU;   a	  S/U
S   S'   S
nOUnSU;   a  SnO SU;   d  SU;   a  SnOSU;   a  SnOSU;   a  SnSU;   aX  1 Skm/Sm0[        U/4S jUR                   5       5      n[        U04S jUR                   5       5      nXêS   S '   U(       + U
S   S!'   U[         ;  a  U[         ;  a  [#        S"U S#35      eS$S%/n[%        S& UR                   5       5      =(       d    UU;   U
S   S''   [&        R(                  " U[&        R(                  " U5      =(       d    0 5      nUR+                  5        H  u  nnU
S   R-                  UU5        M     UR                  R+                  5        GHH  u  nnUR/                  X½5      nUR1                  S(5      nUS   nS(R3                  US)S 5      nUR4                   Vs/ s H&  n[7        UR8                  U   UR:                  5      PM(     nn[=        U5      S):X  a  US   n[?        U[@        5      (       a  UU;   a  UR/                  X½5      n[        R+                  5        HM  u  nnUU;   d  M  UUU   ;   d  M  UU   U   nUS*:X  a  M)  Ub  UU
U   U'   UU;   d  M<  URC                  U5        MO     UU;   d  GM-  [
        RE                  S+U S,U 35        GMK     U
S   S-   S.:X  a  S/U
S   S-'   U
S   R)                  S-5      S:X  aG  S0S1S2S3.nU
S   R)                  S45      n[?        U[F        5      (       a  UR)                  US15      U
S   S4'   U
S   S-   S5:X  aP  U
S   S6   n[I        U5      U
S   S6'   S7U
S   S8'   [K        U5       V V!s/ s H  u  n n!U!S:”  d  M  U PM     sn!n U
S   S9'   US:X  aÌ  SNS: jn"U"" US;5      n#U#b»  S<U#0n$UR                   HŸ  nURM                  S=5      (       d  M  U[=        S=5      S n%U%S>:X  a  M1  UR                  U   R8                  S   n[?        U[N        5      (       a  URQ                  S?5      nU%S@;   a  [S        U5      nOU%SA;   a  SBn%[G        U5      nO UU$U%'   M¡     U$U
S   SC'   SDU
S   ;  a5  U
SE   n&SFU&;   a  [=        U&SF   5      U
S   SD'   O[
        RU                  SG5        U(       Ga  0 U
SH'   U
R)                  S0 5      n'[V        R)                  U[X        5      n(U(" U'SI9n)[[        UU)5      n*[]        UR                  SJSK9 H©  n+U+R^                  n,U" U+R4                  U+R`                  5      n-U)Rc                  U-U,U*U
SL9n.U.Rd                  n-U.R^                  n,U,U*;  a  M^  U*U,   n,[f        Rh                  " [j        Rl                  " U-5      5      n+Ub  U+Ro                  U5      n+U+U
SH   U,'   M«     [=        U5      S:”  a  [
        RE                  SMU 35        U
$ s  sn	f s  snf s  sn!n f )Oa
  
Load a GGUF file and return a dictionary of parsed parameters containing tensors, the parsed
tokenizer and config attributes.

Args:
    gguf_checkpoint_path (`str`):
        The path the to GGUF file to load
    return_tensors (`bool`, defaults to `False`):
        Whether to read the tensors from the file and return them. Not doing so is faster
        and only loads the metadata in memory.
    model_to_load (`nn.Module`, *optional*):
        The model to load the weights into. This is used to map GGUF tensor names to
        Transformers parameter names.
    torch_dtype (`torch.dtype`, *optional*):
        The desired `torch.dtype` for the loaded tensors. If provided, tensors will be
        converted to this dtype immediately after dequantization to save memory.
r   )Ú
GGUFReaderÚ
dequantizer>  r?  zgeneral.architecturezgeneral.nameNr   Úmistralr%  r&  Tr   Úis_gated_actrD  ÚUMT5EncoderModelÚarchitecturesÚT5EncoderModelr!  rA  r"  rF  r#  rB  r-  rE  Ústablelm>   úattn_k.biasúattn_q.biasúattn_v.biasÚffn_normc              3   óT   >#   • U  H  nT  H  o"UR                   ;   v •  M     M     g 7fr/   ©r   )Ú.0r·   Ú	bias_nameÚattn_bias_names      €r*   Ú	<genexpr>Ú'load_gguf_checkpoint.<locals>.<genexpr>‚  s$   øé € Ðmºn°FÔ^lÐQZ F§K¡KÖ/Ñ^lÑ/ºnùs   ƒ%(c              3   óB   >#   • U  H  nTUR                   ;   v •  M     g 7fr/   ri  )rj  r·   Úffn_norm_names     €r*   rm  rn  ƒ  s   øé € Ð#^Ê~ÀV M°V·[±[Ö$@Ê~ùs   ƒÚuse_qkv_biasÚuse_parallel_residualzGGUF model with architecture z is not supported yet.Úfalconr$  c              3   ó>   #   • U  H  oR                   S :g  v •  M     g7f)rõ   Nri  )rj  r·   s     r*   rm  rn  Ž  s   é € ÐHº¨v�K‰K˜?Ö*ºùs   ‚Útie_word_embeddingsr±   r   éÿÿÿÿz1Some keys were not parsed and added into account z | r9  r+  rC  ÚnoneÚsoftmaxÚsigmoid)r   r   r[   Úscoring_funcr,  rS   FÚblock_auto_adjust_ff_dimÚfull_attn_idxsc                 ó¶   • SU 3nX0R                   ;   aD  U R                   U   R                  S   n[        U[        5      (       a  UR	                  S5      nU$ U$ )Nzgpt-oss.r   úutf-8)r/  r1  Ú
isinstanceÚbytesÚdecode)r3  r;   Údefaultr»   Úvals        r*   Úread_gpt_keyÚ*load_gguf_checkpoint.<locals>.read_gpt_keyÐ  sV   € Ø˜V˜HÐ%ˆCØ—m‘mÓ#Ø—m‘m CÑ(×.Ñ.¨qÑ1�Ü˜c¤5×)Ñ)ØŸ*™* WÓ-�CØ�
ØˆNr)   zrope.scaling.typeÚ	rope_typezgpt-oss.rope.scaling.Útyper~  )ÚfactorÚattention_factorÚ	beta_fastÚ	beta_slow)Úoriginal_context_lengthÚ original_max_position_embeddingsr�  Úrope_scalingÚ
vocab_sizer   Útokensz¤Can't find a way to retrieve missing config vocab_size from tokenizer parameters. This will use default value from model config class and cause unexpected behavior.rŒ   r0   z,Converting and de-quantizing GGUF tensors...)Údesc)r   r   r   r€   z0Some keys of the GGUF file were not considered: r/   )8r   r
   rH  r\  r]  rI  rJ  rK  r/  r“   ÚkeysÚGGUF_TO_TRANSFORMERS_MAPPINGr7  ÚlowerÚanyrŒ   ÚGGUF_SUPPORTED_ARCHITECTURESÚ
ValueErrorÚallr   rT   rµ   Ú
setdefaultr¶   rë   Újoinr0  r	   r1  r2  rª   r  r&   ÚremoveÚinforb   ÚmaxÚ	enumerateÚ
startswithr€  r�  ÚfloatÚwarningÚTENSOR_PROCESSORSr,   rS  r   r   Útensor_typerD   r   r�   r‘   r#   r’   Úto)1Úgguf_checkpoint_pathÚreturn_tensorsÚmodel_to_loadÚtorch_dtyper\  r]  r3  r/  Úreader_keysrÛ   r€   ÚarchitectureÚ
model_nameÚupdated_architecturerä   rr  Ú
exceptionsÚconfig_defaultsr»   r5  Úgguf_keyr4  rë   ÚprefixÚ
config_keyr6  Ú	parameterÚparameter_renamesÚrenamed_config_keyÚ_gating_func_mapÚ_scoringÚgguf_num_key_value_headsr¹   rW   r„  r†  rŽ  r;   Útokenizer_parametersr   ÚProcessorClassr8  r   r·   r   r   Úresultrl  rp  s1                                                  @@r*   Úload_gguf_checkpointr»  :  s}  ù€ ô$ ×ÑÔ1×3Ñ3ß/Ð/ä�‰ðAô	
ô ÐgÓhÐháÐ,Ó-€FØ�]‰]€FÜ�v—{‘{“}Ó%€Kå(DÓEÒ(D 1˜BšÑ(DÐÐEä˜fÐ&<Ó=¸aÑ@€Lä˜F NÓ3€JàÐð �,Ó 9°
Ó#:Ø(Ñð 
�Ó	 °Ó!<Ø6:Ð˜(Ñ# NÑ3Þ˜& J¨q¡M×$7Ñ$7Ó$9Ó9Ø#)Ð Ø˜lÓ*Ø@RÐ?SÐ! (Ñ+¨OÑ<øà˜lÓ*Ø@PÐ?QÐ! (Ñ+¨OÑ<Ø#'Ñ à+Ðà�\Ó!Ø*ÑØ	�lÓ	" i°<Ó&?Ø(ÑØ	�|Ó	#Ø*ÑØ	˜Ó	%Ø+Ðð
 �\Ó!ÚFˆØ"ˆÜÔm¸f¿nºnÓmÓmˆÜ #Ô#^ÈvÏ~Ê~Ó#^Ó ^ÐØ6>˜(Ñ# NÑ3ØCXÔ?XÐ˜(Ñ#Ð$;Ñ<àÔ7Ó7Ð<PÔXtÓ<tÜÐ8¸¸ÐF\Ð]Ó^Ð^ð ˜GÐ$€JäÑH¸¿ºÓHÓH×fÈLÐ\fÑLfð �hÑÐ 5Ñ6ô
 3×6Ò6ØÔ:×>Ò>¸|ÓL×RÐPRó€Oð &×+Ñ+Ö-‰
ˆˆUØ˜(Ñ#×.Ñ.¨s°EÖ:ñ .ð "Ÿ=™=×.Ñ.×0‰ˆ�%Ø×#Ñ# LÓGˆØ—‘˜sÓ#ˆØ�q‘ˆØ—X‘X˜e A B˜iÓ(ˆ
à]b×]gÒ]gÓhÒ]gÈkÔ" 5§;¡;¨{Ñ#;¸U¿[¹[ÖIÑ]gˆÐhäˆu‹:˜‹?Ø˜!‘HˆEä�eœS×!Ñ! l°eÓ&;Ø—M‘M ,ÓEˆEä,H×,NÑ,NÖ,PÑ(ˆIÐ(ØÐ*Õ*¨zÐ=NÈvÑ=VÕ/VØ%6°vÑ%>¸zÑ%JÐ"Ø%¨Ó+Ùà%Ñ1ØGLÐ% iÑ0Ð1CÑDà˜{Õ*Ø×&Ñ& xÖ0ñ -Qð �{Ö"Ü�K‰KÐKÈHÈ:ÐUXÐY^ÐX_Ð`×añ7 1ð< ˜Ñ" <Ñ0°HÓ<Ø4AÐ˜(Ñ# LÑ1ð ˜Ñ"×&Ñ& |Ó4¸ÓDØ%¨)¸	ÑBÐØ$ XÑ.×2Ñ2°>ÓBˆÜ�h¤×$Ñ$Ø:J×:NÑ:NÈxÐYbÓ:cÐ˜hÑ'¨Ñ7à˜Ñ" <Ñ0°FÓ:Ø#4°XÑ#>Ð?TÑ#UÐ ä=@ÐAYÓ=ZÐ˜(Ñ#Ð$9Ñ:àBGÐ˜(Ñ#Ð$>Ñ?ô
 &/Ð/GÔ%Hô9
Ú%H‘/�!�\ÈLÐ[\ÑL\�AÑ%Hò9
Ð˜(Ñ#Ð$4Ñ5ð ˜yÓ(ô	ñ ! Ð)<Ó=ˆ	ØÑ Ø'¨Ð3ˆLð —}”}�Ø—~‘~Ð&=×>Ñ>ÙØœSÐ!8Ó9Ð;Ð<�Ø˜VÓ#ÙØŸ™ cÑ*×0Ñ0°Ñ3�Ü˜e¤U×+Ñ+Ø!ŸL™L¨Ó1�EàÐUÓUÜ! %›L‘EØÐ^Ó^à?�FÜ ›J‘EàØ',�˜VÓ$ñ% %ð( ;GÐ˜hÑ'¨Ñ7ð Ð,¨XÑ6Ó6Ø0°Ñ=ÐØÐ+Ó+Ü8;Ð<PÐQYÑ<ZÓ8[Ð˜hÑ'¨Ò5ä�N‰Nðeô÷
 Ø')Ð˜)Ñ$à"×&Ñ& x°Ó4ˆä*×.Ñ.¨|¼_ÓMˆÙ"¨&Ñ1ˆ	ä4°]ÀIÓNÐä˜6Ÿ>™>Ð0^Ô_ˆFØ—;‘;ˆDÙ  §¡¨f×.@Ñ.@ÓAˆGà×&Ñ&ØØØ#5Ø"3ð	 'ð ˆFð —n‘nˆGØ—;‘;ˆDàÐ-Ó-Ùà% dÑ+ˆDä×%Ò%¤b§g¢g¨gÓ&6Ó7ˆFØÑ&ØŸ™ ;Ó/�Ø17Ð˜iÑ(¨Ó.ñ- `ô0 ˆ;Ó˜!ÓÜ�‰ÐFÀ{ÀmÐTÔUàÐùò[ FùòL iùóV9
s   Á?[Ê:-[Ñ%[Ñ6[)NNrG  )FNN),rn   Útypingr   Únumpyr#   Ú	tqdm.autor   Úintegrationsr   r   r   r	   Úutilsr
   Úutils.import_utilsr   Úutils.loggingr   r�   r   rI  r“  r“   r’  r–  r   r,   rG   rf   rŸ   rË   rç   rñ   rø   r   r  r  r  r¢  r7  r&   rb   rS  r»  r   r)   r*   Ú<module>rÃ     sÌ  ðó  
Ý ã Ý ÷ó õ &Ý 1Ý %ñ ×ÑÛá	�HÓ	€ð !Ø*Ø"ñ
ð
 "-ÐF\Ñ]ñð "ØÐ5°kÑBÐCØ$Ð&<Ð=OÑ&PÐQñ Ð ñ  $Ð$@ÀÑ$J×$OÑ$OÓ$QÓRÐ ô�ô ÷-ñ -ô47˜?ô 7ô<5%˜oô 5%ôpbW˜Oô bWôJ$˜?ô $ôN
7˜ô 
7ô-˜/ô -ô4-˜?ô -ô -˜oô -ô	-˜Oô 	-ô-˜/ô -ô2%˜ô 2%ðl "Ø'Ø$Ø'Ø!Ø
Ø"ØØ!Ø'Ø#Ø#ØØ*ñÐ ò$dð "Ø!ØñUàðUð �d‘
ðUð �d‘
ð	Uð
 õUõplr)   