Ë
    ÜÓ^jØA  ã                   óX  — d dl Z d dlZd dlmc mZ d dlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ  G d„ dej6                  «      Z G d„ dej6                  «      Ze G d„ de«      «       Ze G d„ de«      «       Z G d„ de«      Z g d¢Z!y)é    N)Únné   )Úinitialization)ÚCache)Úcreate_causal_mask)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚPreTrainedModel)Úauto_docstringÚcan_return_tuple)Úmaybe_autocasté   )Ú	AutoModelé   )Ú	PI0Configc                   ó4   ‡ — e Zd Zˆ fd„Zed„ «       Zd„ Zˆ xZS )ÚPI0TimestepEmbeddingsc                 óz   •— t         ‰| �  «        || _        | j                  |«      }| j	                  d|d¬«       y )NÚsinusoid_freqF)Ú
persistent)ÚsuperÚ__init__ÚconfigÚcompute_freqsÚregister_buffer)Úselfr   r   Ú	__class__s      €úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/pi0/modeling_pi0.pyr   zPI0TimestepEmbeddings.__init__'   s:   ø€ Ü‰ÑÔØˆŒØ×*Ñ*¨6Ó2ˆØ×Ñ˜_¨mÈÐÕNó    c                 ó  — t        j                  dd| j                  j                  dz  t         j                  ¬«      }| j
                  | j                  | j
                  z  |z  z  }d|z  dz  t        j                  z  }|S )Nç        ç      ð?r   ©Údtype)	ÚtorchÚlinspaceÚ
dit_configÚhidden_sizeÚfloat32Ú
min_periodÚ
max_periodÚmathÚpi)r   ÚfractionÚperiodr   s       r   r   z#PI0TimestepEmbeddings.compute_freqs-   sr   € ä—>‘> # s¨F×,=Ñ,=×,IÑ,IÈQÑ,NÔV[×VcÑVcÔdˆØ×"Ñ" f×&7Ñ&7¸&×:KÑ:KÑ&KÐPXÑ%XÑXˆØ˜f™ qÑ(¬4¯7©7Ñ2ˆØÐr   c                 óž  — t        |j                  j                  t        «      r/|j                  j                  dk7  r|j                  j                  nd}t	        |d¬«      5  | j
                  d d d …f   }||d d …d f   z  }t        j                  |j                  «       |j                  «       gd¬«      }d d d «       |S # 1 sw Y   S xY w)NÚmpsÚcpuF)Údevice_typeÚenabledr   ©Údim)
Ú
isinstanceÚdeviceÚtypeÚstrr   r   r%   ÚcatÚsinÚcos)r   Útimer3   r   ÚembÚtime_embedss         r   ÚforwardzPI0TimestepEmbeddings.forward4   s°   € Ü*4°T·[±[×5EÑ5EÄsÔ*KÐPT×P[ÑP[×P`ÑP`ÐdiÒPi�d—k‘k×&Ò&ÐotˆÜ¨¸UÔCñ 	CØ ×.Ñ.¨t²Q¨wÑ7ˆMØ $¢q¨$ w¡-Ñ/ˆCÜŸ)™) S§W¡W£Y°·±³	Ð$:ÀÔBˆK÷	Cð Ð÷		Cð Ðús   Á#ACÃC)Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   rA   Ú__classcell__©r   s   @r   r   r   &   s"   ø„ ôOð ñó ðör   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚPI0ActionTimeEmbeddingc                 ó8  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  j                  «      | _	        t	        j
                  |j                  |j                  j                  «      | _        t	        j
                  d|j                  j                  z  |j                  j                  «      | _        t	        j
                  |j                  j                  |j                  j                  «      | _        y )Nr   )r   r   r   Úsinusoid_embedsr   ÚLinearÚmax_action_dimr'   r(   Úaction_in_projÚmax_state_dimÚ
