§
    ‚Štj˜L  ã                   ój  — d Z ddlmZ ddl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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mZmZmZmZmZ ddlm Z  ddl!m"Z"  ej#        e$¦  «        Z% ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z& ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z' G d„ dej(        ¦  «        Z)e G d„ de¦  «        ¦   «         Z* ed¬¦  «         G d„ d e*¦  «        ¦   «         Z+ ed¬¦  «         G d!„ d"e*e
¦  «        ¦   «         Z,g d#¢Z-dS )$zPyTorch PaliGemmamodel.é    )Ú	dataclassN)Únné   )ÚCache)ÚPreTrainedConfig)ÚGenerationMixin)Úcreate_causal_maskÚcreate_masks_for_generateÚ!create_sliding_window_causal_mask)ÚFlashAttentionKwargs)ÚBaseModelOutputWithPastÚBaseModelOutputWithPooling)ÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_checké   )Ú	AutoModelé   )ÚPaliGemmaConfigzN
    Base class for Paligemma outputs, with hidden states and attentions.
    ©Úcustom_introc                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚPaligemmaModelOutputWithPasta  
    image_hidden_states (`torch.FloatTensor`, *optional*):
        A `torch.FloatTensor` of size `(batch_size, num_images, sequence_length, hidden_size)`.
        image_hidden_states of the model produced by the vision encoder and after projecting the last hidden state.
    NÚimage_hidden_states)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__© ó    ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/paligemma/modeling_paligemma.pyr   r   ,   s7   € € € € € € ðð ð 59Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð8r(   r   zU
    Base class for PaliGemma causal language model (or autoregressive) outputs.
    c                   óÖ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed<   dZej        dz  ed<   dS )	ÚPaliGemmaCausalLMOutputWithPasta8  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.text_config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see
        `past_key_values` input) to speed up sequential decoding.
    image_hidden_states (`torch.FloatTensor`, *optional*):
        A `torch.FloatTensor` of size `(batch_size, num_images, sequence_length, hidden_size)`.
        image_hidden_states of the model produced by the vision encoder after projecting last hidden state.
    NÚlossÚlogitsÚpast_key_valuesÚhidden_statesÚ
attentionsr   )r    r!   r"   r#   r,   r$   r%   r&   r-   r.   r   r/   Útupler0   r   r'   r(   r)   r+   r+   <   sµ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø$(€O�U˜T‘\Ð(Ð(Ñ(Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð8r(   r+   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚPaliGemmaMultiModalProjectorÚconfigc                 ó¨   •— t          ¦   «                              ¦   «          t          j        |j        j        |j        j        d¬¦  «        | _        d S )NT©Úbias)ÚsuperÚ__init__r   ÚLinearÚvision_configÚhidden_sizeÚprojection_dimÚlinear©Úselfr4   Ú	__class__s     €r)   r9   z%PaliGemmaMultiModalProjector.__init__[   sB   ø€ Ý‰Œ×ÒÑÔÐÝ”i Ô 4Ô @À&ÔBVÔBeÐlpÐqÑqÔqˆŒˆˆr(   c                 ó0   — |                       |¦  «        }|S ©N)r>   )r@   Úimage_featuresr/   s      r)   Úforwardz$PaliGemmaMultiModalProjector.forward_   s   € ØŸš NÑ3Ô3ˆàÐr(   )r    r!   r"   r   r9   rE   Ú__classcell__©rA   s   @r)   r3   r3   Z   sZ   ø€ € € € € ðr˜ð rð rð rð rð rð rðð ð ð ð ð ð r(   r3   c                   óF   — e Zd ZU eed<   dZdZdZdgZdgZ	dZ
dZdZdZdZdS )	ÚPaliGemmaPreTrainedModelr4   Úmodel)ÚimageÚtextTr3   r.   FN)r    r!   r"   r   r&   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_can_compile_fullgraphÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendr'   r(   r)   rI   rI   e   s_   € € € € € € àÐÐÑØÐØ(ÐØ&*Ð#Ø7Ð8ÐØ#4Ð"5ÐØ"ÐØÐØ€NØÐØ"&ÐÐÐr(   rI   z|
    The Base Paligemma model which consists of a vision backbone and a language model without language modeling head.,
    c                   ó´  ‡ — e Zd ZdZdefˆ fd„Ze ed¬¦  «        dej	        de
e         deez  fd	„¦   «         ¦   «         Zd
ej        dej	        dej	        fd„Zee	 	 	 	 	 	 	 	 	 d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z  dej	        dz  dej        dz  dedz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚPaliGemmaModelFr4   c                 ó�  •— t          ¦   «                              |¦  «         t          j        |j        ¬¦  «        | _        t          |¦  «        | _        |j        j	        | _	        t          j        |j        ¬¦  «        }|| _
        | j                             ¦   «         j        p| j        | _        |                      ¦   «          d S )N)r4   )r8   r9   r   Úfrom_configr;   Úvision_towerr3   Úmulti_modal_projectorÚtext_configÚ
