
    RЦih                     v   S r SSKrSSKJrJrJrJr  SSKrSSKJ	s  J
r  SSKJ	r	  SSKJrJrJrJrJrJr  SSKJr  SSKJr  SS	KJrJrJr  SS
KJrJrJrJrJ r J!r!  SSK"J#r$  / r%SgS jr&ShS jr'SiS jr(SjS jr)\*" \" \&" SSSSS9\&" SSSSS9\'" SSSSSSSS9\'" SSSSSSSS9\'" SSSSSSSS94SSSSS S!S"9\" \&" SS#SS$9\&" SSSS$9\'" SSSSSSS%9\'" SSSS&SSS%9\'" SSSS'SSS%94SSSSS S(S"9\" \&" SS#SS$9\&" SSSS$9\'" SSSS'SSS%9\'" SS)SS*SSS%9\'" SS+SS,SSS%94SSSSS S-S"9\" \&" SS#SS$9\&" SSSS$9\'" SSSS'SSS%9\'" SS)SS*SSS%9\'" SS+SS,SSS%94SSSSS.\*" S/S09S-S19\)" S5      \)" S25      \)" S35      \)" S5      \)" S45      \)" S55      \)" S5      S69r+\ " S7 S8\	RX                  5      5       r- " S9 S:\	RX                  5      r. " S; S<\	RX                  5      r/\ " S= S>\	RX                  5      5       r0\" S?\-5        \" S@\05        SkSA jr1SkSB jr2SlSC jr3\" 0 SD\3" SESF9_SG\3" SESF9_SH\3" SESF9_SI\3" SESJSK9_SL\3" SESJSK9_SM\3" SESJSK9_SN\3" SESJSK9_SO\3" SESJSK9_SP\3" SESJSK9_SQ\3" SESJSK9_SR\3" SESJSK9_SS\3" SESJSK9_ST\3" SESJSK9_SU\3" SESVSWSSX9_SY\3" SESVSWSSX9_SZ\3" SESVSWSSX9_5      r4\SmS[\4S\ jj5       r5\SmS[\4S] jj5       r6\SmS[\4S^ jj5       r7\SmS[\4S_ jj5       r8\SmS[\4S` jj5       r9\SmS[\4Sa jj5       r:\SmS[\4Sb jj5       r;\SmS[\4Sc jj5       r<\SmS[\4Sd jj5       r=\SmS[\4Se jj5       r>\" \?SRSSSTSUSYSZSf.5        g)na  MobileViT

Paper:
V1: `MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer` - https://arxiv.org/abs/2110.02178
V2: `Separable Self-attention for Mobile Vision Transformers` - https://arxiv.org/abs/2206.02680

MobileVitBlock and checkpoints adapted from https://github.com/apple/ml-cvnets (original copyright below)
License: https://github.com/apple/ml-cvnets/blob/main/LICENSE (Apple open source)

Rest of code, ByobNet, and Transformer block hacked together by / Copyright 2022, Ross Wightman
    N)CallableTupleOptionalType)nn)	to_2tuplemake_divisible