state_projÚaction_time_mlp_inÚaction_time_mlp_out©r   r   r   s     €r   r   zPI0ActionTimeEmbedding.__init__>   s¿   ø€ Ü‰ÑÔÜ4°VÓ<ˆÔÜ Ÿi™i¨×(=Ñ(=¸v×?PÑ?P×?\Ñ?\Ó]ˆÔÜŸ)™) F×$8Ñ$8¸&×:KÑ:K×:WÑ:WÓXˆŒÜ"$§)¡)¨A°×0AÑ0A×0MÑ0MÑ,MÈv×O`ÑO`×OlÑOlÓ"mˆÔÜ#%§9¡9¨V×->Ñ->×-JÑ-JÈF×L]ÑL]×LiÑLiÓ#jˆÕ r   c                 ó´  — | j                  |«      }| j                  |«      }| j                  |«      }|d d …d d d …f   j                  |«      j	                  |j
                  ¬«      }t        j                  ||gd¬«      }| j                  t        j                  | j                  |«      «      «      }t        j                  |d d …d d d …f   |gd¬«      }|S )Nr#   r   r5   r   )rP   rN   rK   Ú	expand_asÚtor$   r%   r;   rR   ÚFÚsilurQ   )	r   ÚstateÚnoiseÚtimestepÚstate_embedsÚaction_embedsr@   Úaction_time_embedsÚaction_embeds_mergeds	            r   rA   zPI0ActionTimeEmbedding.forwardF   sÅ   € Ø—‘ uÓ-ˆØ×+Ñ+¨EÓ2ˆà×*Ñ*¨8Ó4ˆØ!¢! Tª1 *Ñ-×7Ñ7¸ÓF×IÑIÐP]×PcÑPcÐIÓdˆä"ŸY™Y¨°{Ð'CÈÔKÐØ!×5Ñ5´a·f±f¸T×=TÑ=TÐUgÓ=hÓ6iÓjÐÜ$Ÿy™y¨,²q¸$Â°zÑ*BÐDVÐ)WÐ]^Ô_ÐØ#Ð#r   )rB   rC   rD   r   rA   rF   rG   s   @r   rI   rI   =   s   ø„ ôkö
$r   rI   c                   óT   ‡ — e Zd ZU eed<   dZdZdZdgZdZ	dZ
dZdZdZdZˆ fd„Zˆ xZS )ÚPI0PreTrainedModelr   ÚmodelrY   TÚpast_key_values)ÚimageÚtextc                 ó¸   •— t         ‰| �  |«       t        |t        «      r:t	        j
                  |j                  |j                  |j                  «      «       y y ©N)	r   Ú_init_weightsr7   r   ÚinitÚcopy_r   r   r   )r   Úmoduler   s     €r   rh   z PI0PreTrainedModel._init_weightsa   sC   ø€ Ü‰Ñ˜fÔ%Ü�fÔ3Ô4Ü�J‰J�v×+Ñ+¨V×-AÑ-AÀ&Ç-Á-Ó-PÕQð 5r   )rB   rC   rD   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_supports_attention_backendÚinput_modalitiesrh   rF   rG   s   @r   ra   ra   S   sR   ø… àÓØÐØ€OØ&*Ð#Ø#4Ð"5ÐØÐØ€NØÐØ!ÐØ"&ÐØ(Ð÷Rð Rr   ra   c                   ó>  ‡ — e Zd Zdefˆ fd„Zd„ Zd„ Zdd„Zee		 	 	 	 	 	 	 dde
