
    Z jR                     ~   S SK rS SK Jr  S SKrS SKJr  SSKJr  SSKJ	r	  SSK
JrJr  SSKJr  SS	KJrJrJr  SS
KJrJr  SSKJr  SSKJrJrJr  SSKJrJr  SSKJ r   SSK!J"r"   " S S\RF                  5      r$ " S S\RF                  5      r%  S:S\RF                  S\RL                  S\RL                  S\RL                  S\RL                  S-  S\'S-  S\'S\\   4S jjr( " S S\RF                  5      r) " S  S!\RF                  5      r* " S" S#\RF                  5      r+S;S$\RL                  S%\'S&\,S'\RL                  4S( jjr- " S) S*\RF                  5      r. " S+ S,\RF                  5      r/ " S- S.\5      r0\ " S/ S0\5      5       r1 " S1 S2\15      r2\ " S3 S4\15      5       r3\" S5S69 " S7 S8\\15      5       r4/ S9Qr5g)<    N)Callable)nn   )initialization)ACT2FN)BackboneMixinfilter_output_hidden_states)GradientCheckpointingLayer)BackboneOutputBaseModelOutputBaseModelOutputWithPooling)ALL_ATTENTION_FUNCTIONSPreTrainedModel)Unpack)TransformersKwargsauto_docstring
is_tracing)can_return_tuplemerge_with_config_defaults)capture_outputs   )PixioConfigc                   v   ^  \ rS rSrSrS\4U 4S jjrS
S\R                  S\	S\R                  4S jjr
S	rU =r$ )PixioPatchEmbeddings(   z
This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
`hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
Transformer.
configc                   > [         TU ]  5         UR                  UR                  p2UR                  UR
                  pT[        U[        R                  R                  5      (       a  UOX"4n[        U[        R                  R                  5      (       a  UOX34nUS   US   -  US   US   -  -  nX l        X0l        X@l        X`l
        [        R                  " XEX3S9U l        g )Nr   r   )kernel_sizestride)super__init__
image_size
patch_sizenum_channelshidden_size
isinstancecollectionsabcIterablenum_patchesr   Conv2d
projection)selfr   r"   r#   r$   r%   r*   	__class__s          y/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/pixio/modeling_pixio.pyr!   PixioPatchEmbeddings.__init__/   s    !'!2!2F4E4EJ$*$7$79K9Kk#-j+//:R:R#S#SZZdYq
#-j+//:R:R#S#SZZdYq
!!}
15*Q-:VW=:XY$$(&))L:i    pixel_valuesinterpolate_pos_encodingreturnc                    UR                   u  p4pVX@R                  :w  a  [        SU R                   SU S35      eU(       dV  XPR                  S   :w  d  X`R                  S   :w  a2  [        SU SU SU R                  S    SU R                  S    S	3	5      eU R	                  U5      R                  S
5      R                  SS
5      nU$ )NzoMake sure that the channel dimension of the pixel values match with the one set in the configuration. Expected z	 but got .r   r   zInput image size (*z) doesn't match model (z).   )shaper$   
ValueErrorr"   r,   flatten	transpose)r-   r2   r3   
batch_sizer$   heightwidth
embeddingss           r/   forwardPixioPatchEmbeddings.forward>   s    2>2D2D/
&,,,!../yaI  (++u8J/J (% 9+,Adooa.@-AE  __\2::1=GG1M
r1   )r"   r$   r*   r#   r,   )F)__name__
__module____qualname____firstlineno____doc__r   r!   torchTensorboolrA   __static_attributes____classcell__r.   s   @r/   r   r   (   s@    j{ jELL D ]b]i]i  r1   r   c                      ^  \ rS rSrSrS\SS4U 4S jjrS\R                  S\	S	\	S\R                  4S
 jr
S\R                  S\R                  4S jrSrU =r$ )PixioEmbeddingsO   z:
Construct the CLS tokens, position and patch embeddings.
r   r4   Nc                 .  > [         TU ]  5         [        R                  " [        R
                  " SUR                  UR                  5      5      U l        S U l	        [        U5      U l        U R                  R                  n[        R                  " [        R
                  " SX!R                  -   UR                  5      5      U l        [        R                  " UR                  5      U l        UR                  U l        UR"                  U l        Xl        g )Nr   )r    r!   r   	ParameterrH   randnn_cls_tokensr%   	cls_token
mask_tokenr   patch_embeddingsr*   position_embeddingsDropouthidden_dropout_probdropoutr#   r   )r-   r   r*   r.   s      r/   r!   PixioEmbeddings.__init__T   s    ekk!V5H5H&J\J\&]^ 4V <++77#%<<A{M`M`?`bhbtbt0u#v zz&"<"<="// ++r1   r@   r>   r?   c                 0   UR                   S   U R                  -
  nU R                  R                   S   U R                  -
  n[        5       (       d  XE:X  a  X#:X  a  U R                  $ U R                  SS2SU R                  24   nU R                  SS2U R                  S24   nUR                   S   nX R                  -  n	X0R                  -  n
[        US-  5      nUR                  SXU5      nUR                  SSSS5      nUR                  n[        R                  R                  UR                  [        R                  5      X4SS	S
9R                  US9nUR                  SSSS5      R                  SSU5      n[        R                   " Xg4SS9$ )a  
This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
images. This method is also adapted to support tracing and interpolation at torch.float32 precision.

Adapted from:
- https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
- https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
r   Ng      ?r   r   r8   bicubicF)sizemodealign_cornersdtypedim)r9   rT   rX   r   r#   intreshapepermuterd   r   
functionalinterpolatetorH   float32viewcat)r-   r@   r>   r?   r*   num_positionsclass_pos_embedpatch_pos_embedrf   
new_height	new_widthsqrt_num_positionstarget_dtypes                r/   r3   (PixioEmbeddings.interpolate_pos_encodinga   s    !&&q)D,=,==0066q9D<M<MM|| <+++2216I8I8I6I3IJ221d6G6G6I3IJr".
__,	 !34)11!5G]`a)11!Q1=&,,--33u}}-(	 4 

 "<"
  	 *11!Q1=BB1b#Nyy/;CCr1   r2   c                 d   UR                   u  p#pEU R                  R                  R                  R                  nU R                  UR                  US95      nU R                  R                  USS5      n[        R                  " X4SS9nXpR                  XtU5      -   nU R                  U5      nU$ )Nrc   r^   r   re   )r9   rW   r,   weightrd   rl   rU   expandrH   ro   r3   r[   )	r-   r2   r=   _r>   r?   rv   r@   
cls_tokenss	            r/   rA   PixioEmbeddings.forward   s    '3'9'9$
v,,77>>DD**<???+NO
^^**:r2>
YY
7Q?
"?"?
TY"ZZ
\\*-
r1   )rU   r   r[   rV   rT   rW   r#   rX   )rC   rD   rE   rF   rG   r   r!   rH   rI   rg   r3   rA   rK   rL   rM   s   @r/   rO   rO   O   sn    { t $D5<< $D $DUX $D]b]i]i $DLELL U\\  r1   rO   modulequerykeyvalueattention_maskscalingr[   kwargsc                    Uc  UR                  S5      S-  n[        R                  " XR                  SS5      5      U-  nUb  X-   n[        R
                  R                  USS9n[        R
                  R                  XU R                  S9n[        R                  " X5      n	U	R                  SS5      R                  5       n	X4$ )Nr^         r8   r   re   )ptrainingr   )
r`   rH   matmulr<   r   rj   softmaxr[   r   
contiguous)
r~   r   r   r   r   r   r[   r   attn_weightsattn_outputs
             r/   eager_attention_forwardr      s     **R.D( <<}}Q':;gEL!#4==((2(>L==((6??([L,,|3K''1-88:K$$r1   c                      ^  \ rS rSrS\4U 4S jjrS\R                  S\\	   S\
\R                  \R                  4   4S jrSrU =r$ )	PixioSelfAttention   r   c                 0  > [         TU ]  5         UR                  UR                  -  S:w  a7  [	        US5      (       d&  [        SUR                   SUR                   S35      eXl        UR                  U l        [        UR                  UR                  -  5      U l        U R                  U R                  -  U l	        UR                  U l        U R                  S-  U l        SU l        [        R                  " UR                  U R                  UR                   S9U l        [        R                  " UR                  U R                  UR                   S9U l        [        R                  " UR                  U R                  UR                   S9U l        g )	Nr   embedding_sizezThe hidden size z4 is not a multiple of the number of attention heads r6   r   Fbias)r    r!   r%   num_attention_headshasattrr:   r   rg   attention_head_sizeall_head_sizeattention_probs_dropout_probdropout_probr   	is_causalr   Linearqkv_biasr   r   r   r-   r   r.   s     r/   r!   PixioSelfAttention.__init__   sG    : ::a?PVXhHiHi"6#5#5"6 7334A7 
 #)#=#= #&v'9'9F<V<V'V#W !558P8PP"??//5YYv1143E3EFOO\
99V//1C1C&//ZYYv1143E3EFOO\
r1   hidden_statesr   r4   c                    UR                   S   nUSU R                  U R                  4nU R                  U5      R                  " U6 R                  SS5      nU R                  U5      R                  " U6 R                  SS5      nU R                  U5      R                  " U6 R                  SS5      n[        R                  " U R                  R                  [        5      nU" U UUUS 4U R                  U R                  U R                  (       d  SOU R                   S.UD6u  pU	R#                  5       S S U R$                  4-   nU	R'                  U5      n	X4$ )Nr   r^   r   r8           )r   r   r[   )r9   r   r   r   rn   r<   r   r   r   get_interfacer   _attn_implementationr   r   r   r   r   r`   r   rh   )r-   r   r   r=   	new_shape	key_layervalue_layerquery_layerattention_interfacecontext_layerattention_probsnew_context_layer_shapes               r/   rA   PixioSelfAttention.forward   sO   
 #((+
D$<$<d>V>VV	HH]+00)<FFq!L	jj/44i@JJ1aPjj/44i@JJ1aP(?(M(MKK,,.E)
 *=
*
 nnLL#}}C$2C2C
*
 
*
& #0"4"4"6s";t?Q?Q>S"S%--.EF--r1   )
r   r   r   r   r   r   r   r   r   r   )rC   rD   rE   rF   r   r!   rH   rI   r   r   tuplerA   rK   rL   rM   s   @r/   r   r      sS    ]{ ](.||. +,. 
u||U\\)	*	. .r1   r   c                      ^  \ rS rSrSrS\4U 4S jjrS\R                  S\R                  S\R                  4S jr	S	r
U =r$ )
PixioSelfOutput   z
The residual connection is defined in PixioLayer instead of here (as is the case with other models), due to the
layernorm applied before each block.
r   c                    > [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " UR                  5      U l        g N)	r    r!   r   r   r%   denserY   rZ   r[   r   s     r/   r!   PixioSelfOutput.__init__   sB    YYv1163E3EF
zz&"<"<=r1   r   input_tensorr4   c                 J    U R                  U5      nU R                  U5      nU$ r   r   r[   )r-   r   r   s      r/   rA   PixioSelfOutput.forward   s$    

=1]3r1   r   )rC   rD   rE   rF   rG   r   r!   rH   rI   rA   rK   rL   rM   s   @r/   r   r      sB    
>{ >
U\\  RWR^R^  r1   r   c                   t   ^  \ rS rSrS\4U 4S jjrS\R                  S\\	   S\R                  4S jr
SrU =r$ )	PixioAttention   r   c                 b   > [         TU ]  5         [        U5      U l        [	        U5      U l        g r   )r    r!   r   	attentionr   outputr   s     r/   r!   PixioAttention.__init__   s&    +F3%f-r1   r   r   r4   c                 R    U R                   " U40 UD6u  p4U R                  X15      nU$ r   r   r   )r-   r   r   self_attn_outputr{   r   s         r/   rA   PixioAttention.forward   s/    
 #nn]EfE-=r1   r   rC   rD   rE   rF   r   r!   rH   rI   r   r   rA   rK   rL   rM   s   @r/   r   r      sC    .{ .
|| +, 
	 r1   r   input	drop_probr   r4   c                    US:X  d  U(       d  U $ SU-
  nU R                   S   4SU R                  S-
  -  -   nU[        R                  " X@R                  U R
                  S9-   nUR                  5         U R                  U5      U-  nU$ )z[
Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

r   r   r   )r   )rd   device)r9   ndimrH   randrd   r   floor_div)r   r   r   	keep_probr9   random_tensorr   s          r/   	drop_pathr   
  s    
 CxII[[^

Q 77E

5ELL YYMYYy!M1FMr1   c                      ^  \ rS rSrSrSS\S-  SS4U 4S jjjrS\R                  S\R                  4S jr	S\
4S	 jrS
rU =r$ )PixioDropPathi  zXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr   r4   c                 .   > [         TU ]  5         Xl        g r   )r    r!   r   )r-   r   r.   s     r/   r!   PixioDropPath.__init__  s    "r1   r   c                 B    [        XR                  U R                  5      $ r   )r   r   r   )r-   r   s     r/   rA   PixioDropPath.forward   s    FFr1   c                      SU R                    3$ )Nzp=r   r-   s    r/   
extra_reprPixioDropPath.extra_repr#  s    DNN#$$r1   r   r   )rC   rD   rE   rF   rG   floatr!   rH   rI   rA   strr   rK   rL   rM   s   @r/   r   r     sQ    b#%$, #$ # #GU\\ Gell G%C % %r1   r   c                   f   ^  \ rS rSrSU 4S jjrS\R                  S\R                  4S jrSrU =r	$ )PixioMLPi'  r4   c                 z  > [         TU ]  5         UR                  =p#[        UR                  UR                  -  5      n[
        R                  " X$SS9U l        [        UR                  [        5      (       a  [        UR                     U l        OUR                  U l        [
        R                  " XCSS9U l        g )NTr   )r    r!   r%   rg   	mlp_ratior   r   fc1r&   
