+
    œ°³jÖô  ã                   óp  € ^ RI Ht ^ RIt^ RIt^ RIHt ^ RIHu Ht ^RI	H
t ^RIHt ^RIHtHtHt ^RIHt ^RIHt ^RIHt ^R	IHt ^R
IHtHt ^RIHtHt ^RI H!t!H"t" ^RI#H$t$ ^RI%H&t&H't'H(t( ^RI)H*t* ^RI+H,t,H-t- ^RI.H/t/H0t0 ^RI1H2t2H3t3H4t4H5t5H6t6  ! R R]Pn                  4      t8 ! R R]Pn                  4      t9 ! R R]Pn                  4      t: ! R R]4      t;R R lt<R@R R llt=R t>RAR  lt? ! R! R"]Pn                  4      t@ ! R# R$]Pn                  4      tA]' ! R% R&]"4      4       tB ! R' R(]B4      tC ! R) R*]B4      tD ! R+ R,]B4      tER- R. ltF ! R/ R0]B4      tGRBR1 R2 lltHRCR3 R4 lltIR5 R6 ltJR7^]P–                  3R8 R9 lltL ! R: R;]B4      tM]'! R<R=7       ! R> R?]B]4      4       tN. RDOtOR# )Eé    )ÚCallableN)Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Údeprecate_kwarg)Úmaybe_autocastÚmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputs)Ú	BltConfigÚBltGlobalTransformerConfigÚBltLocalDecoderConfigÚBltLocalEncoderConfigÚBltPatcherConfigc                   ó8   a a€ ] tR t^4t oV 3R ltR tRtVtV ;t# )ÚBltMLPc                óØ  <€ \         SV `  4        Wn        VP                  V n        VP                  V n        \
        P                  ! V P                  V P                  R R7      V n        \
        P                  ! V P                  V P                  R R7      V n        \
        P                  ! V P                  V P                  R R7      V n	        \        VP                  ,          V n        R# ©F©ÚbiasN)ÚsuperÚ__init__ÚconfigÚhidden_sizeÚintermediate_sizeÚnnÚLinearÚ	gate_projÚup_projÚ	down_projr   Ú
hidden_actÚact_fn©Úselfr)   Ú	__class__s   &&€Úe/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/blt/modeling_blt.pyr(   ÚBltMLP.__init__5   s¤   ø€ Ü‰ÑÔØŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸš 4×#3Ñ#3°T×5KÑ5KÐRWÔXˆŒÜ—y’y ×!1Ñ!1°4×3IÑ3IÐPUÔVˆŒÜŸš 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆŒä˜V×.Ñ.Õ/ˆŽó    c                ó�   € V P                  V P                  V P                  V4      4      V P                  V4      ,          4      pV# ©N)r0   r2   r.   r/   )r4   Úxr0   s   && r6   ÚforwardÚBltMLP.forward@   s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÕ#SÓTˆ	ØÐr8   )r2   r)   r0   r.   r*   r+   r/   ©	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r(   r<   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r5   Ú__classdict__s   @@r6   r"   r"   4   s   ù‡ € õ	0÷ò r8   r"   c                   óZ   a a€ ] tR t^Et oRV3R lV 3R llltV3R lR ltR tRtVtV ;t	# )Ú
BltRMSNormc                ó$   <€ V ^8„  d   QhRS[ RR/# )é   ÚepsÚreturnN)Úfloat)ÚformatrG   s   "€r6   Ú__annotate__ÚBltRMSNorm.__annotate__F   s   ø€ ÷ $ñ $©ð $¸$ñ $r8   c                óŽ   <€ \         SV `  4        \        P                  ! \        P
                  ! V4      4      V n        W n        R# )z)
BltRMSNorm is equivalent to T5LayerNorm
N)r'   r(   r,   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)r4   r*   rL   r5   s   &&&€r6   r(   ÚBltRMSNorm.__init__F   s/   ø€ ô 	‰ÑÔÜ—l’l¤5§:¢:¨kÓ#:Ó;ˆŒØ #Ör8   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )rK   Úhidden_statesrM   ©rT   ÚTensor)rO   rG   s   "€r6   rP   rQ   N   s#   ø€ ÷ ;ñ ;¡U§\¡\ð ;±e·l±lñ ;r8   c                ó:  € VP                   pVP                  \        P                  4      pVP	                  ^4      P                  RRR7      pV\        P                  ! W0P                  ,           4      ,          pV P                  VP                  V4      ,          # )rK   T)Úkeepdiméÿÿÿÿ)	ÚdtypeÚtorT   Úfloat32ÚpowÚmeanÚrsqrtrW   rV   )r4   rZ   Úinput_dtypeÚvariances   &&  r6   r<   ÚBltRMSNorm.forwardN   sw   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯ª°H×?TÑ?TÕ4TÓ(UÕUˆØ�{‰{˜]×-Ñ-¨kÓ:Õ:Ð:r8   c                ó^   € \        V P                  P                  4       R V P                   2# )z, eps=)ÚtuplerV   ÚshaperW   ©r4   s   &r6   Ú
extra_reprÚBltRMSNorm.extra_reprU   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr8   )rW   rV   )g�íµ ÷Æ°>)
r?   r@   rA   rB   r(   r<   rm   rC   rD   rE   rF   s   @@r6   rI   rI   E   s%   ù‡ € ÷$õ $÷;ð ;÷Jò Jr8   rI   c                   óÎ   a a€ ] tR t^Yt o]! RRR7      R
V3R lV 3R lll4       t]]! RRR7      R
V3R lR ll4       4       t]P                  ! 4       ]
R 4       4       tR	tVtV ;t# )ÚBltRotaryEmbeddingÚdevicez5.18)Úversionc                ó    <€ V ^8„  d   QhRS[ /# ©rK   r)   ©r   )rO   rG   s   "€r6   rP   ÚBltRotaryEmbedding.__annotate__[   s   ø€ ÷ Oñ O™yñ Or8   c                óä  <€ \         SV `  4        VP                  V n        VP                  V n        Wn        V P
                  P                  R ,          V n        V P                  pV P                  R8w  d   \        V P                  ,          pV! V P
                  V4      w  q@n
        \        P                  ! VRR7      V n        \        P                  ! VP                  4       RR7      V n        R# )Ú	rope_typeÚdefaultF)Ú
persistentN)r'   r(   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr)   Úrope_parametersrx   Úcompute_default_rope_parametersr   Úattention_scalingr,   ÚBufferÚinv_freqÚcloneÚoriginal_inv_freq)r4   r)   rq   Úrope_init_fnr‚   r5   s   &&&  €r6   r(   ÚBltRotaryEmbedding.__init__Z   s¬   ø€ ä‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àŒàŸ™×4Ñ4°[ÕAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÔ&Ü.¨t¯~©~Õ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆÔ(äŸ	š	 (°uÔ=ˆŒÜ!#§¢¨8¯>©>Ó+;ÈÔ!NˆÖr8   c                óP   <€ V ^8„  d   QhRS[ RS[S[P                  S[3,          /# )rK   r)   rM   )r   rj   rT   r\   rN   )rO   rG   s   "€r6   rP   rv   m   s.   ø€ ÷ 5ñ 5±	ð 5ÑUZÑ[`×[gÑ[gÑinÐ[nÕUoñ 5r8   c           	     ó0  € V P                   R,          p\        V RR4      ;'       g    V P                  V P                  ,          pRpRV\        P
                  ! ^ V^\        P                  R7      V,          ,          ,          pVP                  V4      V3# )a~  
Computes the inverse frequencies according to the original RoPE implementation
Args:
    config ([`~transformers.PreTrainedConfig`]):
        The model configuration.
Returns:
    Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
    post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
Ú
rope_thetaÚhead_dimNç      ð?©r`   )r~   Úgetattrr*   Únum_attention_headsrT   ÚarangerN   ra   )r)   rq   ÚkwargsÚbaseÚdimÚattention_factorr‚   s   &&,    r6   r   Ú2BltRotaryEmbedding.compute_default_rope_parametersk   s~   € ð ×%Ñ% lÕ3ˆÜ�f˜j¨$Ó/×cÐc°6×3EÑ3EÈ×IcÑIcÕ3cˆàÐà˜$¤5§<¢<°°3¸ÄÇÁÔ#MÐPSÕ#SÕTÕUˆØ�{‰{˜6Ó"Ð$4Ð4Ð4r8   c                ób  € V P                   R,          P                  4       P                  VP                  ^ ,          R^4      pVR	,          P                  4       p\	        VP
                  P                  \        4      '       d2   VP
                  P                  R8w  d   VP
                  P                  MRp\        VRR7      ;_uu_ 4        VP                  4       VP                  4       ,          P                  ^^4      p\        P                  ! V^RR7      pVP                  4       V P                  ,          pVP                  4       V P                  ,          p	R R R 4       XP                  VP                   R7      X	P                  VP                   R7      3#   + '       g   i     LH; i)
NÚmpsÚcpuF)Údevice_typeÚenabled©r’   rŒ   )NºNNNNr_   )r›   Nr›   )r‚   rN   Úexpandrk   Ú
isinstancerq   ÚtypeÚstrr   Ú	transposerT   Úrepeat_interleaveÚcosr€   Úsinra   r`   )
r4   r;   Úposition_idsÚinv_freq_expandedÚposition_ids_expandedr˜   ÚfreqsÚembr¢   r£   s
   &&&       r6   r<   ÚBltRotaryEmbedding.forward   s5  € ð !ŸM™M¨-Õ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÕH]Ð_aÐcdÓeÐØ ,¨ZÕ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-Ä×'EÒ'EÈ!Ï(É(Ï-É-Ð[`ÔJ`�a—h‘h—m’mÐfkˆÜ¨¸U×CÖCØ&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÕN×YÑYÐZ[Ð]^Ó_ˆEÜ×)Ò)¨%°¸Ô;ˆCØ—'‘'“)˜d×4Ñ4Õ4ˆCØ—'‘'“)˜d×4Ñ4Õ4ˆC÷	 Dð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷ D×Cús   ÃBFÆF.	)r€   r)   r‚   r|   r„   r}   rx   r:   )r?   r@   rA   rB   r   r(   Ústaticmethodr   rT   Úno_gradr   r<   rC   rD   rE   rF   s   @@r6   rp   rp   Y   su   ù‡ € Ù�X vÔ.÷Oô Oó /ðOð  Ù�X vÔ.÷5ñ 5ó /ó ð5ð$ ‡]‚]ƒ_Øñ<ó ó ÷<ð <r8   rp   c                   óT   a a€ ] tR t^�t oV3R lV 3R lltRV3R lR lltRtVtV ;t# )ÚBltTransformerLayerc                ó    <€ V ^8„  d   QhRS[ /# )rK   Ú	layer_idx©Úint)rO   rG   s   "€r6   rP   Ú BltTransformerLayer.__annotate__‘   s   ø€ ÷ 	#ñ 	#©#ñ 	#r8   c                ó,  <€ \         SV `  4        VP                  V n        \        WR 7      V n        \        V4      V n        \        VP                  VP                  R7      V n	        \        VP                  VP                  R7      V n
        W n        R# ))r)   r¯   ©rL   N)r'   r(   r*   ÚBltSelfAttentionÚ	self_attnr"   ÚmlprI   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormr¯   ©r4   r)   r¯   r5   s   &&&€r6   r(   ÚBltTransformerLayer.__init__‘   sn   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔä)°ÔMˆŒÜ˜&“>ˆŒÜ)¨&×*<Ñ*<À&×BUÑBUÔVˆÔÜ(2°6×3EÑ3EÈ6×K^ÑK^Ô(_ˆÔ%à"Žr8   c                ó2  <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[S[ P                  S[ P                  3,          R,          RS[ P                  R,          RS[R,          R	S[R,          R