vocab_sizeÚlanguage_modelr4   Úget_text_configÚdtypeÚtext_config_dtypeÚ	post_init)r@   r4   r_   rA   s      €r)   r9   zPaliGemmaModel.__init__}   s¥   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý%Ô1¸Ô9MÐNÑNÔNˆÔÝ%AÀ&Ñ%IÔ%IˆÔ"Ø Ô,Ô7ˆŒå"Ô.°fÔ6HÐIÑIÔIˆØ,ˆÔà!%¤×!<Ò!<Ñ!>Ô!>Ô!DÐ!RÈÌ
ˆÔØ�ŠÑÔÐÐÐr(   zWObtains image last hidden states from the vision tower and apply multimodal projection.r   Úpixel_valuesÚkwargsÚreturnc                 óh   —  | j         |fi |¤Ž}|j        }|                      |¦  «        }||_        |S rC   )r[   Úlast_hidden_stater\   Úpooler_output)r@   rd   re   Úimage_outputsÚselected_image_featurerD   s         r)   Úget_image_featuresz!PaliGemmaModel.get_image_features‰   sI   € ð *˜Ô)¨,ÐAÐA¸&ÐAÐAˆØ!.Ô!@ÐØ×3Ò3Ð4JÑKÔKˆØ&4ˆÔ#àÐr(   Ú	input_idsÚinputs_embedsrD   c                 ó   — |€e| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n|| j        j        k    }|                     ¦   «         }|j	        d         |j	        d         z  }| 
                    d¦  «                             |j        ¦  «        }t          ||j	        d         z  |                     ¦   «         k    d|› d|› �¦  «         |S )zï
        Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
        equal to the length of multimodal features. If the lengths are different, an error is raised.
        N)ra   Údeviceéÿÿÿÿr   r   z6Image features and image tokens do not match, tokens: z, features: )Úget_input_embeddingsr$   Útensorr4   Úimage_token_idÚlongrp   ÚallÚsumÚshapeÚ	unsqueezeÚtor   Únumel)r@   rm   rn   rD   Úspecial_image_maskÚn_image_tokensÚn_image_featuress          r)   Úget_placeholder_maskz#PaliGemmaModel.get_placeholder_mask—   s  € ð ÐØ!.Ð2M°$×2KÒ2KÑ2MÔ2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐÐà!*¨d¬kÔ.HÒ!HÐà+×/Ò/Ñ1Ô1ˆØ)Ô/°Ô2°^Ô5IÈ!Ô5LÑLÐØ/×9Ò9¸"Ñ=Ô=×@Ò@ÀÔAUÑVÔVÐÝØ˜]Ô0°Ô4Ñ4¸×8LÒ8LÑ8NÔ8NÒNØsÀ^ÐsÐsÐaqÐsÐsñ	
ô 	
ð 	
ð "Ð!r(   NÚattention_maskÚposition_idsr.   Útoken_type_idsÚlabelsÚ	use_cachec
           	      ó2  — |du |duz  rt          d¦  «        ‚|�?| j        j        | j        k    r*|| j        j        k    }|                     ¦   «         }d||<   n|}|€ |                      ¦   «         |¦  «        }|€Y|�|                     ¦   «         nd}t          j        |j	        d         |j
        ¬¦  «        |z   }|                     d¦  «        dz   }|�h|                      |¦  «        j        }|                     |j
        |j        ¦  «        }|                      |||¬¦  «        }|                     ||¦  «        }| j                             ¦   «         ||||dœ}|du p|j         p|du}|�|rt          j        |dk    dd¦  «        |d	<   t+          di |¤Ž}t-          | j        j        d