hidden_actr   r   
activationfc2)r-   r   in_featuresout_featureshidden_featuresr.   s        r/   r!   PixioMLP.__init__(  s    %+%7%77f0063C3CCD99[Ef''--$V%6%67DO$//DO99_Fr1   hidden_statec                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r   r   r   )r-   r   s     r/   rA   PixioMLP.forward3  s2    xx-|4xx-r1   )r   r   r   )r4   N)
rC   rD   rE   rF   r!   rH   rI   rA   rK   rL   rM   s   @r/   r   r   '  s)    	GELL U\\  r1   r   c                   x   ^  \ rS rSrS\SS4U 4S jjrS\R                  S\\	   S\R                  4S jr
S	rU =r$ )

PixioLayeri:  r   r4   Nc                   > [         TU ]  5         [        R                  " UR                  UR
                  S9U l        [        U5      U l        UR                  S:  a  [        UR                  5      O[        R                  " 5       U l        [        R                  " UR                  UR
                  S9U l        [        U5      U l        g )Nepsr   )r    r!   r   	LayerNormr%   layer_norm_epsnorm1r   r   drop_path_rater   Identityr   norm2r   mlpr   s     r/   r!   PixioLayer.__init__;  s    \\&"4"4&:O:OP
'/AGAVAVY\A\v'<'<=bdbmbmbo\\&"4"4&:O:OP
F#r1   r   r   c                     U R                  U5      nU R                  " U40 UD6nU R                  U5      U-   nU R                  U5      nU R	                  U5      nU R                  U5      U-   nU$ r   )r   r   r   r   r   )r-   r   r   hidden_states_normself_attention_outputlayer_outputs         r/   rA   PixioLayer.forwardE  so    !ZZ6 $/A LV L'<=Mzz-0xx-~~l3mCr1   )r   r   r   r   r   r   rM   s   @r/   r   r   :  sF    ${ $t $U\\ VDV=W \a\h\h  r1   r   c                       \ rS rSr% \\S'   SrSrSrSr	SS/r
SrSrSrSr\\S	.r\R&                  " 5       S
\R*                  \R,                  -  \R.                  -  4S j5       rSrg)PixioPreTrainedModeliS  r   pixior2   )imageTrO   r   )r   
attentionsr~   c                 B   [        U[        R                  [        R                  -  5      (       ac  [        R
                  " UR                  SU R                  R                  S9  UR                  b!  [        R                  " UR                  5        gg[        U[        R                  5      (       aA  [        R                  " UR                  5        [        R                  " UR                  5        g[        U[        5      (       a  [        R
                  " UR                  SU R                  R                  S9  [        R
                  " UR                  SU R                  R                  S9  UR                   b!  [        R                  " UR                   5        ggg)zInitialize the weightsr   )meanstdN)r&   r   r   r+   inittrunc_normal_ry   r   initializer_ranger   zeros_r   ones_rO   rX   rU   rV   )r-   r~   s     r/   _init_weights"PixioPreTrainedModel._init_weightsd  s    fbii"))344v}}3DKK<Y<YZ{{&FKK( '--KK$JJv}}%00v99IfIfgv//ct{{?\?\]  ,F--. - 1r1    N)rC   rD   rE   rF   r   __annotations__base_model_prefixmain_input_nameinput_modalitiessupports_gradient_checkpointing_no_split_modules_supports_sdpa_supports_flash_attn_supports_flex_attn_supports_attention_backendr   r   _can_record_outputsrH   no_gradr   r   r+   r   r  rK   r  r1   r/   r  r  S  s    $O!&*#*L9N"&#(
 ]]_/BII		$9BLL$H / /r1   r  c                   |   ^  \ rS rSrS\4U 4S jjr\\" SS9S\R                  S\
\   S\4S	 j5       5       rS
rU =r$ )PixioEncoderiu  r   c                    > [         TU ]  U5        [        R                  " [	        UR
                  5       Vs/ s H  n[        U5      PM     sn5      U l        SU l        U R                  5         g s  snf )NF)
r    r!   r   
ModuleListrangenum_hidden_layersr   layergradient_checkpointing	post_initr-   r   r{   r.   s      r/   r!   PixioEncoder.__init__v  sY     ]]fF^F^@_#`@_1Jv$6@_#`a
&+# $as   A1F)tie_last_hidden_statesr   r   r4   c                 L    U R                    H  nU" U40 UD6nM     [        US9$ )N)last_hidden_state)r#  r   )r-   r   r   layer_modules       r/   rA   PixioEncoder.forward|  s.     !JJL(A&AM ' ??r1   )r$  r#  )rC   rD   rE   rF   r   r!   r   r   rH   rI   r   r   r   rA   rK   rL   rM   s   @r/   r  r  u  sU    {   E2@U\\ @VDV=W @\k @ 3  @r1   r  c            	          ^  \ rS rSrS\4U 4S jjrS\4S jr\\	 SS\
R                  S-  S\\   S\4S	 jj5       5       rS
rU =r$ )
PixioModeli  r   c                    > [         TU ]  U5        Xl        [        U5      U l        [        U5      U l        [        R                  " UR                  UR                  S9U l        U R                  5         g )Nr   )r    r!   r   rO   r@   r  encoderr   r   r%   r   	layernormr%  r   s     r/   r!   PixioModel.__init__  sU     )&1#F+f&8&8f>S>STr1   r4   c                 .    U R                   R                  $ r   r@   rW   r   s    r/   get_input_embeddingsPixioModel.get_input_embeddings      ///r1   Nr2   r   c                 >   Uc  [        S5      eU R                  U5      nU R                  " U40 UD6nUR                  nU R	                  U5      nUS S 2S U R                  R
                  2S S 24   R                  SS9n[        UUUR                  UR                  S9$ )Nz You have to specify pixel_valuesr   re   )r*  pooler_outputr   r  )
r:   r@   r0  r*  r1  rT   r  r   r   r  )r-   r2   r   embedding_outputencoder_outputssequence_outputpooled_outputs          r/   rA   PixioModel.forward  s     ?@@??<8+/<<8H+SF+S);;..9'+IT__-I-I+I1(LMRRWXRY)-')77&11	
 	
r1   )r   r@   r0  r1  r   )rC   rD   rE   rF   r   r!   r   r5  r   r   rH   rI   r   r   r   rA   rK   rL   rM   s   @r/   r.  r.    sh    	{ 	0&: 0  -1
llT)
 +,
 