GroupNorm1ConvMlpDropPathis_exportable   )build_model_with_cfg)register_notrace_module)register_modelgenerate_default_cfgsregister_model_deprecations)register_blockByoBlockCfgByoModelCfgByobNetLayerFn
num_groups)Blockc                 .    [        SXUSU[        SSS9S9$ )Nbottler   T)	bottle_in
linear_out)typedcsgsbrblock_kwargs)r   dictr    r!   r"   r$   s       T/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/mobilevit.py_inverted_residual_blockr)   !   s$    1rDT:< <       c                 B    [        XX&S9[        SSUS[        UUUS9S94$ )Nr'   	mobilevitr   )transformer_dimtransformer_depth
patch_size)r   r    r!   r"   r%   r)   r   r&   r    r!   r"   r.   r/   r0   r$   s          r(   _mobilevit_blockr3   (   s:     	!1Q6Q! /"3%'	
	 	r*             @      ?c                 D    [        XX%S9[        SSUSUS[        UUS9S94$ )Nr'   
mobilevit2r   )r/   r0   )r   r    r!   r"   r$   r#   r%   r1   )r    r!   r"   r/   r0   r$   transformer_brs          r(   _mobilevitv2_blockr:   6   s;     	!1Q6a1A"3%'	
 r*         ?c                 .   SnU S:w  a'  [        U Vs/ s H  n[        X -  5      PM     sn5      n[        [        SUS   SSS9[        SUS   SSS9[	        SUS   SSS9[	        SUS	   SS
S9[	        SUS
   SS	S94[        SU -  5      SSSSS9nU$ s  snf )N)@           i   r;   r   r   r5   r'   r4   )r    r!   r"   r/      r+       3x3 silu)blocksstem_chs	stem_type	stem_pool
downsample	act_layer)tupleintr   r)   r:   )
multiplierchsr!   cfgs       r(   _mobilevitv2_cfgrQ   C   s    
"CS#6#QS(#67
$qCFaC@$qCFaC@c!fQGc!fQGc!fQG
 R*_%C J 7s   B   r'   rA      0   r=   r2   P   `   rC   rD   rE   i@  )rF   rG   rH   rI   rJ   rK   num_featuresrB   )r    r!   r"   )r    r!   r"   r.   r/   r0   x      r@   r>            i  seg      ?)rd_ratio)rF   rG   rH   rI   rJ   
attn_layerattn_kwargsrW   g      ?g      ?g      ?g      ?)mobilevit_xxsmobilevit_xsmobilevit_ssemobilevit_smobilevitv2_050mobilevitv2_075mobilevitv2_125mobilevitv2_100mobilevitv2_150mobilevitv2_175mobilevitv2_200c            &       &  ^  \ rS rSrSrSSSSSSSSS	S
SSSSSS\R                  SS4S\S\\   S\S\S\	S\\   S\
\\4   S\	S\\   S\S\S\S\	S\S\S\	S\S\\R                     4$U 4S  jjjrS!\R"                  S"\R"                  4S# jrS$rU =r$ )%MobileVitBlock   zFMobileViT block
Paper: https://arxiv.org/abs/2110.02178?context=cs.LG
NrA   r   r;   r   r   r5   r4      r+           Fin_chsout_chskernel_sizestridebottle_ratio
group_sizedilation	mlp_ratior.   r/   r0   	num_heads	attn_dropdrop	no_fusiondrop_path_ratelayerstransformer_norm_layerc                   > UUS.n[         TU ]  5         U=(       d
    [        5       n[        Xa5      nU=(       d    UnU	=(       d    [	        XQ-  5      n	UR
                  " UU4UUUUS   S.UD6U l        [        R                  " X4SSS.UD6U l	        [        R                  " [        U
5       Vs/ s H"  n[        U	4UUSUUUUR                  US.UD6PM$     sn6 U l        U" U	40 UD6U l        UR
                  " X4SSS	.UD6U l        U(       a  S U l        OUR
                  " X-   U4USS	.UD6U l        [%        U5      U l        U R&                  S   U R&                  S   -  U l        g s  snf )
Ndevicedtyper   rt   ru   groupsrx   r   Frt   biasT)ry   rz   qkv_biasr{   	proj_drop	drop_pathrK   
norm_layerrt   ru   )super__init__r   r   r	   conv_norm_actconv_kxkr   Conv2dconv_1x1
SequentialrangeTransformerBlockacttransformernorm	conv_projconv_fusionr   r0   
patch_area)selfrr   rs   rt   ru   rv   rw   rx   ry   r.   r/   r0   rz   r{   r|   r}   r~   r   r   r   r   kwargsddr   _	__class__s                            r(   r   MobileVitBlock.__init__   s   0 /$79J/#V)R^L<Q-R,,
 $a[
 
 		&[qu[XZ[== ,-+
 . ###( **1  .+
  +?AbA	--ofTU^_fcef#D%33F4Dgw[fopwtvwD#J///!,tq/AA3+
s   1)E.xreturnc                 2   UnU R                  U5      nU R                  U5      nU R                  u  p4UR                  u  pVpx[        R
                  " Xs-  5      U-  [        R
                  " X-  5      U-  pX-  X-  pX-  nSnX:w  d  X:w  a  [        R                  " XU
4SSS9nSnUR                  XV-  U-  X<U5      R                  SS5      nUR                  XVXR                  5      R                  SS5      R                  XPR                  -  US5      nU R                  U5      nU R                  U5      nUR                  5       R                  XPR                  US5      nUR                  SS5      R                  XV-  U-  XU5      nUR                  SS5      R                  XVX-  X-  5      nU(       a  [        R                  " XU4SSS9nU R                  U5      nU R                   b%  U R!                  ["        R$                  " X!4SS	95      nU$ )
NFbilinearsizemodealign_cornersTr   r4   rA   dim)r   r   r0   shapemathceilFinterpolatereshape	transposer   r   r   
contiguousviewr   r   torchcat)r   r   shortcutpatch_hpatch_wBCHWnew_hnew_wnum_patch_hnum_patch_wnum_patchesr   s                  r(   forwardMobileVitBlock.forward   s    MM!MM!  ??WW
ayy-71;9ORY9Yu#(#3U5E[!/:aen:UZ[AK IIaek)7ISSTUWXYIIaK9CCAqIQQRSVeVeRegrtvw QIIaL LLN??KDKK1%%aek&9;QXYKK1%%aK,A;CXYa!f:USANN1'  H=a!@AAr*   )r   r   r   r   r   r   r0   r   )__name__
__module____qualname____firstlineno____doc__r   	LayerNormrM   r   floatr   boolr   r   Moduler   r   Tensorr   __static_attributes____classcell__r   s   @r(   rm   rm      sh    &* "%(,(."-1%&!#$&"68ll+CBCB c]CB 	CB
 CB  CB !CB CHoCB CB &c]CB  #CB CB CB CB CB  !CB" "#CB$ %CB& %)O'CB CBJ( (%,, ( (r*   rm   c                   ~  ^  \ rS rSrSr     SS\S\S\S\SS4
U 4S	 jjjrS
\	R                  S\	R                  4S jr\	R                  R                  5       SS
\	R                  S\\	R                     S\	R                  4S jj5       rSS
\	R                  S\\	R                     S\	R                  4S jjrSrU =r$ )LinearSelfAttentioni  as  
This layer applies a self-attention with linear complexity, as described in `https://arxiv.org/abs/2206.02680`
This layer can be used for self- as well as cross-attention.
Args:
    embed_dim (int): :math:`C` from an expected input of size :math:`(N, C, H, W)`
    attn_drop (float): Dropout value for context scores. Default: 0.0
    bias (bool): Use bias in learnable layers. Default: True
Shape:
    - Input: :math:`(N, C, P, N)` where :math:`N` is the batch size, :math:`C` is the input channels,
    :math:`P` is the number of pixels in the patch, and :math:`N` is the number of patches
    - Output: same as the input
.. note::
    For MobileViTv2, we unfold the feature map [B, C, H, W] into [B, C, P, N] where P is the number of pixels
    in a patch and N is the number of patches. Because channel is the first dimension in this unfolded tensor,
    we use point-wise convolution (instead of a linear layer). This avoids a transpose operation (which may be
    expensive on resource-constrained devices) that may be required to convert the unfolded tensor from
    channel-first to channel-last format in case of a linear layer.
N	embed_dimr{   r   r   r   c                 .  > XVS.n[         TU ]  5         Xl        [        R                  " SUSSU-  -   USS.UD6U l        [        R                  " U5      U l        [        R                  " SUUUSS.UD6U l        [        R                  " U5      U l	        g )Nr   r   r4   )in_channelsout_channelsr   rt    )
r   r   r   r   r   qkv_projDropoutr{   out_projout_drop)	r   r   r{   r   r   r   r   r   r   s	           r(   r   LinearSelfAttention.__init__-  s     /"		 
!a)m,	

 
 I.		 
!"	

 
 

9-r*   r   c                    U R                  U5      nUR                  SU R                  U R                  /SS9u  p4n[        R                  " USS9nU R                  U5      nXF-  R                  SSS9n[        R                  " U5      UR                  U5      -  nU R                  U5      nU R                  U5      nU$ )Nr   r   r   Tr   keepdim)r   splitr   r   softmaxr{   sumrelu	expand_asr   r   )	r   r   qkvquerykeyvaluecontext_scorescontext_vectorouts	            r(   _forward_self_attn&LinearSelfAttention._forward_self_attnK  s    mmA
  IIq$..$..&IqIQE 5b17 .33D3I ffUmn66u==mmC mmC 
r*   x_prevc                 H   UR                   u  p4pVUR                   SS  u  pxXW:X  d   S5       e[        R                  " UU R                  R                  S U R
                  S-    U R                  R                  S U R
                  S-    S9n	U	R                  SU R
                  /SS9u  p[        R                  " UU R                  R                  U R
                  S-      U R                  R                  b&  U R                  R                  U R
                  S-      OS S9n[        R                  " U
SS9nU R                  U5      nX-  R                  SSS9n[        R                  " U5      UR                  U5      -  nU R                  U5      nU R                  U5      nU$ )	NzJThe number of pixels in a patch for query and key_value should be the samer   )weightr   r   r   Tr   )r   r   conv2dr   r   r   r   r   r   r{   r   r   r   r   r   )r   r   r   
batch_sizein_dimkv_patch_areakv_num_patchesq_patch_areaq_num_patchesqkr   r   r   r   r   r   s                   r(   _forward_cross_attn'LinearSelfAttention._forward_cross_attnc  s    =>GG9
M&'ggbcl# )	XW	X)
 XX==''(;!);<##$7T^^a%78
 XXq$..1qX9
==''(:;;?==;M;M;Y##DNNQ$67_c
 5b17 .33D3I ffUmn66u==mmC mmC 
r*   c                 H    Uc  U R                  U5      $ U R                  XS9$ )N)r   )r   r   )r   r   r   s      r(   r   LinearSelfAttention.forward  s,    >**1--++A+==r*   )r{   r   r   r   r   )rq   rq   TNNN)r   r   r   r   r   rM   r   r   r   r   r   r   jitignorer   r   r   r   r   r   s   @r(   r   r     s    ,  #".. . 	.
 . 
. .<ELL U\\ 0 YY(U\\ (8ELL;Q (]b]i]i ( (T> >x/E >QVQ]Q] > >r*   r   c                      ^  \ rS rSrSr        SS\S\S\S\S\S	\\\	R                        S
\\\	R                        SS4U 4S jjjrSS\R                  S\\R                     S\R                  4S jjrSrU =r$ )LinearTransformerBlocki  a  
This class defines the pre-norm transformer encoder with linear self-attention in `MobileViTv2 paper <>`_
Args:
    embed_dim (int): :math:`C_{in}` from an expected input of size :math:`(B, C_{in}, P, N)`
    mlp_ratio (float): Inner dimension ratio of the FFN relative to embed_dim
    drop (float): Dropout rate. Default: 0.0
    attn_drop (float): Dropout rate for attention in multi-head attention. Default: 0.0
    drop_path (float): Stochastic depth rate Default: 0.0
    norm_layer (Callable): Normalization layer. Default: layer_norm_2d
Shape:
    - Input: :math:`(B, C_{in}, P, N)` where :math:`B` is batch size, :math:`C_{in}` is input embedding dim,
        :math:`P` is number of pixels in a patch, and :math:`N` is number of patches,
    - Output: same shape as the input
Nr   ry   r|   r{   r   rK   r   r   c
                 X  > XS.n
[         TU ]  5         U=(       d    [        R                  nU=(       d    [        nU" U40 U
D6U l        [        SXUS.U
D6U l        [        U5      U l	        U" U40 U
D6U l
        [        SU[        X-  5      UUS.U
D6U l        [        U5      U l        g )Nr   )r   r{   r   )in_featureshidden_featuresrK   r|   r   )r   r   r   SiLUr
   norm1r   attnr   
drop_path1norm2r   rM   mlp
drop_path2)r   r   ry   r|   r{   r   rK   r   r   r   r   r   s              r(   r   LinearTransformerBlock.__init__  s     /(	-:
	0R0
'g)\`gdfg	"9-	0R0
 !	 56	
  #9-r*   r   r   c                 B   Uc2  XR                  U R                  U R                  U5      5      5      -   nO8UnU R                  U5      nU R                  X5      nU R                  U5      U-   nXR                  U R	                  U R                  U5      5      5      -   nU$ r  )r  r  r
  r  r  r  )r   r   r   ress       r(   r   LinearTransformerBlock.forward  s    >OODIIdjjm$<==A C

1A		!$A"S(A A 788r*   )r  r  r  r  r
  r  )r5   rq   rq   rq   NNNNr  )r   r   r   r   r   rM   r   r   r   r   r   r   r   r   r   r   r   r   s   @r(   r  r    s    $  #""3748.. . 	.
 . .  RYY0. !bii1. 
. .< x/E QVQ]Q]  r*   r  c                       ^  \ rS rSrSrSSSSSSSS	S
SSSS\SS4S\S\\   S\S\S\\   S\	\\4   S\S\\   S\S\S\S\S\S\
S\\R                     4U 4S jjjrS\R                   S\R                   4S jrSrU =r$ ) MobileVitV2Blocki  z0
This class defines the `MobileViTv2 block <>`_
NrA   r;   r   ro   r5   r4   rp   rq   rr   rs   rt   rv   rw   rx   ry   r.   r/   r0   r{   r|   r~   r   r   c                   > UUS.n[         TU ]  5         U=(       d
    [        5       n[        XQ5      nU=(       d    UnU=(       d    [	        XA-  5      nUR
                  " UU4USUUS   S.UD6U l        [        R                  " X4SSS.UD6U l	        [        R                  " [        U	5       Vs/ s H   n[        U4UUUUUR                  US.UD6PM"     sn6 U l        U" U40 UD6U l        UR
                  " X4SSSS.UD6U l        [#        U
5      U l        U R$                  S   U R$                  S   -  U l        [)        5       U l        g s  snf )	Nr   r   r   r   Fr   )ry   r{   r|   r   rK   r   )rt   ru   	apply_act)r   r   r   r   r	   r   r   r   r   r   r   r   r  r   r   r   r   r   r0   r   r   coreml_exportable)r   rr   rs   rt   rv   rw   rx   ry   r.   r/   r0   r{   r|   r~   r   r   r   r   r   r   r   r   r   s                         r(   r   MobileVitV2Block.__init__  sy   * /$79J/#V)R^L<Q-R,,
 $a[
 
 		&[qu[XZ[== ,-+
 . #	##( **1	 	 .+
  +?AbA	--owTU^_kpwtvw#J///!,tq/AA!.'+
s   1'Er   r   c                    UR                   u  p#pEU R                  u  pg[        R                  " XF-  5      U-  [        R                  " XW-  5      U-  pX-  X-  pX-  nX:w  d  X:w  a  [        R
                  " XU	4SSS9nU R                  U5      nU R                  U5      nUR                   S   nU R                  (       a  [        R                  " XU4Xg4S9nO'UR                  X#XX5      R                  SSSSS	S
5      nUR                  X#SU5      nU R                  U5      nU R                  U5      nU R                  (       a-  UR                  X#U-  U-  X5      n[        R                  " XS9nO>UR                  X#XgX5      R                  SSS
S	SS5      nUR                  X#X-  X-  5      nU R                  U5      nU$ )Nr   Tr   r   r   r   rA      r4   r+   r   )upscale_factor)r   r0   r   r   r   r   r   r   r  unfoldr   permuter   r   pixel_shuffler   )r   r   r   r   r   r   r   r   r   r   r   r   r   s                r(   r   MobileVitV2Block.forward  s   WW
a??yy-71;9ORY9Yu#(#3U5E[!/:aen:UYZA MM!MM! GGAJ!!'(:GCUVA		!kKSSTUWXZ[]^`acdeAIIaB, QIIaL !!		![72KMA:A		!+KSSTUWXZ[]^`acdeA		! 5{7LMANN1r*   )r   r   r   r  r   r   r0   r   )r   r   r   r   r   r
   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r(   r  r    s    &* "%()(."-1%&!$&"6@%:1:1 c]:1 	:1
  :1 !:1 CHo:1 :1 &c]:1  #:1 :1 :1 :1 ":1 :1  %)O!:1 :1x# #%,, # #r*   r  r-   r8   c                 f    [        [        X4U(       d	  [        U    O[        U   [        SS9S.UD6$ NT)flatten_sequential)	model_cfgfeature_cfgr   r   
model_cfgsr&   variantcfg_variant
pretrainedr   s       r(   _create_mobilevitr,  ?  <    -8*W%j>UD1 	 r*   c                 f    [        [        X4U(       d	  [        U    O[        U   [        SS9S.UD6$ r"  r&  r(  s       r(   _create_mobilevit2r/  G  r-  r*   c                 $    U SSSSSSSSS	S
SS.UE$ )Ni  )rA   r?   r?   )rp   rp   g?bicubic)rq   rq   rq   )r;   r;   r;   z	stem.convzhead.fcFzcvnets-license)urlnum_classes
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierfixed_input_sizelicenser   )r2  r   s     r(   _cfgr>  O  s5    4}SY)\!!#  r*   zmobilevit_xxs.cvnets_in1kztimm/)	hf_hub_idzmobilevit_xs.cvnets_in1kzmobilevit_s.cvnets_in1kzmobilevitv2_050.cvnets_in1kg"~j?)r?  r6  zmobilevitv2_075.cvnets_in1kzmobilevitv2_100.cvnets_in1kzmobilevitv2_125.cvnets_in1kzmobilevitv2_150.cvnets_in1kzmobilevitv2_175.cvnets_in1kzmobilevitv2_200.cvnets_in1kz$mobilevitv2_150.cvnets_in22k_ft_in1kz$mobilevitv2_175.cvnets_in22k_ft_in1kz$mobilevitv2_200.cvnets_in22k_ft_in1kz(mobilevitv2_150.cvnets_in22k_ft_in1k_384)rA   r@   r@   )   r@  )r?  r4  r5  r6  z(mobilevitv2_175.cvnets_in22k_ft_in1k_384z(mobilevitv2_200.cvnets_in22k_ft_in1k_384r   c                     [        SSU 0UD6$ )Nr+  )ra   r,  r+  r   s     r(   ra   ra     s    NNvNNr*   c                     [        SSU 0UD6$ )Nr+  )rb   rB  rC  s     r(   rb   rb     s    M
MfMMr*   c                     [        SSU 0UD6$ )Nr+  )rc   rB  rC  s     r(   rc   rc     s    LzLVLLr*   c                     [        SSU 0UD6$ )Nr+  )re   rB  rC  s     r(   re   re         P:PPPr*   c                     [        SSU 0UD6$ )Nr+  )rf   rB  rC  s     r(   rf   rf     rG  r*   c                     [        SSU 0UD6$ )Nr+  )rh   rB  rC  s     r(   rh   rh     rG  r*   c                     [        SSU 0UD6$ )Nr+  )rg   rB  rC  s     r(   rg   rg     rG  r*   c                     [        SSU 0UD6$ )Nr+  )ri   rB  rC  s     r(   ri   ri     rG  r*   c                     [        SSU 0UD6$ )Nr+  )rj   rB  rC  s     r(   rj   rj     rG  r*   c                     [        SSU 0UD6$ )Nr+  )rk   rB  rC  s     r(   rk   rk     rG  r*   )mobilevitv2_150_in22ft1kmobilevitv2_175_in22ft1kmobilevitv2_200_in22ft1kmobilevitv2_150_384_in22ft1kmobilevitv2_175_384_in22ft1kmobilevitv2_200_384_in22ft1k)      @)r+   rT  )r4   r5   r6   )r;   )NF)rD   )F)@r   r   typingr   r   r   r   r   torch.nn.functionalr   
functionalr   timm.layersr   r	   r
   r   r   r   _builderr   _features_fxr   	_registryr   r   r   byobnetr   r   r   r   r   r   vision_transformerr   r   __all__r)   r3   r:   rQ   r&   r'  r   rm   r   r  r  r,  r/  r>  default_cfgsra   rb   rc   re   rf   rh   rg   ri   rj   rk   r   r   r*   r(   <module>r`     s  
  2 2     _ _ * 1 Y Y [ [ 9
<
* $qB!<$qB!<qB!RSTabgjkqB!RSTabgjkqB!RSTabgjk
   $qB!4$qB!4qB!RSTabcqB!STUbcdqB!STUbcd
   $qB!4$qB!4qB!STUbcdqC1cUVcdeqC1cUVcde
   $qB!4$qB!4qB!STUbcdqC1cUVcdeqC1cUVcde
 #&" %S)$S)$T*$S)$S)$T*$S)QI
X qRYY q qhy>")) y>x;RYY ;| dryy d dN {N + |- .	 % .&!8.&w 7.& tg6.&
 "4$.& "4$.& "4$.& "4$.&" "4$#.&( "4$).&. "4$/.&6 +D-7.&< +D-=.&B +D-C.&J / Hs1DK.&P / Hs1DQ.&V / Hs1DW.& .b O O O N N N Mw M M Q7 Q Q Q7 Q Q Q7 Q Q Q7 Q Q Q7 Q Q Q7 Q Q Q7 Q Q H F F F$N$N$N' r*   