S[S[ P                  S[ P                  3,          R,          RS[S[,          RS[S[ P                  S[S[ P                  S[ P                  3,          R,          3,          /# )rK   rZ   Úcross_attention_statesNÚcross_attention_maskÚattention_maskÚfull_text_row_masked_out_maskr¤   Úpast_key_valuesÚ	use_cacheÚposition_embeddingsr�   rM   )	rT   r\   rj   Ú
LongTensorr   Úboolr   r   ÚFloatTensor)rO   rG   s   "€r6   rP   r²   œ   s  ø€ ÷ 5ñ 5á—|‘|ð5ñ !&§¡¨tÕ 3ð5ñ $Ÿl™l¨TÕ1ð	5ñ
 Ÿ™ tÕ+ð5ñ (-©U¯\©\¹5¿<¹<Ð-GÕ'HÈ4Õ'Oð5ñ ×&Ñ&¨Õ-ð5ñ  �ð5ñ ˜$•;ð5ñ #¡5§<¡<±·±Ð#=Õ>ÀÕEð5ñ Ñ-Õ.ð5ñ 
‰u× Ñ ¡%©×(9Ñ(9¹5×;LÑ;LÐ(LÕ"MÐPTÕ"TÐTÕ	Uñ5r8   c
                óÔ   € TpV P                  V4      pV P                  ! RRVRVRVRVRVRV	/V
B w  rW±,           pTpV P                  V4      pV P                  V4      pW±,           pV# )a  
Args:
    hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
    attention_mask (`torch.FloatTensor`, *optional*):
        attention mask of size `(batch_size, sequence_length)` if flash attention is used or `(batch_size, 1,
        query_sequence_length, key_sequence_length)` if default attention is used.

    use_cache (`bool`, *optional*):
        If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
        (see `past_key_values`).
    past_key_values (`Cache`, *optional*): cached past key and value projection states
    position_embeddings (`tuple[torch.FloatTensor, torch.FloatTensor]`, *optional*):
        Tuple containing the cosine and sine positional embeddings of shape `(batch_size, seq_len, head_dim)`,
        with `head_dim` being the embedding dimension of each attention head.
    kwargs (`dict`, *optional*):
        Arbitrary kwargs to be ignored, used for FSDP and other methods that injects code
        into the model
rZ   rÀ   r¤   rÂ   rÃ   rÄ   © )r¹   r¶   rº   r·   )r4   rZ   r¾   r¿   rÀ   rÁ   r¤   rÂ   rÃ   rÄ   r�   ÚresidualÚself_attn_weightss   &&&&&&&&&&,  r6   r<   ÚBltTransformerLayer.forwardœ   s«   € ð> !ˆà×,Ñ,¨]Ó;ˆð ,0¯>ª>ñ ,
Ø'ð,
à)ð,
ð &ð,
ð ,ð	,
ð
  ð,
ð !4ð,
ð ñ,
Ñ(ˆð !Õ0ˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ Õ0ˆàÐr8   )r*   r¹   r¯   r·   rº   r¶   )NNNNNNFNr>   rF   s   @@r6   r­   r­   �   s   ù‡ € ÷	#ó 	#÷5÷ 5ò 5r8   r­   c                ód   € V ^8„  d   QhR\         P                  R\        R\         P                  /# )rK   rZ   Ún_reprM   ©rT   r\   r±   )rO   s   "r6   rP   rP   Ô   s.   € ÷ 	Uñ 	UœUŸ\™\ð 	U´#ð 	U¼%¿,¹,ñ 	Ur8   c                ó˜   € V P                   w  r#rEV^8X  d   V # V R,          P                  W#WV4      p V P                  W#V,          WE4      # )zÈ
This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
)r›   r›   Nr›   r›   )rk   rœ   Úreshape)rZ   rÎ   ÚbatchÚnum_key_value_headsÚslenrŠ   s   &&    r6   Ú	repeat_kvrÕ   Ô   sU   € ð
 2?×1DÑ1DÑ.€E Ø�„zØÐØ!Ð"2Õ3×:Ñ:¸5ÐW\ÐdlÓm€MØ× Ñ  ¸eÕ(CÀTÓTÐTr8   c                ó   € V ^8„  d   QhR\         P                  R\        P                  R\        P                  R\        P                  R\        P                  R,          R\        R\        R	\
        \        ,          /# )
rK   ÚmoduleÚqueryÚkeyÚvaluerÀ   NÚscalingÚdropoutr�   )r,   ÚModulerT   r\   rN   r   r   )rO   s   "r6   rP   rP   à   sw   € ÷ %ñ %Ü�I‰Ið%ä�<‰<ð%ô 
�‰ð%ô �<‰<ð	%ô
 —L‘L 4Õ'ð%ô ð%ô ð%ô Ô'Õ(ñ%r8   c                 ó"  € \        W P                  4      p\        W0P                  4      p	\        P                  ! WP	                  ^^4      4      V,          p
Ve	   W¤,           p
\
        P                  P                  V
R\        P                  R7      P                  VP                  4      p
\
        P                  P                  W¦V P                  R7      p
\        P                  ! W©4      pVP	                  ^^4      P                  4       pWº3# )rK   )r’   r`   ©ÚpÚtrainingr_   )rÕ   Únum_key_value_groupsrT   Úmatmulr    r,   Ú
functionalÚsoftmaxrb   ra   r`   rÜ   rá   Ú
contiguous)r×   rØ   rÙ   rÚ   rÀ   rÛ   rÜ   r�   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs   &&&&&&&,    r6   Úeager_attention_forwardrë   à   sÒ   € ô ˜3× ;Ñ ;Ó<€JÜ˜U×$?Ñ$?Ó@€Lä—<’< ×';Ñ';¸A¸qÓ'AÓBÀWÕL€LØÒ!Ø#Õ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ó[€LÜ—,’,˜|Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r8   c                 ó~   € V R,          pV R,          p\         P                  ! V) V.RR7      P                  R4      pV# ).rš   ).:NNrK   ).:é   NrK   r_   éþÿÿÿ)rT   ÚstackÚflatten)r;   Úx1Úx2Úrot_xs   &   r6   Úrotate_halfrô   ù   s:   € à	
ˆ8�€BØ	
ˆ9�€BÜ�KŠK˜"˜˜b˜	 rÔ*×2Ñ2°2Ó6€EØ€Lr8   c                óÈ   € VP                  V4      pVP                  V4      pW,          \        V 4      V,          ,           pW,          \        V4      V,          ,           pWV3# )aI  Applies Rotary Position Embedding to the query and key tensors.

Args:
    q (`torch.Tensor`): The query tensor.
    k (`torch.Tensor`): The key tensor.
    cos (`torch.Tensor`): The cosine part of the rotary embedding.
    sin (`torch.Tensor`): The sine part of the rotary embedding.
    unsqueeze_dim (`int`, *optional*, defaults to 1):
        The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
        sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
        that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
        k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
        cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
        the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
Returns:
    `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
)Ú	unsqueezerô   )ÚqÚkr¢   r£   Úunsqueeze_dimÚq_embedÚk_embeds   &&&&&  r6   Úapply_rotary_pos_embrü     sS   € ð$ �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�wœ; q›>¨CÕ/Õ0€GØ�wœ; q›>¨CÕ/Õ0€GØÐÐr8   c                   óT   a a€ ] tR tRt oV3R lV 3R lltRV3R lR lltRtVtV ;t# )rµ   i  c                ó&   <€ V ^8„  d   QhRS[ RS[/# )rK   r)   r¯   ©r   r±   )rO   rG   s   "€r6   rP   ÚBltSelfAttention.__annotate__  s   ø€ ÷ ^ñ ^™yð ^±Sñ ^r8   c                ó¢  <€ \         SV `  4        Wn        VP                  V n        VP
                  V n        VP                  V n        VP                  V n        VP                  V P                  ,          V n        V P                  V P                  ,          V n	        V P                  R,          V n
        W n        RV n        \        P                  ! V P                  V P                  V P                  ,          RR7      V n        \        P                  ! V P                  V P                  V P                  ,          RR7      V n        \        P                  ! V P                  V P                  V P                  ,          RR7      V n        \        P                  ! V P                  V P                  ,          V P                  RR7      V n        R# )ç      à?TFr%   Nç      à¿)r'   r(   r)   rŽ   Ú	num_headsrÜ   r*   rÓ   rŠ   râ   rÛ   r¯   Ú	is_causalr,   r-   Úq_projÚk_projÚv_projÚo_projr»   s   &&&€r6   r(   ÚBltSelfAttention.__init__  s4  ø€ Ü‰ÑÔØŒØ×3Ñ3ˆŒØ—~‘~ˆŒØ!×-Ñ-ˆÔØ#)×#=Ñ#=ˆÔ Ø×*Ñ*¨d¯n©nÕ<ˆŒØ$(§N¡N°d×6NÑ6NÕ$NˆÔ!Ø—}‘} dÕ*ˆŒà"ŒØˆŒä—i’i × 0Ñ 0°$·.±.À4Ç=Á=Õ2PÐW\Ô]ˆŒÜ—i’i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Õ2ZÐafÔgˆŒÜ—i’i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Õ2ZÐafÔgˆŒÜ—i’i §¡°·±Õ >À×@PÑ@PÐW\Ô]ˆŽr8   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )rK   rZ   rÀ   rÄ   r[   )rO   rG   s   "€r6   rP   r   .  s5   ø€ ÷ *)ñ *)á—|‘|ð*)ñ Ÿ™ð*)ñ #Ÿ\™\ñ	*)r8   c                ó€  € VP                  4       w  rgpV P                  V4      p	V P                  V4      p
V P                  V4      pV	P	                  WgV P
                  V P                  4      P                  ^^4      p	V
P	                  WgV P                  V P                  4      P                  ^^4      p
VP	                  WgV P                  V P                  4      P                  ^^4      pVw  rÍ\        WšWÍ4      w  ršVe   VP                  W«V P                  4      w  r«\        P                  ! V P                  P                  \         4      pT! V V	V
VV3RV P"                  '       g   RMV P$                  RV P&                  /VB w  ppVP)                  WgR4      P+                  4       pV P-                  V4      pVV3# )rí   rÜ   ç        rÛ   r_   )Úsizer  r  r  Úviewr  rŠ   r    rÓ   rü   Úupdater¯   r   Úget_interfacer)   Ú_attn_implementationrë   rá   rÜ   rÛ   rÑ   ræ   r	  )r4   rZ   rÀ   rÄ   rÂ   r�   ÚbszÚq_lenÚ_Úquery_statesrç   rè   r¢   r£   Úattention_interfacerê   ré   s   &&&&&,           r6   r<   ÚBltSelfAttention.forward.  s£  € ð &×*Ñ*Ó,‰ˆ�Aà—{‘{ =Ó1ˆØ—[‘[ Ó/ˆ
Ø—{‘{ =Ó1ˆà#×(Ñ(¨°T·^±^ÀTÇ]Á]ÓS×]Ñ]Ð^_ÐabÓcˆØ—_‘_ S°×1IÑ1IÈ4Ï=É=ÓY×cÑcÐdeÐghÓiˆ
Ø#×(Ñ(¨°T×5MÑ5MÈtÏ}É}Ó]×gÑgÐhiÐklÓmˆà&‰ˆÜ#7¸ÐRUÓ#[Ñ ˆàÒ&Ø'6×'=Ñ'=¸jÐX\×XfÑXfÓ'gÑ$ˆJä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØñ	%
ð  $Ÿ}Ÿ}˜}‘C°$·,±,ð	%
ð —L‘Lð	%
ð ñ	%
Ñ!ˆ�\ð "×)Ñ)¨#°bÓ9×DÑDÓFˆØ—k‘k +Ó.ˆà˜LÐ(Ð(r8   )r)   rÜ   rŠ   r*   r  r  r¯   r  râ   rÓ   r	  r  rÛ   r  r:   r>   rF   s   @@r6   rµ   rµ     s    ù‡ € ÷^ó ^÷&*)÷ *)ò *)r8   rµ   c                   ó\   a a€ ] tR tRt oRtRV3R lV 3R llltR	V3R lR lltRtVtV ;t	# )
ÚBltCrossAttentioni[  z<Cross-attention module for Blt, following transformers stylec                ó:   <€ V ^8„  d   QhRS[ RS[RS[R,          /# )rK   r)   r¯   r*   Nrÿ   )rO   rG   s   "€r6   rP   ÚBltCrossAttention.__annotate__^  s&   ø€ ÷ ñ ™yð ±Sð ÁsÈTÅzñ r8   c                ób  <€ \         SV `  4        Wn        V P                  P                  V n        V P                  P
                  V n        VP                  V n        VP                  V n        VP                  V P                  ,          V n        W n	        V P                  V P
                  ,          V n
        V P                  R,          V n        \        P                  ! V P                  V P                  V P                  ,          RR7      V n        \        P                  ! V P                  V P
                  V P                  ,          RR7      V n        \        P                  ! V P                  V P
                  V P                  ,          RR7      V n        \        P                  ! V P                  V P                  ,          V P                  RR7      V n        \%        V P                  VP&                  R7      V n        \%        V P                  VP&                  R7      V n        RV n        R# )r  Fr%   r´   Nr  )r'   r(   r)   rŽ   r  rÓ   rÜ   r*   rŠ   r¯   râ   rÛ   r,   r-   r  r  r  r	  rI   r¸   Úq_normÚk_normr  )r4   r)   r¯   r*   r5   s   &&&&€r6   r(   ÚBltCrossAttention.__init__^  sp  ø€ Ü‰ÑÔØŒØŸ™×8Ñ8ˆŒØ#'§;¡;×#BÑ#BˆÔ Ø—~‘~ˆŒØ!×-Ñ-ˆÔØ×*Ñ*¨d¯n©nÕ<ˆŒØ"ŒØ$(§N¡N°d×6NÑ6NÕ$NˆÔ!Ø—}‘} dÕ*ˆŒä—i’i × 0Ñ 0°$·.±.À4Ç=Á=Õ2PÐW\Ô]ˆŒÜ—i’i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Õ2ZÐafÔgˆŒÜ—i’i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Õ2ZÐafÔgˆŒÜ—i’i §¡°·±Õ >À×@PÑ@PÐW\Ô]ˆŒÜ  ×!1Ñ!1°v×7JÑ7JÔKˆŒÜ  ×!1Ñ!1°v×7JÑ7JÔKˆŒØˆŽr8   c                ó"  <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[ P                  R,          RS[S[,          RS[S[ P                  S[ P                  R,          S[S[ P                  ,          R,          3,          /# )rK   rZ   r¾   NrÀ   r�   rM   )rT   r\   r   r   rj   )rO   rG   s   "€r6   rP   r  r  s€   ø€ ÷ $)ñ $)á—|‘|ð$)ñ !&§¡¨tÕ 3ð$)ñ Ÿ™ tÕ+ð	$)ñ
 Ñ+Õ,ð$)ñ 
‰u�|‰|™UŸ\™\¨DÕ0±%¹¿¹Õ2EÈÕ2LÐLÕ	Mñ$)r8   c                ól  € VP                  4       w  rVpV P                  V4      pV P                  V4      pVP                  WVV P                  V P
                  4      P                  ^^4      pV P                  V4      pV P                  V4      p	V P                  V4      p
V	P                  VRV P                  V P
                  4      P                  ^^4      p	V
P                  VRV P                  V P
                  4      P                  ^^4      p
\        P                  ! V P                  P                  \        4      pT! V VV	V
V3RV P                   '       g   RMV P"                  RV P$                  /VB w  rÍVP'                  WVR4      P)                  4       pV P+                  V4      pWÁ,           pWÍ3# )z#Input shape: Batch x Time x ChannelrÜ   r  rÛ   r_   )r  r  r  r  r  rŠ   r    r  r  r  rÓ   r   r  r)   r  rë   rá   rÜ   rÛ   rÑ   ræ   r	  )r4   rZ   r¾   rÀ   r�   r  r  r  r  rç   rè   r  rê   ré   s   &&&&,         r6   r<   ÚBltCrossAttention.forwardr  s’  € ð &×*Ñ*Ó,‰ˆ�AØ—{‘{ =Ó1ˆØ—{‘{ <Ó0ˆØ#×(Ñ(¨°T·^±^ÀTÇ]Á]ÓS×]Ñ]Ð^_ÐabÓcˆà!%§¡Ð-CÓ!DÐØ—[‘[Ð!7Ó8ˆ
Ø—{‘{Ð#9Ó:ˆØ—_‘_ S¨"¨d×.FÑ.FÈÏÉÓV×`Ñ`ÐabÐdeÓfˆ
Ø#×(Ñ(¨¨b°$×2JÑ2JÈDÏMÉMÓZ×dÑdÐefÐhiÓjˆä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØñ	%
ð  $Ÿ}Ÿ}˜}‘C°$·,±,ð	%
ð —L‘Lð	%
ð ñ	%
Ñ!ˆð "×)Ñ)¨#°bÓ9×DÑDÓFˆØ—k‘k +Ó.ˆØ!Õ1ˆØÐ(Ð(r8   )r)   rÜ   rŠ   r*   r  r  r  r¯   r  râ   rÓ   r	  r  r  rÛ   r  r:   ©NN)
r?   r@   rA   rB   Ú__doc__r(   r<   rC   rD   rE   rF   s   @@r6   r  r  [  s!   ù‡ € ÙF÷õ ÷($)÷ $)ò $)r8   r  c                   óº   a a€ ] tR tRt oRtRtRtRR.tRtRt	Rt
RtRtR]! ]^ R7      R	]! ]^R7      /t]P$                  ! 4       V 3R
 l4       tV3R ltRtVtV ;t# )ÚBltPreTrainedModeli™  ÚmodelTr­   r  FrZ   )ÚindexÚ