j                  de
j                  dz  d	e
j                  dz  d
e
j                  dz  de
j                  dz  de
j                  dz  de
j                  dz  dedz  defd„«       «       Zˆ xZS )ÚPI0Modelr   c                 óÔ   •— t         ‰| �  |«       t        j                  |j                  «      | _        t        j                  |j                  «      | _        | j                  «        y rg   )	r   r   r   Úfrom_configr'   ÚditÚ
vlm_configÚvlmÚ	post_initrS   s     €r   r   zPI0Model.__init__i   sJ   ø€ Ü‰Ñ˜Ô Ü×(Ñ(¨×):Ñ):Ó;ˆŒÜ×(Ñ(¨×):Ñ):Ó;ˆŒØ�‰Õr   c                 ó6   — | j                   j                  «       S rg   )r}   Úget_input_embeddings)r   s    r   r€   zPI0Model.get_input_embeddingso   s   € Ø�x‰x×,Ñ,Ó.Ð.r   c                 ó:   — | j                   j                  |«       y rg   )r}   Úset_input_embeddings)r   Úvalues     r   r‚   zPI0Model.set_input_embeddingsr   s   € Ø�‰×%Ñ% eÕ,r   Nc                 óÞ  — |j                   d   }|j                  dd«      }| j                  j                  |«      j                  }|j                  d||j                   d   |j                   d   «      }g }t        |«      D ]  \  }}	||   |	   }
|j                  |
«       Œ  t        j                  |d¬«      }|j                  «       }d||| j                  j                  j                  k(  <    | j                  j                  «       |«      }|| j                  j                  j                  k(  j                  d«      j!                  |j"                  «      }|j%                  ||«      }|S )Nr   r   éÿÿÿÿr   r5   )ÚshapeÚflattenr}   Úget_image_featuresÚpooler_outputÚreshapeÚ	enumerateÚappendr%   r;   Úcloner   r|   Úimage_token_idr€   Ú	unsqueezerV   r8   Úmasked_scatter)r   Ú	input_idsÚpixel_valuesÚpixel_attention_maskÚattention_maskÚmax_num_camerasÚimage_featuresÚtotal_image_featuresÚ	batch_idxÚmaskÚunpadded_image_featuresÚllm_input_idsÚinputs_embedsÚspecial_image_masks                 r   Úembed_prefixzPI0Model.embed_prefixu   s[  € Ø.×4Ñ4°QÑ7ˆØ#×+Ñ+¨A¨qÓ1ˆØŸ™×4Ñ4°\ÓB×PÑPˆØ'×/Ñ/°°OÀ^×EYÑEYÐZ[ÑE\Ð^l×^rÑ^rÐstÑ^uÓvˆà!ÐÜ(Ð)=Ó>ò 	A‰OˆI�tØ&4°YÑ&?ÀÑ&EÐ#Ø ×'Ñ'Ð(?Õ@ð	Aô  %Ÿy™yÐ)=À1ÔEÐà!Ÿ™Ó)ˆØLMˆ�i 4§;¡;×#9Ñ#9×#HÑ#HÑHÑIØ7˜Ÿ™×5Ñ5Ó7¸ÓFˆà˜$Ÿ+™+×0Ñ0×?Ñ?Ñ?×JÑJÈ2ÓN×QÑQÐR_×RfÑRfÓgð 	ð &×4Ñ4Ð5GÐI]Ó^ˆàÐr   r]   r‘   r’   r”   r“   Úposition_idsrœ   rc   Úreturnc	                 ó:  — |�n|€l|�|€|j                  d«      dz
  }|€| j                  |||«      }t        j                  |«      dd…dd…df   }
| j	                  ||||
d¬«      j
                  }|�|j                  dk7  rt        d«      ‚dx}}|�‘t        j                  |j                  d   |j                  d   |j                  |j                  ¬	«      }t        j                  ||gd¬
«      }t        j                   |d¬
«      dz
  dd…|j                  d    d…f   }|j                  «       }t        j                  t        j                  |dz   |j                  t        j                  ¬«      t        j                  |j                  d   dz
  |j                  t        j                  ¬«      g«      }|ddd…f   j!                  |j                  d   d«      }t#        | j$                  j&                  ||||¬«      } | j(                  d||||dœ|	¤Ž}|S )zû
        action_embeds (`torch.Tensor`, *optional*):
            The embeddings of input actions and robot states.
        pixel_attention_mask (`torch.Tensor`, *optional*):
            The mask indicating padded positions in the input image.
        Nr…   r   r   T)rœ   r”   rŸ   Útoken_type_idsÚ	use_cacher   z:Only two-dimensional attention masks are accepted for now!©r$   r8   r5   ©r8   r$   )r   rœ   r”   rc   Úblock_sequence_ids)rœ   r”   rŸ   rc   © )Úcumsumrž   r%   Ú