d¦  «        �#|                     ¦   «         }|t3          di |¤Ždœ} | j        d|||||	dœ|
¤Ž}t7          |j        |j        |j        |j        |�|nd¬¦  «        S )áº  
        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.text_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.text_config.vocab_size]`.

        Example:

        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, PaliGemmaForConditionalGeneration

        >>> model = PaliGemmaForConditionalGeneration.from_pretrained("google/paligemma2-3b-mix-224")
        >>> processor = AutoProcessor.from_pretrained("google/paligemma2-3b-mix-224")

        >>> prompt = "Where is the cat standing?"
        >>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=image, text=prompt,  return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(**inputs,)
        >>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Where is the cat standing?\nsnow"
        ```Nz:You must specify exactly one of input_ids or inputs_embedsr   r   ©rp   )rn   rD   )r4   rn   r€   r.   r�   rq   Úblock_sequence_idsÚsliding_window)Úfull_attentionÚsliding_attention)r€   r�   r.   rn   r„   )rh   r.   r/   r0   r   r'   ) Ú
ValueErrorr4   rt   r^   Úclonerr   Úget_seq_lengthr$   Úarangerx   rp   ry   rl   ri   rz   ra   r   Úmasked_scatterr`   Úis_initializedÚwherer	   Úgetattrr]   Úcopyr   r_   r   rh   r.   r/   r0   )r@   rm   rd   r€   r�   r.   r‚   rn   rƒ   r„   re   r|   Úllm_input_idsÚpast_seen_tokensrD   Úmask_kwargsÚis_first_iterationÚcausal_maskÚsliding_mask_kwargsÚoutputss                       r)   rE   zPaliGemmaModel.forward¯   s½  € ðZ ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZð Ð  T¤[Ô%?À4Ä?Ò%RÐ%RØ!*¨d¬kÔ.HÒ!HÐØ%ŸOšOÑ-Ô-ˆMØ01ˆMÐ,Ñ-Ð-à%ˆMàÐ Ø7˜D×5Ò5Ñ7Ô7¸ÑFÔFˆMàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4°qÑ8ˆLð Ð#Ø!×4Ò4°\ÑBÔBÔPˆNØ+×.Ò.¨}Ô/CÀ]ÔEXÑYÔYˆNØ!%×!:Ò!:Ø¨À~ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ^Ñ\Ô\ˆMð ”k×1Ò1Ñ3Ô3Ø*Ø,Ø.Ø(ð
ð 
ˆð -°Ð4Ðv¸OÔ<ZÐ8ZÐvÐ^jÐrvÐ^vÐØÐ%Ð*<Ð%å05´¸NÈaÒ<OÐQRÐTVÑ0WÔ0WˆKÐ,Ñ-õ )Ð7Ð7¨;Ð7Ð7ˆÝ�4”;Ô*Ð,<¸dÑCÔCÐOØ"-×"2Ò"2Ñ"4Ô"4Ðà"-Ý%FÐ%]Ð%]ÐI\Ð%]Ð%]ðð ˆKð
 &�$Ô%ð 
Ø&Ø%Ø+Ø'Øð
ð 
ð ð
ð 
ˆõ ,Ø%Ô7Ø#Ô3Ø!Ô/ØÔ)Ø2>Ð2J  ÐPTð
ñ 
ô 
ð 	
r(   )	NNNNNNNNN)r    r!   r"   Úaccepts_loss_kwargsr   r9   r   r   r$   r%   r   r   r1   r   rl   Ú
LongTensorr   ÚTensorr   Úboolr   r   rE   rF   rG   s   @r)   rX   rX   t   s  ø€ € € € € ð  Ðð
˜ð 
ð 
ð 
ð 
ð 
ð 
ð Ø€^Ønðñ ô ðØ!Ô-ðØ9?Ð@RÔ9Sðà	Ð+Ñ	+ðð ð ñô ñ Ôðð"ØÔ)ð"Ø:?Ô:Kð"Ø]bÔ]nð"ð "ð "ð "ð0 Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø26Ø*.Ø!%ðl
ð l
àÔ# dÑ*ðl
ð Ô'¨$Ñ.ðl
ð œ tÑ+ð	l
ð
 Ô&¨Ñ-ðl
ð  ™ðl
ð Ô(¨4Ñ/ðl
ð Ô(¨4Ñ/ðl
ð Ô  4Ñ'ðl
ð ˜$‘;ðl
ð Ð-Ô.ðl
ð 
Ð-Ñ	-ðl
ð l
ð l
ñ „^ñ Ôðl
ð l
ð l
ð l
ð l
r(   rX   c                   ó  ‡ — e Zd ZddiZdefˆ fd„Zedej        de	e
         fd„¦   «         Zee	 	 	 	 	 	 	 	 	 	 d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z  dej        dz  dej        dz  dedz  deej        z  de	e
         deez  fd„¦   «         ¦   «         Z	 	 	 	 	 	 	 	 	 	 dˆ fd„	Ze	 	 ddedej        dej        dz  dedz  dej        dz  dej        dz  dedz  defd„¦   «         Zˆ xZS )Ú!PaliGemmaForConditionalGenerationzlm_head.weightz(model.language_model.embed_tokens.weightr4   c                 óú   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        j        |j        j        d¬¦  «        | _	        |  
                    ¦   «          d S )NFr6   )r8   r9   rX   rJ   r   r:   r]   r<   r^   Úlm_headrc   r?   s     €r)   r9   z*PaliGemmaForConditionalGeneration.__init__(  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý# FÑ+Ô+ˆŒ
Ý”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔkˆŒØ�ŠÑÔÐÐÐr(   rd   re   c                 ó(   —  | j         j        |fi |¤ŽS rC   )rJ   rl   )r@   rd   re   s      r)   rl   z4PaliGemmaForConditionalGeneration.get_image_features.  s   € à,ˆtŒzÔ,¨\ÐDÐD¸VÐDÐDÐDr(   Nr   rm   r€   r�   r.   r‚   rn   rƒ   r„   Úlogits_to_keeprf   c                 ón  —  | j         d||||||||	|dœ	|¤Ž}|d         }t          |
t          ¦  «        rt          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}|�  | j        d||| j        j        j        dœ|¤Ž}t          |||j
        |j        |j        |j        ¬¦  «        S )r†   )	rm   rd   r‚   r€   r�   r.   rn   r„   rƒ   r   N)r-   rƒ   r^   )r,   r-   r.   r/   r0   r   r'   )rJ   Ú
isinstanceÚintÚslicer£   Úloss_functionr4   r]   r^   r+   r.   r/   r0   r   )r@   rm   rd   r€   r�   r.   r‚   rn   rƒ   r„   r¥   re   r›   r/   Úslice_indicesr-   r,   s                    r)   rE   z)PaliGemmaForConditionalGeneration.forward2  s  € ðZ �$”*ð 
ØØ%Ø)Ø)Ø%Ø+Ø'ØØð
ð 
ð ð
ð 
ˆð   œ
ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%ð Ø f¸¼Ô9PÔ9[ðð Ø_eðð ˆDõ /ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r(   TFc                 ó¦   •—  t          ¦   «         j        |f||||||	||dœ|¤Ž}|                     d¦  «        �|d         dz   |d<   |s|s||d<   |S )N)r.   rn   r€   r�   r„   r¥   r‚   r˜   r�   r   rd   )r8   Úprepare_inputs_for_generationÚget)r@   rm   r.   rn   r�   rd   r€   r‚   r„   r¥   rƒ   r˜   re   Úmodel_inputsrA   s                 €r)   r­   z?PaliGemmaForConditionalGeneration.prepare_inputs_for_generation€  s—   ø€ ð  =•u‘w”wÔ<Øð
à+Ø'Ø)Ø%ØØ)Ø)Ø1ð
ð 
ð ð
ð 
ˆð ×Ò˜NÑ+Ô+Ð7à+7¸Ô+GÈ!Ñ+KˆL˜Ñ(ð ð 	8 Yð 	8Ø+7ˆL˜Ñ(àÐr(   r˜   c                 óø   — t          j        g |                     ¦   «         d d…         ¢d|j        ¬¦  «        }|�t          j        |dk    dd¦  «        }t          |                      ¦   «         |||||¬¦  «        S )Nrq   r‡   r   )r4   rn   rˆ   r€   r.   r�   )r$   ÚfullÚsizerp   r’   r
   r`   )	r4   rn   r€   r.   r�   r‚   r˜   re   Ú	group_idss	            r)   r
   z;PaliGemmaForConditionalGeneration.create_masks_for_generate«  s�   € õ ”JÐ; ×!3Ò!3Ñ!5Ô!5°c°r°cÔ!:Ð;¸RÈÔH\Ð]Ñ]Ô]ˆ	ØÐ%õ œ N°aÒ$7¸¸BÑ?Ô?ˆIå(Ø×)Ò)Ñ+Ô+Ø'Ø(Ø)Ø+Ø%ð