attentionsc           	     ó   <€ \         SV `  V4       VP                  P                  p\	        V\
        P                  4      '       dæ   \        V P                  RR4      pVf>   \        V P                  R4      '       d"   \        V P                  P                  RR4      pVf   VP                  pVR,          p\        P                  ! VP                  RVRV,          ^V,          R7       VP                  e2   \        P                   ! VP                  VP                  ,          4       R# \	        V\"        \$        34      '       g	   VR9   Ed¾   \        V P                  RR4      pVf   \        VR4      '       d   VP&                  pVfM   R FF  p\        WR4      pVf   K  \        VR4      '       g   K)  VP                  P(                  R,          p M	  Vf   R# VR,          pR F�  p\        WR4      pVf   K  \        VR4      '       g   K)  \        P                  ! VP                  RVRV,          ^V,          R7       \        VR	R4      f   Km  \        P                   ! VP*                  4       K�  	  \        VR\        VRR4      4      p	V	eu   \        V	R4      '       dc   \        P                  ! V	P                  RVRV,          ^V,          R7       \        V	R	R4      e!   \        P                   ! V	P*                  4       R# \	        V\,        4      '       g	   VR
8X  Ed<   \        V P                  RR4      pVf>   \        V P                  R4      '       d"   \        V P                  P.                  RR4      pVf>   \        V P                  R4      '       d"   \        V P                  P                  RR4      pRp
Ve
   VR,          p
\        VR\        VRR4      4      p\        VRR4      p\        VR\        VRR4      4      pW¼3 F¯  pVf   K	  \        VR4      '       g   K  T
;'       g%    VP                  P(                  ^,          R,          p\        P                  ! VP                  RVRV,          ^V,          R7       \        VR	R4      f   K�  \        P                   ! VP*                  4       K±  	  Ve›   \        VR4      '       d‰   VP                  P(                  ^,          pVR,          p\        P                  ! VP                  RVRV,          ^V,          R7       \        VR	R4      e!   \        P                   ! VP*                  4       R# \	        V\
        P0                  4      '       dy   VP2                  pVR,          p\        P                  ! VP                  RVRV,          ^V,          R7       VP*                  e!   \        P                   ! VP*                  4       R# R# )zô
Initialize BLT weights following the original ByteLatentTransformer:

- Most weights are drawn from a truncated normal.
- Scale is ~ 1 / sqrt(model_dim) (or 1 / sqrt(hidden_dim) for FFN outputs).
- Norm layers are set to weight = 1, bias = 0.
r*   NÚencoder_configr  )rd   ÚstdÚaÚbr	  ÚdenserV   r&   ÚMllamaTextMLPÚdecoder_configr.   Úfc1r/   r0   Úfc2r  éýÿÿÿ)ÚMllamaTextSelfAttentionÚMllamaTextCrossAttention)r  r  r  r	  r0  r_   )r  r  r  )r'   Ú_init_weightsr5   r?   r�   r,   Ú	Embeddingr�   r)   Úhasattrr,  Úembedding_dimÚinitÚtrunc_normal_rV   Úpadding_idxÚzeros_rµ   r  r*   rk   r&   r"   r2  r-   Úin_features)r4   r×   Ú
class_namer*   r-  r’   ÚnameÚprojÚ	proj_namer	  Úin_stdr.   r/   r0   Ú
hidden_dimÚout_stdÚfan_inr5   s   &&               €r6   r8  Ú BltPreTrainedModel._init_weightsª  sÞ  ø€ ô 	‰Ñ˜fÔ%à×%Ñ%×.Ñ.ˆ
ô �fœbŸl™l×+Ò+Ü! $§+¡+¨}¸dÓCˆKØÒ"¤w¨t¯{©{Ð<L×'MÒ'MÜ% d§k¡k×&@Ñ&@À-ÐQUÓV�ØÒ"Ø$×2Ñ2�à˜tÕ#ˆCÜ×ÒØ—‘ØØØ�s•(Ø�c•'õð ×!Ñ!Ò-Ü—’˜FŸM™M¨&×*<Ñ*<Õ=Ô>Ùô �fÔ/Ô1BÐC×DÒDÈ
ð W
õ I
ô ˜$Ÿ+™+ }°dÓ;ˆCØŠ{œw v¨}×=Ò=Ø×(Ñ(�ØŠ{ÛM�DÜ" 6°Ó6�DØÔ'¬G°D¸(×,CÔ,CØ"Ÿk™k×/Ñ/°Õ3˜Ùñ	 Nð
 Š{Ùà�t•)ˆCó <�	Ü˜v°$Ó7�ØÔ#¬°°h×(?Ô(?Ü×&Ò&ØŸ™Ø ØØ˜s�(Ø˜c�'õô ˜t V¨TÓ2Ô>ÜŸš D§I¡IÖ.ñ <ô ˜V X¬w°v¸wÈÓ/MÓNˆFØÒ!¤g¨f°h×&?Ò&?Ü×"Ò"Ø—M‘MØØØ˜3•hØ˜#•gõô ˜6 6¨4Ó0Ò<Ü—K’K §¡Ô,Ùô �fœf×%Ò%¨°Õ)FÜ! $§+¡+¨}¸dÓCˆKØÒ"¤w¨t¯{©{Ð<L×'MÒ'MÜ% d§k¡k×&@Ñ&@À-ÐQUÓV�ØÒ"¤w¨t¯{©{Ð<L×'MÒ'MÜ% d§k¡k×&@Ñ&@À-ÐQUÓV�ð ˆFØÒ&Ø$ dÕ*�ä ¨´W¸VÀUÈDÓ5QÓRˆIÜ˜f i°Ó6ˆGÜ ¨´W¸VÀUÈDÓ5QÓRˆIð #Ó,�ØÔ#¬°°h×(?Ô(?Ø ×BÐB T§[¡[×%6Ñ%6°qÕ%9¸TÕ%A�CÜ×&Ò&ØŸ™Ø ØØ˜s�(Ø˜c�'õô ˜t V¨TÓ2Ô>ÜŸš D§I¡IÖ.ñ -ð Ò$¬°¸H×)EÒ)EØ&×-Ñ-×3Ñ3°AÕ6�
Ø$ dÕ*�Ü×"Ò"Ø×$Ñ$ØØØ˜7•lØ˜'•kõô ˜9 f¨dÓ3Ò?Ü—K’K 	§¡Ô/Ùô �fœbŸi™i×(Ò(Ø×'Ñ'ˆFØ˜$•,ˆCÜ×ÒØ—‘ØØØ�s•(Ø�c•'õð �{‰{Ò&Ü—’˜FŸK™KÔ(Ùñ )r8   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rt   ru   )rO   rG   s   "€r6   rP   ÚBltPreTrainedModel.__annotate__™  s   ø‡ ‚ áÑò r8   rÉ   )ÚimageÚtext)r?   r@   rA   rB   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_can_compile_fullgraphÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendr   r­   rµ   Ú_can_record_outputsrT   r«   r8  Ú__annotate_func__rC   rD   rE   rF   s   @@r6   r'  r'  ™  s‡   ù‡ € ð  ÐØ(ÐØ&*Ð#Ø.Ð0CÐDÐØ"ÐØ€NØ ÐØÐØ"'Ðà™Ð(;À1ÔEØ‘nÐ%5¸QÔ?ðÐð
 ‡]‚]ƒ_ôJó ðJ÷% … r8   r'  c                   ó€   a a€ ] tR tRt oR]! ]^RR7      /tV3R lV 3R lltRV3R lR lltR	 t	V3R
 lt
RtVtV ;t# )ÚBltLocalEncoderi8  Úencoder_attentionsÚlocal_encoder©r)  Ú
layer_namec                ó    <€ V ^8„  d   QhRS[ /# rt   ©r   )rO   rG   s   "€r6   rP   ÚBltLocalEncoder.__annotate__>  s   ø€ ÷ ñ Ñ4ñ r8   c           	     óø  <€ \         SV `  V4       R V n        Wn        \        P
                  ! \        VP                  4       Uu. uF  p\        W4      NK  	  up4      V n	        \        VR7      V n        \        P                  ! VP                  VP                  VP                  ,          R R7      V n        \        P                   ! VP"                  VP                  4      V n        \        P
                  ! 4       V n        VP(                  '       d   VP                  M^p\        V4       F3  pV P&                  P+                  \-        WVP                  R7      4       K5  	  V P/                  4        R# u upi )F©r)   ©r@  Úout_featuresr&   ©r)   r¯   r*   N)r'   r(   Úgradient_checkpointingr)   r,   Ú
ModuleListÚrangeÚnum_hidden_layersr­   Úlayersrp   Ú
rotary_embr-   r*   Úcross_attn_kÚpatch_embedding_projectionr9  Ú
vocab_sizeÚembed_tokensÚcross_attn_layersÚcross_attn_all_layersÚappendr  Ú	post_init©r4   r)   r¯   Úlayers_to_addr5   s   &&  €r6   r(   ÚBltLocalEncoder.__init__>  s  ø€ Ü‰Ñ˜Ô Ø&+ˆÔ#ØŒÜ—m’mÜEJÈ6×KcÑKcÔEdÓeÑEd¸	Ô  Ö3ÑEdÑeó
ˆŒô -°FÔ;ˆŒÜ*,¯)ª)Ø×*Ñ*Ø×+Ñ+¨f×.AÑ.AÕAØô+
ˆÔ'ô
 ŸLšL¨×):Ñ):¸F×<NÑ<NÓOˆÔÜ!#§¢£ˆÔØ4:×4P×4PÐ4P˜×0Ò0ÐVWˆÜ˜}Ö-ˆIØ×"Ñ"×)Ñ)Ü!¨ÐRX×RdÑRdÔeöñ .ð
 	�‰Öùò! fs   ÁE7c                óp  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          R	S[R,          R
S[ P                  R,          RS[S[,          /
# )rK   Ú	input_idsNÚinputs_embedsÚpatch_embedsrÀ   r¤   rÂ   Úencoder_attention_maskÚnum_patchesÚ	patch_idsr�   )rT   rÅ   r\   r   r±   r   r   )rO   rG   s   "€r6   rP   ra  U  sÀ   ø€ ÷ 23ñ 23á×#Ñ# dÕ*ð23ñ —|‘| dÕ*ð23ñ —l‘l TÕ)ð	23ñ
 Ÿ™ tÕ+ð23ñ ×&Ñ&¨Õ-ð23ñ  �ð23ñ !&§¡¨tÕ 3ð23ñ ˜4•Zð23ñ —<‘< $Õ&ð23ñ Ñ+Õ,ñ23r8   c
           
     ó’  € Vf   V P                  V4      pVP                  ^ ,          p\        P                  ! W P                  P                  V P
                  R7      pVfS   \        P                  ! VP                  ^,          VP                  R7      P                  ^ 4      P                  VR4      pV P                  WÅ4      p\        P                  ! WÀP                  P                  V P
                  R7      p\        V P                  4       EF-  w  rïV! V3RVRVRV/V
B pV\        V P                  4      ^,
          8X  g   V P                  P                  '       g   KT  V P!                  WÈV	4      pV P#                  V4      pVP%                  W³P                  ^,          V P                  P&                  ,          V P                  P(                  4      pV P                  P                  '       d   TM^ pV P*                  V,          ! R	RVRVRV/V
B w  ppVVP-                  VP                  4      ,           pEK0  	  TpVV3# )
Nrß   ©rq   rÄ   rÀ   rÂ   rZ   r¾   r_   rÉ   )rp  rk   ÚFrÜ   r)   rá   rT   r�   rq   rö   rœ   rl  Ú	enumeraterk  Úlenrr  Úpatch_reducern  rÑ   rm  r*   rq  ra   )r4   ry  rz  r{  rÀ   r¤   rÂ   r|  r}  r~  r�   Ú
batch_sizerZ   rÄ   ÚidxÚlayerr¯   Úcross_attention_outputr  Úencoder_cross_statess   &&&&&&&&&&,         r6   r<   ÚBltLocalEncoder.forwardU  s  € ð Ò Ø ×-Ñ-¨iÓ8ˆMà"×(Ñ(¨Õ+ˆ
ÜŸ	š	 -·;±;×3FÑ3FÐQU×Q^ÑQ^Ô_ˆàÒä—’˜]×0Ñ0°Õ3¸M×<PÑ<PÔQ×[Ñ[Ð\]Ó^×eÑeÐfpÐrtÓuð ð #Ÿo™o¨mÓJÐÜŸ	š	 -·;±;×3FÑ3FÐQU×Q^ÑQ^Ô_ˆä# D§K¡K×0‰JˆCÙ!Øñà$7ðð  .ðð !0ð	ð
 ñˆMð ”c˜$Ÿ+™+Ó&¨Õ*Ô*¨d¯k©k×.O×.OÒ.OØ#×0Ñ0°ÈYÓW�Ø#×>Ñ>¸|ÓL�Ø+×3Ñ3Ø× 2Ñ 2°1Õ 5¸¿¹×8PÑ8PÕ PÐRV×R]ÑR]×RiÑRió �ð $(§;¡;×#D×#DÐ#D™CÈ!�	Ø,0×,BÑ,BÀ9Ö,Mñ -Ø".ð-à+8ð-ð $:ð-ð ñ	-Ñ)Ð&¨ð  ,Ð.D×.GÑ.GÈ×H[ÑH[Ó.\Õ\“ñ+ 1ð,  ,ÐØÐ2Ð2Ð2r8   c                ó^  € VP                   ^ ,          pVP                   R,          pVP                  R4      P                  RRVP                   R,          4      p\        P                  ! WBV3VP
                  VP                  R7      pVP                  V^VRRR7      pVRRV1R3,          pV# )a>  
Reduce variable length patches to single embedding per patch
Note: this works with variable number of patches for different sequences in the batch
It handles variable length patches by assuming that patch_lengths will be 0 for any
extra patches on the *right*. Since there can be a variable number of patches
this function also return the number of patches for each sequence in the batch.
Any embeddings on the right that are not allocated to a patch
(i.e. if the sum(patch_lengths[i]) < seq_len for any i)
will be sent to a dummy patch, which is trimmed before returning.
©r`   rq   ÚamaxF)Úsrcr’   r)  ÚreduceÚinclude_selfr›   Nr_   )rk   rö   rœ   rT   Úzerosr`   rq   Úscatter_reduce)r4   rZ   Úmax_num_patchesr~  r…  r;  Úreduced_embeddingss   &&&&   r6   r„  ÚBltLocalEncoder.patch_reduce‰  s½   € ð #×(Ñ(¨Õ+ˆ
Ø%×+Ñ+¨BÕ/ˆà×'Ñ'¨Ó+×2Ñ2°2°r¸=×;NÑ;NÈrÕ;RÓSˆ	ä"Ÿ[š[Ø¨-Ð8À×@SÑ@SÐ\i×\pÑ\pô
Ðð 0×>Ñ>ØØØØØð ?ó 
Ðð 0°Ð3C°OÐ3CÀQÐ0FÕGÐà!Ð!r8   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rt   r`  )rO   rG   s   "€r6   rP   ra  8  ó   ø‡ ‚ Ù!Ñ!ò r8   )r)   rq  rp  rg  rk  rn  rl  ©	NNNNNNNNN)r?   r@   rA   rB   r   rµ   rW  r(   r<   r„  rX  rC   rD   rE   rF   s   @@r6   rZ  rZ  8  sA   ù‡ € ð 	™nÐ-=ÀQÐSbÔcðÐ÷ó ÷.23ò 23òh"÷c … r8   rZ  c                   ó`   a a€ ] tR tRt oV3R lV 3R lltRV3R lR lltV3R ltRtVtV ;t	# )	ÚBltLocalDecoderi©  c                ó    <€ V ^8„  d   QhRS[ /# rt   ©r   )rO   rG   s   "€r6   rP   ÚBltLocalDecoder.__annotate__¬  s   ø€ ÷ ñ Ñ4ñ r8   c           	     óò  <€ \         SV `  V4       R V n        Wn        RV n        \
        P                  ! \        VP                  4       Uu. uF  p\        W4      NK  	  up4      V n
        \        VR7      V n        \
        P                  ! VP                  VP                  VP                   ,          R R7      V n        \%        VP                  VP&                  R7      V n        \
        P                  ! 4       V n        VP,                  '       d   VP                  M^p\        V4       F3  pV P*                  P/                  \1        WVP                  R7      4       K5  	  V P3                  4        R# u upi )FTrc  rd  r´   rf  N)r'   r(   rg  r)   Úcross_attn_decoderr,   rh  ri  rj  r­   rk  rp   rl  r-   Úhidden_size_globalr*   rm  rn  rI   r¸   Únormrq  rr  rs  r  rt  ru  s   &&  €r6   r(   ÚBltLocalDecoder.__init__¬  s"  ø€ Ü‰Ñ˜Ô Ø&+ˆÔ#ØŒØ"&ˆÔÜ—m’mÜEJÈ6×KcÑKcÔEdÓeÑEd¸	Ô  Ö3ÑEdÑeó
ˆŒô -°FÔ;ˆŒÜ*,¯)ª)Ø×1Ñ1Ø×+Ñ+¨f×.AÑ.AÕAØô+
ˆÔ'ô
 ˜v×1Ñ1°v×7JÑ7JÔKˆŒ	Ü!#§¢£ˆÔØ4:×4P×4PÐ4P˜×0Ò0ÐVWˆÜ˜}Ö-ˆIØ×"Ñ"×)Ñ)Ü!¨ÐRX×RdÑRdÔeöñ .ð
 	�‰Öùò! fs   ÁE4c                ó4  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          R	S[S[,          /# )
rK   ry  Nrz  r{  rÀ   r¤   rÂ   r|  r�   )rT   rÅ   r\   r   r   r   )rO   rG   s   "€r6   rP   r�  Ä  sŸ   ø€ ÷ .ñ .á×#Ñ# dÕ*ð.ñ —|‘| dÕ*ð.ñ —l‘l TÕ)ð	.ñ
 Ÿ™ tÕ+ð.ñ ×&Ñ&¨Õ-ð.ñ  �ð.ñ !&§¡¨tÕ 3ð.ñ Ñ+Õ,ñ.r8   c           
     ó²  € VP                   ^ ,          p	Tp
V P                  V4      pVP                  W“P                   ^,          V P                  P                  ,          V P                  P
                  4      pVe   V P                  '       g	   W£,           p
VfS   \        P                  ! VP                   ^,          VP                  R7      P                  ^ 4      P                  V	R4      pV P                  W¥4      p\        P                  ! W P                  P                  V P                  R7      p
\!        V P"                  4       Fy  w  rÍV^ 8X  g   V P                  P$                  '       dC   V P&                  V,          ! R	RV
RVRV/VB w  rïW®P)                  V
P                  4      ,           p
V! V
3RVRVRV/VB p
K{  	  V P+                  V
4      pV# )
r   r€  rß   rZ   r¾   rÀ   rÄ   rÂ   r_   rÉ   )rk   rn  rÑ   r)   rm  r*   rŸ  rT   r�   rq   rö   rœ   rl  r�  rÜ   rá   r‚  rk  rr  rq  ra   r¡  )r4   ry  rz  r{  rÀ   r¤   rÂ   r|  r�   r…  rZ   rÄ   Úir‡  rˆ  r  Úlogitss   &&&&&&&&,        r6   r<   ÚBltLocalDecoder.forwardÄ  s¿  € ð #×(Ñ(¨Õ+ˆ
Ø%ˆØ×6Ñ6°|ÓDˆØ#×+Ñ+Ø×*Ñ*¨1Õ-°·±×0HÑ0HÕHÈ$Ï+É+×JaÑJaó
ˆð Ò#¨D×,C×,CÐ,CØ)Õ8ˆMàÒä—’˜]×0Ñ0°Õ3¸M×<PÑ<PÔQ×[Ñ[Ð\]Ó^×eÑeÐfpÐrtÓuð ð #Ÿo™o¨mÓJÐÜŸ	š	 -·;±;×3FÑ3FÐQU×Q^ÑQ^Ô_ˆä! $§+¡+Ö.‰HˆAØ�AŒv˜Ÿ™×:×:Ð:Ø,0×,BÑ,BÀ1Ö,Eñ -Ø"/ð-à+7ð-ð $:ð-ð ñ	-Ñ)Ð&ð !.×0IÑ0IÈ-×J^ÑJ^Ó0_Õ _�Ù!Øñà$7ðð  .ðð !0ð	ð
 ñŠMñ /ð  —‘˜=Ó)ˆØˆr8   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rt   rœ  )rO   rG   s   "€r6   rP   r�  ©  r—  r8   )r)   rŸ  rq  rg  rk  r¡  rn  rl  ©NNNNNNN)