zeros_liker}   rc   ÚndimÚ
ValueErrorÚonesr†   r$   r8   r;   Úget_seq_lengthÚzerosÚlongÚrepeatr   r   r'   r{   )r   r]   r‘   r’   r”   r“   rŸ   rœ   rc   Úkwargsr¢   Údit_position_idsÚdit_attention_maskÚ
noise_maskÚvlm_input_lengthr¦   Úbidirectional_maskÚ
dit_outputs                     r   rA   zPI0Model.forward‹   sI  € ð( Ð#¨Ð(?ØÐ)¨lÐ.BØ-×4Ñ4°RÓ8¸1Ñ<�àÐ$Ø $× 1Ñ 1°)¸\ÐK_Ó `�ô #×-Ñ-¨mÓ<ºQÂÀ1¸WÑEˆNØ"Ÿh™hØ+Ø-Ø)Ø-Øð 'ó ÷ ‰oð ð Ð%¨.×*=Ñ*=ÀÒ*BÜÐYÓZÐZð 15Ð4ÐÐ-ØÐ%ÜŸ™Ø×#Ñ# AÑ&Ø×#Ñ# AÑ&Ø$×*Ñ*Ø%×,Ñ,ô	ˆJô "'§¡¨N¸JÐ+GÈQÔ!OÐÜ %§¡Ð-?ÀQÔ GÈ!Ñ KÊQÐQ^×QdÑQdÐefÑQgÐPgÑPiÐMiÑjÐð +×9Ñ9Ó;ÐÜ"ŸY™Yä—‘Ð,¨qÑ0¸×9MÑ9MÔUZ×U_ÑU_Ô`Ü—
‘
˜=×.Ñ.¨qÑ1°AÑ5¸m×>RÑ>RÔZ_×ZdÑZdÔeðó
Ðð 0°²a°Ñ8×?Ñ?À×@SÑ@SÐTUÑ@VÐXYÓZÐÜ/Ø—;‘;×)Ñ)Ø'Ø-Ø+Ø1ô
Ðð �T—X‘Xð 
Ø'Ø-Ø)Ø+ñ	
ð
 ñ
ˆ
ð Ðr   rg   )NNNNNNN)rB   rC   rD   r   r   r€   r‚   rž   r   r   r%   ÚTensorÚ
LongTensorr   r   rA   rF   rG   s   @r   rx   rx   g   sô   ø„ ð˜yõ ò/ò-óð, Øð *.Ø,0Ø.2Ø48Ø04Ø-1Ø(,ñKà—|‘|ðKð —<‘< $Ñ&ðKð —l‘l TÑ)ð	Kð
 Ÿ™ tÑ+ðKð $Ÿl™l¨TÑ1ðKð ×&Ñ&¨Ñ-ðKð —|‘| dÑ*ðKð  ™ðKð 
!òKó ó ôKr   rx   c                   óŽ  ‡ — e Zd ZdZddiZdefˆ fd„Zee	 	 	 	 	 	 	 	 	 	 dde	j                  de	j                  dz  d	e	j                  dz  d
e	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  dedz  de	j                  defd„«       «       Z e	j"                  «       	 	 	 	 dde	j                  d
e	j                  de	j                  de	j                  dz  de	j                  dz  de	j                  dz  dedz  de	j                  fd„«       Zˆ xZS )ÚPI0ForConditionalGenerationz9PI0 model with action projection heads and flow matching.Úaction_out_projÚcolwise_gather_outputr   c                 ó  •— t         ‰| �  |«       t        |«      | _        |j                  j
                  | _        t        |«      | _        t        j                  | j                  |j                  «      | _        | j                  «        y rg   )r   r   rx   rb   r'   r(   Úexpert_hidden_sizerI   Úembed_action_timer   rL   rM   r¼   r~   rS   s     €r   r   z$PI0ForConditionalGeneration.__init__à   sf   ø€ Ü‰Ñ˜Ô Ü˜fÓ%ˆŒ
Ø"(×"3Ñ"3×"?Ñ"?ˆÔÜ!7¸Ó!?ˆÔÜ!Ÿy™y¨×)@Ñ)@À&×BWÑBWÓXˆÔØ�‰Õr   NrY   rZ   r[   r‘   r’   r“   r”   rŸ   rœ   rc   Úactionsr    c                 óÎ  — |j                   d   }|€ût        j                  | j                  j                  t        j
                  ¬«      }t        j                  | j                  j                  t        j
                  ¬«      }t        j                  j                  ||«      }|j                  |f«      j                  |j                  «      }|| j                  j                  z  | j                  j                  z   j                  «       }|€Vt        j                  || j                  j                   | j                  j"                  |j                  |j$                  ¬«      }|�7|dd…ddf   }||z  d|z
  |z  z   j                  |j$                  «      }||z
  }n|}| j'                  |||«      } | j(                  d	||||||	||