ñ 
ô 
ð 	
r(   )
NNNNNNNNNr   )
NNNNNNTNNF)NF)r    r!   r"   Ú_tied_weights_keysr   r9   r   r$   r%   r   r   rl   r   r�   rž   r   rŸ   r¨   r1   r+   rE   r­   Ústaticmethodr   Údictr
   rF   rG   s   @r)   r¡   r¡      s�  ø€ € € € € ð +Ð,VÐWÐð˜ð ð ð ð ð ð ð ðE¨uÔ/@ð EÈFÐSeÔLfð Eð Eð Eñ „^ðEð Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø26Ø*.Ø!%Ø-.ðJ
ð J
àÔ# dÑ*ðJ
ð Ô'¨$Ñ.ðJ
ð œ tÑ+ð	J
ð
 Ô&¨Ñ-ðJ
ð  ™ðJ
ð Ô(¨4Ñ/ðJ
ð Ô(¨4Ñ/ðJ
ð Ô  4Ñ'ðJ
ð ˜$‘;ðJ
ð ˜eœlÑ*ðJ
ð Ð+Ô,ðJ
ð 
Ð0Ñ	0ðJ
ð J
ð J
ñ „^ñ ÔðJ
ð^ ØØØØØØØØØ ð)ð )ð )ð )ð )ð )ðV ð /3Ø*/ð
ð 
Ø ð
à”|ð
ð œ tÑ+ð
ð  ™ð	
ð
 ”l TÑ)ð