r?   r@   rA   rB   r(   r<   rX  rC   rD   rE   rF   s   @@r6   rš  rš  ©  s    ù‡ € ÷ó ÷0.ò .÷7 … r8   rš  c                   óz   a a€ ] tR tRt oR]! ]^RR7      /tV3R lV 3R lltRV3R lR lltV3R	 lt	R
t
VtV ;t# )ÚBltGlobalTransformeriõ  Úglobal_attentionsÚglobal_transformerr]  c                ó    <€ V ^8„  d   QhRS[ /# rt   ©r   )rO   rG   s   "€r6   rP   Ú!BltGlobalTransformer.__annotate__û  s   ø€ ÷ ñ Ñ9ñ r8   c                óà  <€ \         SV `  V4       Wn        \        P                  ! 4       V n        \        VP                  4       F'  pV P
                  P                  \        W4      4       K)  	  \        VR 7      V n        \        VRR4      e4   \        P                  ! VP                  VP                  RR7      V n        M\        P"                  ! 4       V n        V P%                  4        R# )rc  Úencoder_cross_output_sizeNFr%   )r'   r(   r)   r,   rh  rk  ri  rj  rs  r­   rp   rl  r�   r-   r²  r*   Útoken_embedding_projectionÚIdentityrt  r»   s   && €r6   r(   ÚBltGlobalTransformer.__init__û  s«   ø€ Ü‰Ñ˜Ô ØŒÜ—m’m“oˆŒÜ˜v×7Ñ7Ö8ˆIØ�K‰K×ÑÔ2°6ÓEÖFñ 9ä,°FÔ;ˆŒô �6Ð6¸Ó=ÒIÜ.0¯iªiØ×0Ñ0°&×2DÑ2DÈ5ô/ˆDÕ+ô /1¯kªk«mˆDÔ+à�‰Ör8   c                ó®   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[ P                  R,          RS[R,          RS[S[,          /# )rK   rz  rÀ   Nr¤   rÂ   r�   )rT   r\   rÅ   r   r   r   )rO   rG   s   "€r6   rP   r°    s_   ø€ ÷ ñ á—|‘|ðñ Ÿ™ tÕ+ðñ ×&Ñ&¨Õ-ð	ñ
  �ðñ Ñ+Õ,ñr8   c           
     óÚ  € VP                   w  rgpV P                  V4      p	\        P                  ! W�P                  P                  V P
                  R 7      p	VfS   \        P                  ! VP                   ^,          VP                  R7      P                  ^ 4      P                  VR4      pV P                  W“4      p