$	
  
r1   r.  zN
    Pixio backbone, to be used with frameworks like DETR and MaskFormer.
    )custom_introc            	          ^  \ rS rSrU 4S jrS\4S jr\\\	S\
R                  S\\   S\4S j5       5       5       rSrU =r$ )	PixioBackbonei  c                 X  > [         TU ]  U5        [        UR                  S-   5       Vs/ s H  o!R                  PM     snU l        [        U5      U l        [        U5      U l	        [        R                  " UR                  UR                  S9U l        U R                  5         g s  snf )Nr   r   )r    r!   r!  r"  r%   num_featuresrO   r@   r  r0  r   r   r   r1  r%  r&  s      r/   r!   PixioBackbone.__init__  s     9>v?W?WZ[?[9\]9\A//9\])&1#F+f&8&8f>S>ST 	 ^s   B'r4   c                 .    U R                   R                  $ r   r4  r   s    r/   r5  "PixioBackbone.get_input_embeddings  r7  r1   r2   r   c                    SUS'   U R                  U5      nU R                  " U40 UD6nUR                  n/ n[        U R                  U5       H  u  pxXpR
                  ;   d  M  U R                  R                  (       a  U R                  U5      nU R                  R                  (       a~  USS2U R                   R                  S24   nUR                  u  ppU R                  R                  nUR                  XU-  X-  S5      nUR                  SSSS5      R                  5       nUR!                  U5        M     [#        [%        U5      UUR&                  S	9$ )
a  
Examples:

```python
>>> from transformers import AutoImageProcessor, AutoBackbone
>>> import torch
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> processor = AutoImageProcessor.from_pretrained("facebook/pixio-huge")
>>> model = AutoBackbone.from_pretrained(
...     "facebook/pixio-huge", out_features=["stage7", "stage15", "stage23", "stage31"]
... )

>>> inputs = processor(image, return_tensors="pt")

>>> outputs = model(**inputs)
>>> feature_maps = outputs.feature_maps
>>> list(feature_maps[-1].shape)
[1, 1280, 16, 16]
```Toutput_hidden_statesNr^   r   r   r   r8   )feature_mapsr   r  )r@   r0  r   zipstage_namesr   r   apply_layernormr1  reshape_hidden_statesrT   r9   r#   rh   ri   r   appendr   r   r  )r-   r2   r   r:  r   r   rI  stager   r=   r{   r>   r?   r#   s                 r/   rA   PixioBackbone.forward  s:   < *.%&??<8"&,,/?"J6"J,,#&t'7'7#GE)));;..#'>>,#?L;;44#/4??3O3O3Q0Q#RL3?3E3E0J6!%!7!7J#/#7#7
jDXZ_Zmoq#rL#/#7#71a#C#N#N#PL##L1 $H |,'((
 	
r1   )r@   r0  r1  rC  )rC   rD   rE   rF   r!   r   r5  r   r	   r   rH   rI   r   r   r   rA   rK   rL   rM   s   @r/   rA  rA    sY    
0&: 0  2
ELL 2
FCU<V 2
[i 2
  ! 2
r1   rA  )r.  r  rA  )Nr   )r   F)6collections.abcr'   r   rH   r    r   r	  activationsr   backbone_utilsr   r	   modeling_layersr
   modeling_outputsr   r   r   modeling_utilsr   r   processing_utilsr   utilsr   r   r   utils.genericr   r   utils.output_capturingr   configuration_pixior   Moduler   rO   rI   r   r   r   r   r   rJ   r   r   r   r   r  r  r.  rA  __all__r  r1   r/   <module>r_     s  *  $   & ! H 9 [ [ F & C C I 5 ,$299 $NDbii DZ !%II%<<% 
% <<	%
 LL4'% T\% % '(%84. 4.nbii "RYY  U\\ e T V[VbVb %BII %ryy &+ 2 /? / /B@' @  %
% %
 %
P 
E
M#7 E

E
P Br1   