ð œ tÑ+ð
ð ! 4™Kð
ð 
ð
ð 
ð 
ñ „\ð
ð 
ð 
ð 
ð 
r(   r¡   )r¡   rI   rX   ).r#   Údataclassesr   r$   r   Úcache_utilsr   Úconfiguration_utilsr   Ú
generationr   Úmasking_utilsr	   r
   r   Úmodeling_flash_attention_utilsr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   r   r   Úautor   Úconfiguration_paligemmar   Ú
get_loggerr    Úloggerr   r+   ÚModuler3   rI   rX   r¡   Ú__all__r'   r(   r)   ú<module>rÇ      sE  ðð Ð à !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø )Ð )Ð )Ð )Ð )Ð )Ø mÐ mÐ mÐ mÐ mÐ mÐ mÐ mÐ mÐ mØ BÐ BÐ BÐ BÐ BÐ BØ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9Ð#:ñ 9ô 9ñ „ñô ð9ð €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9 kñ 9ô 9ñ „ñô ð9ð0ð ð ð ð  2¤9ñ ô ð ð ð'ð 'ð 'ð 'ð '˜ñ 'ô 'ñ „ð'ð €ððñ ô ð
d
ð d
ð d
ð d
ð d
Ð-ñ d
ô d
ñô ð
d
ðN €ððñ ô ð
^
ð ^
ð ^
ð ^
ð ^
Ð(@À/ñ ^
ô ^
ñô ð
^
ðB ^Ð
]Ð
]€€€r(   