\        V P                  4       F  w  r¼V! V	3RV
RVRV/VB p	K  	  V	# )rß   r€  rÄ   rÀ   rÂ   r_   )rk   r³  r�  rÜ   r)   rá   rT   r�   rq   rö   rœ   rl  r‚  rk  )r4   rz  rÀ   r¤   rÂ   r�   r…  Úseq_lenr  rZ   rÄ   r¥  r‡  s   &&&&&,       r6   r<   ÚBltGlobalTransformer.forward  së   € ð "/×!4Ñ!4Ñˆ
˜QØ×7Ñ7¸ÓFˆÜŸ	š	 -·;±;×3FÑ3FÐQU×Q^ÑQ^Ô_ˆØÒä—’˜]×0Ñ0°Õ3¸M×<PÑ<PÔQ×[Ñ[Ð\]Ó^×eÑeÐfpÐrtÓuð ð #Ÿo™o¨mÓJÐÜ! $§+¡+Ö.‰HˆAÙ!Øñà$7ðð  .ðð !0ð	ð
 ñŠMñ /ð Ðr8   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rt   r¯  )rO   rG   s   "€r6   rP   r°  õ  s   ø‡ ‚ Ù&Ñ&ò r8   )r)   rk  rl  r³  )NNN)r?   r@   rA   rB   r   rµ   rW  r(   r<   rX  rC   rD   rE   rF   s   @@r6   r«  r«  õ  s:   ù‡ € ð 	™^Ð,<ÀAÐRfÔgðÐ÷ó ÷$ò ÷1 … r8   r«  c                ór   € V ^8„  d   QhR\         P                  R\        R,          R\         P                  /# )rK   Úpatch_lengthsÚmax_patch_lengthNrM   rÏ   )rO   s   "r6   rP   rP   (  s0   € ÷ ,(ñ ,(¬¯©ð ,(ÌÈtÍð ,(ÔX]×XdÑXdñ ,(r8   c                ó  € Vf   V # V P                  ^ 4      pV ^ 8„  p\        P                  ! W0V,          ^ 4      p\        P                  ! W0V,          ^ 4      pWE^ 8„  P                  VP                  4      ,           p\        VP                  4       P                  4       4      pV^ 8X  d0   \        P                  ! V^ 3V P                  V P                  R7      # \        P                  ! WpP                  V P                  R7      pW„P                  R4      8  p	W„P                  R4      8H  VP                  R4      ^ 8„  ,          p
\        P                  ! V	\        P                  ! W�4      \        P                  ! V4      4      p\        P                  ! W¥P                  R4      V4      pVP                  VR4      pV^ 8„  p\        P                  ! VP                  ^,          V P                  R7      VP!                  ^R7      P                  R4      8  p\        P                  ! V4      pVP#                  WìV,          4       \        VP!                  ^R7      P                  4       P                  4       4      pVRRV13,          # )aƒ  
Splits patch lengths into smaller segments if they exceed `max_patch_length`.
Pads the result to uniform length across the batch.

Args:
    patch_lengths (torch.Tensor): [batch_size, num_patches] tensor of patch lengths.
    max_patch_length (int, optional): Maximum allowed length per patch.

Returns:
    torch.Tensor: [batch_size, max_len] tensor of split and padded patch lengths.
NrŒ  r€  rš   r›   r_   )r  rT   Úwherera   r`   r±   ÚmaxÚitemr‘  rq   r�   rö   Ú	full_likeÚ
zeros_likerÑ   rk   ÚsumÚmasked_scatter_)r¼  r½  r…  ÚpositiveÚfull_chunksÚ	remainderÚsegment_countsÚmax_segments_per_patchÚsegment_indexÚ	full_maskÚremainder_maskÚsegmentsÚflat_segmentsÚnonzeroÚpacked_maskÚpacked_segmentsÚmax_lens   &&               r6   Úprocess_patch_lengthsrÔ  (  s$  € ð ÒØÐà×#Ñ# AÓ&€JØ˜qÑ €HÜ—+’+˜hÐ9IÕ(IÈ1ÓM€KÜ—’˜HÐ6FÕ&FÈÓJ€IØ °¡M×#5Ñ#5°k×6GÑ6GÓ#HÕH€Nä  ×!3Ñ!3Ó!5×!:Ñ!:Ó!<Ó=ÐØ Ô"Ü�{Š{˜J¨˜?°-×2EÑ2EÈm×NbÑNbÔcÐcä—L’LÐ!7×?RÑ?RÐ[h×[oÑ[oÔp€MØ× 5Ñ 5°bÓ 9Ñ9€IØ#×'<Ñ'<¸RÓ'@Ñ@ÀY×EXÑEXÐY[ÓE\Ð_`ÑE`Õa€NÜ�{Š{ØÜ�Š˜Ó8Ü×Ò˜Ó'ó€Hô
 �{Š{˜>×+>Ñ+>¸rÓ+BÀHÓM€Hà×$Ñ$ Z°Ó4€MØ˜aÑ€GÜ—,’,˜}×2Ñ2°1Õ5¸m×>RÑ>RÔSÐVd×VhÑVhØð Wió Wç�i�ƒmñ€Kô ×&Ò& }Ó5€OØ×#Ñ# K¸wÕ1GÔHä�.×$Ñ$¨Ð$Ó+×/Ñ/Ó1×6Ñ6Ó8Ó9€GØ˜1˜h˜w˜h˜;Õ'Ð'r8   c                   ót   a a€ ] tR tRt oV3R lV 3R lltR	V3R lR llt]R
R l4       tV3R ltRt	Vt
V ;t# )Ú
BltPatcheriW  c                ó    <€ V ^8„  d   QhRS[ /# rt   ©r    )rO   rG   s   "€r6   rP   ÚBltPatcher.__annotate__Z  s   ø€ ÷ ñ Ñ/ñ r8   c                óâ  <€ \         SV `  V4       \        V P                  R 7      V n        \
        P                  ! 4       V n        \        V P                  P                  4       F2  pV P                  P                  \        V P                  V4      4       K4  	  \
        P                  ! V P                  P                  V P                  P                  4      V n        \!        V P                  P                  V P                  P"                  R7      V n        \
        P&                  ! V P                  P                  V P                  P                  RR7      V n        V P+                  4        R# )rc  r´   Fr%   N)r'   r(   rp   r)   rl  r,   rh  rk  ri  rj  rs  r­   r9  ro  r*   rp  rI   r¸   r¡  r-   Úlm_headrt  r»   s   && €r6   r(   ÚBltPatcher.__init__Z  sæ   ø€ Ü‰Ñ˜Ô Ü,°D·K±KÔ@ˆŒÜ—m’m“oˆŒÜ˜tŸ{™{×<Ñ<Ö=ˆIØ�K‰K×ÑÔ2°4·;±;À	ÓJÖKñ >äŸLšL¨¯©×)?Ñ)?ÀÇÁ×AXÑAXÓYˆÔÜ˜tŸ{™{×6Ñ6¸D¿K¹K×<TÑ<TÔUˆŒ	Ü—y’yØ�K‰K×#Ñ#Ø�K‰K×"Ñ"Øô
ˆŒð 	�‰Ör8   c                ó4  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[R,          RS[R,          R	S[R,          R
S[R,          RS[S[	,          /
# )rK   ry  NrÀ   r¤   rÂ   rz  rÃ   Ú
patch_sizeÚ	thresholdr½  r�   )
rT   rÅ   r\   r   rÇ   rÆ   r±   rN   r   r   )rO   rG   s   "€r6   rP   rÙ  j  s³   ø€ ÷ 9;ñ 9;á×#Ñ# dÕ*ð9;ñ Ÿ™ tÕ+ð9;ñ ×&Ñ&¨Õ-ð	9;ñ
  �ð9;ñ ×(Ñ(¨4Õ/ð9;ñ ˜$•;ð9;ñ ˜$•Jð9;ñ ˜4•<ð9;ñ  �*ð9;ñ Ñ+Õ,ñ9;r8   c
                ó†  € VR J VR J,          '       d   \        R4      hVf   V P                  V4      pV'       d   Vf   \        V P                  R7      pVfb   Ve   VP	                  4       M^ p\
        P                  ! VP                  ^,          VP                  R7      V,           pVP                  ^ 4      p\        V P                  VVVVR7      pTpV P                  WÓ4      pV P                   F  pV! WÞVR7      pK  	  V P                  V P                  V4      4      p\
        P                  P!                  VR7      P#                  4       pVP                  R,          w  ppVe   V P%                  VVVVR7      pM/\
        P&                  ! VV3VP(                  VP                  R	7      p\+        VV	4      pVVV3# )
Nú:You must specify exactly one of input_ids or inputs_embedsrc  r€  ©r)   rz  rÀ   rÂ   r¤   )rÄ   rÀ   )r¦  :NrK   N)Ú	entropiesÚsequence_lengthrÞ  rß  rŒ  )Ú
ValueErrorrp  r   r)   Úget_seq_lengthrT   r�   rk   rq   rö   r
   rl  rk  rÛ  r¡  ÚdistributionsÚCategoricalÚentropyÚpatch_lengths_from_entropiesrU   r`   rÔ  )r4   ry  rÀ   r¤   rÂ   rz  rÃ   rÞ  rß  r½  r�   Úpast_seen_tokensÚcausal_maskrZ   rÄ   r‡  r¦  Úprediction_entropiesr…  rä  r¼  s   &&&&&&&&&&,          r6   r<   ÚBltPatcher.forwardj  s°  € ð ˜Ð -°tÐ";×<Ô<ÜÐYÓZÐZàÒ Ø ×-Ñ-¨iÓ8ˆMç˜Ò0Ü*°$·+±+Ô>ˆOàÒØCRÒC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<š<¨×(;Ñ(;¸AÕ(>À}×G[ÑG[Ô\Ð_oÕoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆØ"Ÿo™o¨mÓJÐà—[”[ˆEÙ! -ÐitÔuŠMñ !ð —‘˜dŸi™i¨Ó6Ó7ˆÜ$×2Ñ2×>Ñ>ÀfÐ>ÓM×UÑUÓWÐà&3×&9Ñ&9¸"Õ&=Ñ#ˆ
�OØÒ!Ø ×=Ñ=Ø.Ø /Ø%Ø#ð	 >ó ‰Mô "ŸJšJØ˜_Ð-°]×5HÑ5HÐQ^×QeÑQeôˆMô .¨mÐ=MÓNˆØ# ]°FÐ:Ð:r8   c                óÊ  € V P                   ^ ,          p\        P                  ! ^ ^.\        P                  V P                  R7      P                  ^ 4      P                  V^4      pVP                   ^,          pV R,          p W8„  pVP                   ^,          p\        P                  ! W€P                  R7      P                  ^ 4      P                  VR4      p	\        P                  ! W˜4      p
\        P                  ! Wš.^R7      p\        P                  ! Ww( .^R7      pW¼,          P                  WH4      pVP                  ^R7      P                  4       pVRRV13,          p\        P                  ! W]V,           3^R7      p\        P                  ! VR,          V^,
          4      p\        P                  ! VR,          ^,
          V3^R7      pVV,
          ^,           pV# )	z´
Computes patch lengths from token entropies.

Depending on whether a threshold is provided, the function uses either:
- Thresholding the entropy values (when `threshold` is set).
rŒ  r›   r€  rš   N©r›   :rí   NNr_   )r›   :Nrí   N)rk   rT   ÚtensorÚlongrq   rö   Úrepeatr�   rœ   rÂ  ÚcatrÑ   rÄ  rÀ  )rã  rä  rÞ  rß  r…  Úinit_tokensÚoffsetÚ
patch_maskr¸  Útoken_indicesÚsentinelÚpadded_indicesÚpadded_maskÚpatch_startsÚmax_valid_patchesÚpatch_start_idsÚ
last_tokenÚ
patch_endsr¼  s   &&&&               r6   rê  Ú'BltPatcher.patch_lengths_from_entropies¥  s¢  € ð —_‘_ QÕ'ˆ
ô �LŠL˜!˜Q˜¤u§z¡z¸)×:JÑ:JÔK×UÑUÐVWÓX×_Ñ_Ð`jÐlmÓnð 	ð ×"Ñ" 1Õ%ˆð ˜eÕ$ˆ	ð Ñ*ˆ
à×"Ñ" 1Õ%ˆô Ÿš W×5EÑ5EÔF×PÑPÐQRÓS×ZÑZÐ[eÐgiÓjˆÜ—?’? =Ó:ˆÜŸš MÐ#<À!ÔDˆô —i’i ¨[Ð 9¸qÔAˆð &Õ2×:Ñ:¸:ÓOˆØ&ŸN™N¨q˜NÓ1×5Ñ5Ó7ÐØ# AÐ'9Ð(9Ð'9Ð$9Õ:ˆô  Ÿ)š) [ÀÕ2GÐ$HÈaÔPˆô —_’_ _°UÕ%;¸_ÈqÕ=PÓQˆ
Ü—Y’Y °Õ 6¸Õ :¸JÐGÈQÔOˆ
à" _Õ4°qÕ8ˆàÐr8   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rt   rØ  )rO   rG   s   "€r6   rP   rÙ  W  s   ø‡ ‚ ÙÑò r8   )rp  rk  rÛ  r¡  rl  r˜  r$  )r?   r@   rA   rB   r(   r<   rª   rê  rX  rC   rD   rE   rF   s   @@r6   rÖ  rÖ  W  s6   ù‡ € ÷ó ÷ 9;ò 9;ðv ó3ó ð3÷_ … r8   rÖ  c                ó$   € V ^8„  d   QhR\         /# )rK   Úprimer°   )rO   s   "r6   rP   rP   Ü  s   € ÷ :ñ :´ñ :r8   c                ó  € \         P                  ! V\         P                  V P                  R7      p\         P                  ! V P
                  R,          V P                  R7      pW#,          p\         P                  ! W,          RR7      # )aX  
A polynomial rolling hash algorithm that converts sequences
of tokens into hash values. The hash is computed as:
    hash = (token_0 * prime^0 + token_1 * prime^1 + ... + token_n * prime^n)

The rolling hash allows the model to efficiently
identify and encode recurring byte-level patterns in the input text.

Args:
    token_tensor (torch.Tensor): [batch_size, seq_len, group_size] containing token IDs to hash
    prime (int): Prime number used as the base for the polynomial hash.

Returns:
    torch.Tensor: Hash values of shape [batch_size, seq_len] where each value
                 represents the hash of the corresponding token group

Example:
    >>> tokens = torch.tensor([[1, 2, 3], [4, 5, 6]])
    >>> hashes = rolling_polynomial_hash(tokens, prime=31)
    >>> # hash[0] = 1*31^0 + 2*31^1 + 3*31^2
    >>> # hash[1] = 4*31^0 + 5*31^1 + 6*31^2
rŒ  r€  rš   r_   )rT   rñ  Úint64rq   r�   rk   rÄ  )Útoken_tensorr  Úprime_tensorÚpowersÚprime_powerss   &&   r6   Úrolling_polynomial_hashr  Ü  s]   € ô. —<’< ¬U¯[©[À×ATÑATÔU€LÜ�\Š\˜,×,Ñ,¨RÕ0¸×9LÑ9LÔM€FØÕ'€LÜ�9Š9�\Õ0°bÔ9Ð9r8   c                ó\   € V ^8„  d   QhR\         P                  R\        R\        R\        /# )rK   Ú	token_idsÚ
group_sizer  Úmax_hashrÏ   )rO   s   "r6   rP   rP   ù  s0   € ÷ ñ Ü�|‰|ðÜ),ðÜ9<ðÜUXñr8   c           	     ó„  € \         P                  ! 4       ;_uu_ 4        V P                  w  rE\         P                  ! WA^,
          \         P                  V P
                  R7      p\         P                  ! W`.^R7      pVP                  ^V^4      p\        W‚4      p	W“,          p
RRR4       V
#   + '       g   i     X
# ; i)z1Hash token groups and map to range [0, max_hash].rŒ  rš   N)	rT   r«   rk   r‘  r  rq   rô  Úunfoldr  )r  r  r  r  r…  r¸  ÚpaddingÚpadded_tokensÚwindowsÚhashesÚhash_valuess   &&&&       r6   Úbyte_group_hash_functionr  ù  s”   € ô 
�Š��Ø'Ÿo™oÑˆ
ä—+’+˜j°q­.ÄÇÁÐT]×TdÑTdÔeˆÜŸ	š	 7Ð"6¸AÔ>ˆð  ×&Ñ& q¨*°aÓ8ˆÜ(¨Ó8ˆØÕ'ˆ÷ 
ð Ð÷ 
Žð Ðús   žBB.Â.B?	c                óœ   € V ^8„  d   QhR\         P                  R\        P                  R\        R\
        R\        R\         P                  /# )rK   Úlocal_encoder_tokensÚencoder_hash_tok_embeddingÚ$encoder_hash_byte_group_nb_functionsÚencoder_hash_byte_group_sizeÚencoder_hash_byte_group_vocabrM   )rT   r\   r,   r9  r±   Úlist)rO   s   "r6   rP   rP     sR   € ÷ #ñ #ÜŸ,™,ð#ô !#§¡ð#ô +.ð	#ô
 #'ð#ô $'ð#ô ‡\�\ñ#r8   c                ó0  € . ROpVP                  V 4      p^ p\        V4       Fo  p	Wi\        V4      ,          ,          p
V FN  p\        WW¥4      pWÈV,          ,           pWr! V4      P	                  VP
                  4      ,          pV^,          pKP  	  Kq  	  V# )z=Compute token embeddings enhanced with hash-based embeddings.)éÊš;l   Í21A ißoYl   Ívt l   ß. l   }îg l   �A§u l   í†0 l   ©ÿT l   AK l   ™| )rp  ri  rƒ  r  ra   rq   )r  r\  r  r  r  r  ÚprimesÚ
embeddingsÚembedding_idxÚfunc_nbr  r  Úhash_idsÚoffset_hash_idss   &&&&&&        r6   Úcompute_hash_embeddingsr'    s›   € ò€Fð ×+Ñ+Ð,@ÓA€JØ€MÜÐ=Ö>ˆØ¤ V£Õ,Õ-ˆÛ6ˆJÜ/Ð0DÐRWÓwˆHà&Ð9VÕ)VÕVˆOØÐ4°_ÓE×HÑHÈ×IZÑIZÓ[Õ[ˆJØ˜QÕŠMó 7ñ ?ð Ðr8   Fc                óÞ   € V ^8„  d   QhR\         P                  R\        R\        R\        R\        R\         P                  R\
        \         P                  \         P                  3,          /# )rK   r~  r}  rä  Úpatches_as_queriesrm  r`   rM   )rT   r\   r±   rÆ   r`   rj   )rO   s   "r6   rP   rP   1  sq   € ÷ K ñ K Ü�|‰|ðK äðK ô ðK ô ð	K ô
 ðK ô �;‰;ðK ô Œ5�<‰<œŸ™Ð%Õ&ñK r8   c                óœ  € V P                   w  rgV P                  pV'       dr   W,          p	Tp
\        P                  ! WR7      P	                  ^ 4      P	                  R4      P                  WaV4      pV P	                  ^4      P                  WaV4      pMpTp	W,          p
V P	                  R4      P                  WgV4      p\        P                  ! WR7      P	                  ^ 4      P	                  ^ 4      P                  WgV4      pW¼8H  pV'       d   ^MRpVP                  WNR7      pWiV
3pVP                   V8w  d   \        RVP                    RV 24      hVP	                  ^4      pRVP                  V4      ,
          pVP                  VP                  \        P                  4      \        P                  ! V4      P                  4      pV# )a  
Prepare cross-attention mask for patch-based attention, following mllama's robust approach.

This function creates masks that control which patches can attend to which other patches,
with support for query/key role swapping and cross-attention multipliers.

Args:
    patch_ids (torch.Tensor): Tensor of shape [batch_size, seq_len] containing patch ids.
    num_patches (int): Total number of patches.
    sequence_length (int): Length of the sequence.
    patches_as_queries (bool): If True, patches are used as queries, otherwise as keys.
    cross_attn_k (int): Cross-attention multiplier for repeating patches.
    dtype (torch.dtype): Data type for the output mask.

Returns:
    Tuple[torch.Tensor, torch.Tensor]:
        - cross_attention_mask: 4D tensor [batch_size, 1, q_len, kv_len]
r€  rš   zCross attention mask shape z doesn't match expected r‹   r_   )rk   rq   rT   r�   rö   rœ   r¡   rå  ra   Úmasked_fillrÆ   ÚfinfoÚmin)r~  r}  rä  r)  rm  r`   r…  r¸  rq   r  Úkv_lenÚq_patch_idsÚkv_patch_idsr¿   Ú
repeat_dimÚexpected_shapeÚinverted_cross_attn_masks   &&&&&&           r6   Ú#_prepare_patch_cross_attention_maskr4  1  s±  € ð4 $Ÿ/™/Ñ€JØ×Ñ€F÷ ØÕ*ˆØ ˆô �LŠL˜Ô4ß‰Y�q‹\ß‰Y�r‹]ß‰V�J¨WÓ5ð	 	ð !×*Ñ*¨1Ó-×4Ñ4°ZÈgÓV‰àˆØÕ+ˆà×)Ñ)¨"Ó-×4Ñ4°ZÈ+ÓVˆä�LŠL˜Ô4×>Ñ>¸qÓA×KÑKÈAÓN×UÑUÐV`ÐkvÓwð 	ð 'Ñ6Ð÷ )‘¨b€JØ/×AÑAÀ,ÐAÓ_Ðð !¨Ð0€NØ×!Ñ! ^Ô3ÜØ)Ð*>×*DÑ*DÐ)EÐE]Ð^lÐ]mÐnó
ð 	
ð
 0×9Ñ9¸!Ó<Ðð  #Ð%9×%<Ñ%<¸UÓ%CÕCÐØ3×?Ñ?Ø ×#Ñ#¤E§J¡JÓ/´·²¸UÓ1C×1GÑ1GóÐð  Ðr8   c                   ó†   a a€ ] tR tRt oV3R lV 3R llt]]RV3R lR ll4       4       tR tR t	V3R lR	 lt
R
tVtV ;t# )ÚBltModeli  c                ó    <€ V ^8„  d   QhRS[ /# rt   ru   )rO   rG   s   "€r6   rP   ÚBltModel.__annotate__€  s   ø€ ÷ ñ ™yñ r8   c                óÌ  <€ \         SV `  V4       R V n        Wn        \	        VP
                  4      V n        \        VP                  4      V n	        \        VP                  4      V n        VP                  \        VP                  4      ,          pVP                   V,          p\"        P$                  ! W1P
                  P&                  4      V n        V P                  P*                  '       d^   \-        VP.                  4      V n        V P0                  P3                  4        V P0                  P5                  4        F
  pR Vn        K  	  MRV n        V P9                  4        R# )FN)r'   r(   rg  r)   rZ  r,  r\  r«  Úglobal_configr­  rš  r2  Úlocal_decoderr  rƒ  r  r  r,   r9  r*   r  Úpatch_in_forwardrÖ  Úpatcher_configÚpatcherÚevalÚ
parametersÚrequires_gradrt  )r4   r)   Únum_embeddingsÚtotal_vocab_sizeÚparamr5   s   &&   €r6   r(   ÚBltModel.__init__€  s  ø€ Ü‰Ñ˜Ô Ø&+ˆÔ#àŒÜ,¨V×-BÑ-BÓCˆÔÜ"6°v×7KÑ7KÓ"LˆÔÜ,¨V×-BÑ-BÓCˆÔØ×DÑDÄsÈ6×KnÑKnÓGoÕoˆØ!×?Ñ?À.ÕPÐÜ*,¯,ª,Ð7G×I^ÑI^×IjÑIjÓ*kˆÔ'Ø�;‰;×'×'Ð'Ü% f×&;Ñ&;Ó<ˆDŒLØ�L‰L×ÑÔØŸ™×0Ñ0Ö2�Ø&+�Ö#ò 3ð  ˆDŒLØ�‰Ör8   c                ó6  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[R,          R	S[S[,          R
S[S[	,          /	# )rK   ry  Nr¼  rÀ   r¤   rÂ   rz  rÃ   r�   rM   )
rT   rÅ   r\   r   rÇ   rÆ   r   r   rj   r   )rO   rG   s   "€r6   rP   r8  –  s·   ø€ ÷ C
ñ C
á×#Ñ# dÕ*ðC
ñ —|‘| dÕ*ðC
ñ Ÿ™ tÕ+ð	C
ñ
 ×&Ñ&¨Õ-ðC
ñ  �ðC
ñ ×(Ñ(¨4Õ/ðC
ñ ˜$•;ðC
ñ Ñ+Õ,ðC
ñ 
Ñ(Õ	(ñC
r8   c                ó0	  € VR J VR J,          '       d   \        R4      hV'       dp   Vf6   \        \        V P                  R7      \        V P                  R7      4      pM6\	        V\        4      '       g!   \        V\        V P                  R7      4      pVe   Tp	VP
                  w  r«pMnVP
                  w  r«\        VV P                  V P                  V P                  P                  V P                  P                  V P                  P                  4      p	VEf$   V P                  P                  R8X  d“   V P                  e…   Vf   \        R4      hV P                  VV P                  P                  V P                  P                  V P                  P                   V P                  P"                  VP$                  R7      w  rÂpMvVe   VP$                  MVP$                  pVe   VP&                  MVP&                  p\)        \*        P,                  ! W«^,           3WíR7      V P                  P                   4      pV P/                  W+4      pVfb   Ve   VP1                  4       M^ p\*        P2                  ! V	P
                  ^,          V	P$                  R7      V,           pVP5                  ^ 4      p\7        V P                  T	TVe   VP8                  MR VR7      p\;        VVP
                  ^,          VR	V P                  P<                  V	P&                  R
7      pV P                  ! RRTRT	RTRTRTRVP
                  ^,          RTRVe   VP8                  MR /VB w  ppVP?                  W¢P
                  ^,          R4      p\*        P2                  ! ^ VP
                  ^,          VP$                  R7      pVP5                  ^ 4      p\7        V P                  VR R R R7      pV P@                  ! RRVRVRV/VB pV P/                  VR,          V4      p\;        VVP
                  ^,          VRV P                  P<                  V	P&                  R
7      pV PB                  ! RRTRTRTRTRTRVe   VPD                  MR RV/VB p\G        VVR7      # )Nrá  rc  ré  z0input_ids is required for entropy-based patching)rÞ  rß  r½  Úpatching_batch_sizerq   rŒ  r€  râ  T)r~  r}  rä  r)  rm  r`   ry  rz  rÀ   r¤   r|  r}  r~  rÂ   Fr{  )Úlast_hidden_staterÂ   rÉ   r_   rð  )$rå  r   r   r)   r�   rk   r'  r\  r  r  r  r  Úpatching_moder>  rÞ  Úpatching_thresholdr½  rH  rq   r`   rÔ  rT   rU   Ú_patch_ids_from_lengthsræ  r�   rö   r
   Úself_attention_cacher4  rm  r  r­  r;  Úcross_attention_cacher   )r4   ry  r¼  rÀ   r¤   rÂ   rz  rÃ   r�   Úencoder_embedsr…  rä  r  rq   r`   r~  rë  rì  Úcross_attn_mask_encÚencoder_hidden_statesr‰  Úglobal_position_idsÚglobal_causal_maskÚglobal_hidden_statesÚdecoder_patch_idsÚcross_attn_mask_decÚoutputs   &&&&&&&&,                  r6   r<   ÚBltModel.forward”  s«  € ð ˜Ð -°tÐ";×<Ô<ÜÐYÓZÐZçØÒ&Ü"5Ü ¨¯©Ô4´lÈ$Ï+É+Ô6Vó#‘ô   Ô1D×EÒEô #6°oÄ|Ð[_×[fÑ[fÔGgÓ"h�ð Ò$Ø*ˆNØ-:×-@Ñ-@Ñ*ˆJ©à*3¯/©/Ñ'ˆJÜ4ØØ×"Ñ"Ø×/Ñ/Ø—‘×@Ñ@Ø—‘×8Ñ8Ø—‘×9Ñ9óˆNð Ó Ø�{‰{×(Ñ(¨IÔ5¸$¿,¹,Ò:RØÒ$Ü$Ð%WÓXÐXØ&*§l¡lØØ#Ÿ{™{×5Ñ5Ø"Ÿk™k×<Ñ<Ø%)§[¡[×%AÑ%AØ(,¯©×(GÑ(GØ$×+Ñ+ð '3ó 'Ñ#�¡!ð .7Ò-B˜×)Ò)È×H\ÑH\�Ø+4Ò+@˜	ŸšÀm×FYÑFY�Ü 5Ü—J’J 
¸aÕ,?Ð@ÈÔ]Ø—K‘K×0Ñ0ó!�ð ×0Ñ0°ÓPˆ	àÒØCRÒC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<š<¨×(<Ñ(<¸QÕ(?È×H]ÑH]Ô^ÐaqÕqˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø(Ø)ØDSÒD_˜O×@Ò@ÐeiØ%ô
ˆô BØØ%×+Ñ+¨AÕ.Ø+Ø#ØŸ™×1Ñ1Ø ×&Ñ&ô
Ðð 7;×6HÒ6Hñ 
7
Øð
7
à(ð
7
ð 'ð
7
ð &ð	
7
ð
 $7ð
7
ð &×+Ñ+¨AÕ.ð
7
ð  ð
7
ð ETÒD_˜O×@Ò@Ðeið
7
ð ñ
7
Ñ3ÐÐ3ð  4×8Ñ8¸×EXÑEXÐYZÕE[Ð]_Ó`ÐÜ#Ÿlšl¨1Ð.B×.HÑ.HÈÕ.KÐTh×ToÑToÔpÐØ1×;Ñ;¸AÓ>ÐÜ/Ø—;‘;Ø.ØØ Øô
Ðð  $×6Ò6ñ  
Ø.ð 
à-ð 
ð -ð 
ð ñ	 
Ðð !×8Ñ8¸ÀuÕ9MÈÓ_ÐÜAØ'Ø%×+Ñ+¨AÕ.Ø+Ø$ØŸ™×1Ñ1Ø ×&Ñ&ô
Ðð ×#Ò#ñ 	
Øð	
à/ð	
ð .ð	
ð 'ð		
ð
 &ð	
ð FUÒE`˜O×AÒAÐfjð	
ð $7ð	
ð ñ	
ˆô 'Ø$Ø+ô
ð 	
r8   c                ó.   € V P                   P                  # r:   ©r\  rp  rl   s   &r6   Úget_input_embeddingsÚBltModel.get_input_embeddings  s   € Ø×!Ñ!×.Ñ.Ð.r8   c                ó&   € WP                   n        R # r:   rZ  )r4   rÚ   s   &&r6   Úset_input_embeddingsÚBltModel.set_input_embeddings  s   € Ø*/×ÑÖ'r8   c                óT   <€ V ^8„  d   QhRS[ P                  RS[RS[ P                  /# )rK   r¼  r¸  rM   rÏ   )rO   rG   s   "€r6   rP   r8  !  s2   ø€ ÷ 
iñ 
i±U·\±\ð 
iÉCð 
iÑTY×T`ÑT`ñ 
ir8   c           	     ó¾  € VP                   ^ ,          p\        P                  ! \        P                  ! V^VP                  VP
                  R7      VP                  RR7      RRR13,          .RR7      p\        P                  ! W!P
                  R7      pVP                  ^4      VP                  ^ 4      P                  R4      8*  P                  RR7      ^,
          # )r   rŒ  rš   r›   Nr€  r_   )
rk   rT   rô  r‘  r`   rq   Úcumsumr�   rö   rÄ  )r4   r¼  r¸  r…  rü  Útoken_positionss   &&&   r6   rL  Ú BltModel._patch_ids_from_lengths!  s¾   € Ø"×(Ñ(¨Õ+ˆ
Ü—y’yä—’˜J¨°×1DÑ1DÈ]×MaÑMaÔbØ×$Ñ$¨Ð$Ó,¨Q°°°¨VÕ4ðð ô
ˆô  Ÿ,š, w×7KÑ7KÔLˆØ×&Ñ& qÓ)¨_×-FÑ-FÀqÓ-I×-SÑ-SÐTVÓ-WÑW×\Ñ\ÐacÐ\ÓdÐghÕhÐhr8   )r)   r  r­  rg  r;  r\  r>  r©  )r?   r@   rA   rB   r(   r   r   r<   r[  r^  rL  rC   rD   rE   rF   s   @@r6   r6  r6    sP   ù‡ € ÷ó ð(  Ø÷C
ñ C
ó ó  ðC
òJ/ò0÷
i÷ 
ið 
ir8   r6  zB
    The Blt Text Model with a language modeling head on top.
    )Úcustom_introc                   ó„   a a€ ] tR tRt oRtRtRR/tV3R lV 3R llt]]	RV3R lR	 ll4       4       t