dœ|¤Ž}|j*                  dd…| j                  j                    d…f   }| j-                  |«      }d}|�,t/        j0                  || j                  j2                  ¬«      }t5        |||j6                  |j8                  |j:                  ¬«      S )
a-  
        state (`torch.Tensor`, *optional*):
            Current robot state.
        noise (`torch.Tensor`, *optional*):
            Random noise at current timestep that needs to be denoised
        timestep (`torch.Tensor`, *optional*):
            Current denoising timestep.
        pixel_attention_mask (`torch.Tensor`, *optional*):
            The mask indicating padded positions in the input image.
        actions (`torch.Tensor`, *optional*):
            Input actions that need to be predicted. Used only when training to compiute loss.
        r   Nr#   r¥   r   )r‘   r’   r”   r“   rŸ   rœ   r]   rc   )Ú	reduction)ÚlossÚlogitsrc   Úhidden_statesÚ
attentionsr§   )r†   r%   Útensorr   Útime_sampling_beta_alphar)   Útime_sampling_beta_betaÚdistributionsÚBetaÚsamplerV   r8   Útime_sampling_scaleÚtime_sampling_offsetÚfloatÚrandnÚ
chunk_sizerM   r$   rÀ   rb   Úlast_hidden_stater¼   rW   Úmse_lossÚloss_reductionr	   rc   rÆ   rÇ   )r   rY   rZ   r[   r‘   r’   r“   r”   rŸ   rœ   rc   rÁ   r±   Ú
batch_sizeÚalpha_tÚbeta_tÚdistÚ	time_betaÚtime_expandedÚnoisy_actionsÚtarget_velocityr^   ÚoutputsÚlast_hidden_statesÚpredicted_velocityrÄ   s                             r   rA   z#PI0ForConditionalGeneration.forwardè   s'  € ð: —[‘[ ‘^ˆ
ð ÐÜ—l‘l 4§;¡;×#GÑ#GÌuÏ}É}Ô]ˆGÜ—\‘\ $§+¡+×"EÑ"EÌUÏ]É]Ô[ˆFÜ×&Ñ&×+Ñ+¨G°VÓ<ˆDØŸ™ Z MÓ2×5Ñ5°e·l±lÓCˆIØ! D§K¡K×$CÑ$CÑCÀdÇkÁk×FfÑFfÑf×mÑmÓoˆHð ˆ=Ü—K‘KØØ—‘×&Ñ&Ø—‘×*Ñ*Ø—|‘|Ø—k‘kôˆEð ÐØ$¢Q¨¨d ]Ñ3ˆMØ*¨UÑ2°a¸-Ñ6GÈ7Ñ5RÑR×VÑVÐW^×WdÑWdÓeˆMØ# g™o‰Oà!ˆMð "×3Ñ3°E¸=È(ÓSÐà�$—*‘*ð 

ØØ%Ø)Ø!5Ø%Ø'Ø,Ø+ñ

ð ñ

ˆð %×6Ñ6²q¸4¿;¹;×;QÑ;QÐ:QÑ:SÐ7SÑTÐØ!×1Ñ1Ð2DÓEÐàˆØÐä—:‘:˜oÐ/AÈTÏ[É[×MgÑMgÔhˆDä%ØØ%Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r   Ú	num_stepsc                 ó8  — |xs | j                   j                  }|j                  d   }	|j                  }
|€Ot	        j
                  dd|	| j                   j                  | j                   j                  f|j                  |
¬«      }d}|�|j                  d«      dz
  }| j                  j                  |||«      }t	        j                  |«      dd…dd…df   }| j                  j                  ||||dd¬	«      j                  }|j                  «       }d