V3R
 ltRtVtV ;t# )ÚBltForCausalLMi.  Fr(  z'model.local_encoder.embed_tokens.weightzlm_head.weightc                ó    <€ V ^8„  d   QhRS[ /# rt   ru   )rO   rG   s   "€r6   rP   ÚBltForCausalLM.__annotate__9  s   ø€ ÷ ñ ™yñ r8   c                ó*  <€ \         SV `  V4       VP                  4       V n        VP                  V n        \        V4      V n        \        P                  ! VP                  P                  VP                  R R7      V n        V P                  4        R# r$   )r'   r(   Úget_text_configÚtext_configro  r6  r(  r,   r-   r2  r*   rÛ  rt  r3   s   &&€r6   r(   ÚBltForCausalLM.__init__9  sk   ø€ Ü‰Ñ˜Ô Ø!×1Ñ1Ó3ˆÔØ ×+Ñ+ˆŒÜ˜fÓ%ˆŒ
Ü—y’y ×!6Ñ!6×!BÑ!BÀF×DUÑDUÐ\aÔbˆŒà�‰Ör8   c                ó  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[S[ P                  S[ P                  3,          R,          RS[R,          R	S[ P
                  R,          R
S[ P                  R,          RS[R,          RS[S[ P                  ,          RS[S[	,          RS[S[
,          /# )rK   ry  NrÀ   r¤   r¾   r¿   rÁ   rÂ   rz  ÚlabelsrÃ   Úlogits_to_keepr�   rM   )rT   rÅ   r\   rj   r   rÇ   rÆ   r±   r   r   r   )rO   rG   s   "€r6   rP   ri  D  s  ø€ ÷ V
ñ V
á×#Ñ# dÕ*ðV
ñ Ÿ™ tÕ+ðV
ñ ×&Ñ&¨Õ-ð	V
ñ
 !&× 0Ñ 0°4Õ 7ðV
ñ $×.Ñ.°Õ5ðV
ñ (-©U¯\©\¹5¿<¹<Ð-GÕ'HÈ4Õ'OðV
ñ  �ðV
ñ ×(Ñ(¨4Õ/ðV
ñ × Ñ  4Õ'ðV
ñ ˜$•;ðV
ñ ™eŸl™lÕ*ðV
ñ Ñ+Õ,ðV
ñ 
Ñ'Õ	'ñV
r8   c                óž  € V P                   ! RRVRVRVRVRVRVRVRV
/VB pVP                  p\        V\        4      '       d   \	        V) R	4      MTpV P                  VR
VR
3,          4      P                  4       pR	pV	e   V P                  ! VW�P                  3/ VB p\        VVVP                  VP                  VP                  R7      # )aÕ	  
cross_attention_states (`torch.FloatTensor`, *optional*):
    Output of the vision model, used for cross-attention. This tensor contains the processed image features that
    the language model will attend to.
cross_attention_mask (`torch.Tensor` of shape `(batch_size, seq_length, max_num_images, max_num_tiles)`, *optional*):
    Cross-attention mask to control the interaction between text tokens and image tiles.
    This 4D tensor defines which image tiles each text token should attend to.

    For each text token (in seq_length):
    - 1 indicates the token **should attend** to the corresponding image tile
    - 0 indicates the token **should not attend** to the corresponding image tile
full_text_row_masked_out_mask (`tuple[torch.Tensor, torch.Tensor]`, *optional*):
    A tuple containing two tensors that mask out rows in the cross-attention mechanism:
    - The first tensor has shape `(batch_size, 1, seq_length, 1)` and contains values of 0 or 1.
      A value of 0 indicates that the corresponding text token's entire row in the cross-attention
      matrix should be masked out (all image tokens ignored).
    - The second tensor has the same shape and is used internally to apply the masking during
      the forward pass of cross-attention layers.
    This mask is derived from the cross_attention_mask and is used to handle cases where a text token
    should not attend to any image token.
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
    config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
    (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

Example:

```python
>>> from transformers import AutoTokenizer, BltForCausalLM

>>> model = BltForCausalLM.from_pretrained("itazap/blt-1b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("itazap/blt-1b-hf")

>>> prompt = "If I had to write a haiku, it would be:"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=40, do_sample=True, temperature=0.6)
>>> result = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
>>> print(result)
If I had to write a haiku, it would be: "Snowflakes gently fall" - simple, yet peaceful.
I love the idea of snowflakes gently falling, each one
```
ry  rÀ   r¤   r¿   rÁ   rÂ   rz  rÃ   Nr›   )Úlossr¦  rÂ   rZ   r*  rÉ   )r(  rI  r�   r±   ÚslicerÛ  rN   Úloss_functionro  r   rÂ   rZ   r*  )r4   ry  rÀ   r¤   r¾   r¿   rÁ   rÂ   rz  ro  rÃ   rp  r�   ÚoutputsrZ   Úslice_indicesr¦  rr  s   &&&&&&&&&&&&,     r6   r<   ÚBltForCausalLM.forwardB  s  € ð| —*’*ñ 

Øð

à)ð

ð &ð

ð "6ð	

ð
 +Hð

ð ,ð

ð (ð

ð  ð

ð ñ

ˆð  ×1Ñ1ˆÜ8BÀ>ÔSV×8WÒ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜m¨A¨}¸aÐ,?Õ@ÓA×GÑGÓIˆàˆØÒØ×%Ò% f¨f·o±oÑPÈÑPˆDä%ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r8   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rt   ru   )rO   rG   s   "€r6   rP   ri  .  s   ø‡ ‚ ñ Ñò r8   )rÛ  r(  rl  ro  )NNNNNNNNNNr   )r?   r@   rA   rB   rR  rN  Ú_tied_weights_keysr(   r   r   r<   rX  rC   rD   rE   rF   s   @@r6   rg  rg  .  sT   ù‡ € ð #ÐØÐØCÐEUÐVÐ÷ó ð Ø÷V
ñ V
ó ó ðV
÷- … r8   rg  )r  )rí   )r   )rK   r   i0u  )r'  r6  rÖ  rg  )PÚcollections.abcr   rT   Útorch.distributionsÚtorch.nnr,   Útorch.nn.functionalrä   r�  Ú r   r<  Úactivationsr   Úcache_utilsr   r   r   Ú
generationr	   Úmasking_utilsr
   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.deprecationr   Úutils.genericr   r   Úutils.output_capturingr   r   Úconfiguration_bltr   r   r   r   r    rÝ   r"   rI   rp   r­   rÕ   rë   rô   rü   rµ   r  r'  rZ  rš  r«  rÔ  rÖ  r  r  r'  rb   r4  r6  rg  Ú__all__rÉ   r8   r6   Ú<module>r�     sŸ  ðõ* %ã Û Ý ß Ð å &Ý !ß CÑ CÝ )Ý /Ý BÝ 9ß Oß Kß FÝ &ß IÑ IÝ 0ß Gß E÷õ ôˆR�Y‰Yô ô"J�—‘ô Jô(3<˜Ÿ™ô 3<ônAÐ4ô AõH	U÷%ò2ôô2>)�r—y‘yô >)ôB;)˜Ÿ	™	ô ;)ð| ô[˜ó [ó ð[ô|n"Ð(ô n"ôbIÐ(ô IôX0Ð-ô 0õf,(ô^BÐ#ô B÷J:÷:õ$#ðT  %ØØŸ™÷K ô\liÐ!ô liñ^ ðôô
g
Ð'¨ó g
óð
g
òT M‚r8   