|z  }t!        |«      D ]q  }d||z  z   }t	        j"                  |t        j$                  |
¬«      j'                  |	«      } | d||||||dœ|¤Ž}|j)                  |«       |||j*                  z  z   }Œs |S )z0Run flow matching inference to generate actions.r   Nr!   r"   )ÚmeanÚstdÚsizer$   r8   r…   r   T)rœ   r”   rŸ   r¢   r£   Úreturn_dictg      ð¿r¤   )rY   rZ   r[   r“   r”   rc   r§   )r   Únum_inference_stepsr†   r8   r%   ÚnormalrÒ   rM   r$   r¨   rb   rž   r©   r}   rc   r­   ÚrangerÈ   r)   ÚexpandÚcroprÅ   )r   rY   r‘   r’   rZ   r”   r“   rá   r±   rÖ   r8   rŸ   rœ   r¢   rc   Úprefix_lengthÚdtÚstepr>   Útime_tensorÚoutputs                        r   Úsample_actionsz*PI0ForConditionalGeneration.sample_actions@  s¹  € ð Ò@ §¡×!@Ñ!@ˆ	Ø—_‘_ QÑ'ˆ
Ø×!Ñ!ˆð ˆ=Ü—L‘LØØàØ—K‘K×*Ñ*Ø—K‘K×.Ñ.ðð
 #×(Ñ(Øô
ˆEð ˆØÐ%Ø)×0Ñ0°Ó4°qÑ8ˆLØŸ
™
×/Ñ/°	¸<ÐI]Ó^ˆÜ×)Ñ)¨-Ó8ººA¸q¸ÑAˆØŸ*™*Ÿ.™.Ø'Ø)Ø%Ø)ØØð )ó 
÷ ‰/ð 	ð (×6Ñ6Ó8ˆð �IÑˆÜ˜)Ó$ò 	/ˆDØ˜ ™‘?ˆDÜŸ,™, t´5·=±=ÈÔP×WÑWÐXbÓcˆKÙð ØØØ$Ø%9Ø-Ø /ñð ñˆFð × Ñ  Ô/Ø˜B §¡Ñ.Ñ.‰Eð	/ð  ˆr   )
NNNNNNNNNN)NNNN)rB   rC   rD   Ú__doc__Ú_tp_planr   r   r   r   r%   ÚFloatTensorr¸   Ú
BoolTensorr¹   r   r	   rA   Úno_gradÚintrñ   rF   rG   s   @r   r»   r»   Û   sû  ø„ ÙCà!Ð#:Ð;€Hð˜yõ ð Øð +/Ø-1Ø)-Ø,0Ø8<Ø.2Ø04Ø-1Ø(,Ø%)ñT
à× Ñ ðT
ð × Ñ  4Ñ'ðT
ð ×#Ñ# dÑ*ð	T
ð
 —<‘< $Ñ&ðT
ð —l‘l TÑ)ðT
ð $×.Ñ.°Ñ5ðT
ð Ÿ™ tÑ+ðT
ð ×&Ñ&¨Ñ-ðT
ð —|‘| dÑ*ðT
ð  ™ðT
ð ×"Ñ"ðT
ð 
 òT
ó ó ðT
ðl €U‡]�]ƒ_ð +/Ø.2Ø8<Ø $ñAà× Ñ ðAð ×#Ñ#ðAð ×'Ñ'ð	Að
 × Ñ  4Ñ'ðAð Ÿ™ tÑ+ðAð $×.Ñ.°Ñ5ðAð ˜‘:ðAð 
×	Ñ	òAó ôAr   r»   )ra   rx   r»   )"r,   r%   Útorch.nn.functionalr   Ú
functionalrW   Ú r   ri   Úcache_utilsr   Úmasking_utilsr   Úmodeling_outputsr   r	   Úmodeling_utilsr
   Úutilsr   r   Úutils.genericr   Úautor   Úconfiguration_pi0r   ÚModuler   rI   ra   rx   r»   Ú__all__r§   r   r   ú<module>r     s§   ðó* ã ß Ð Ý å &Ý  Ý /ß OÝ -ß 5Ý +Ý Ý (ô˜BŸI™Iô ô.$˜RŸY™Yô $ð, ôR˜ó Ró ðRð& ôpÐ!ó pó ðpôfgÐ"4ô gòT L�r   