
    3Kia                     f   S r SSKrSSKrSSKJr  SSKJrJr  SSKJ	r	  SSK
r
SSK
Jr  / SQr\" S5      r\	" S	5      r\S
   r\S   r S2S\S\S\S\
R$                  S-  S\4
S jjr S2S\S\S\S\
R$                  S-  S\4
S jjr S2S\S\S\S\S\S\
R$                  S-  S\4S jjrS\S\S\4S jrS\S\4S jr S2S\S\\-  S-  S\4S jjr   S3S\S\S\S\
R$                  S-  S\4
S jjr   S3S\S\S\S\
R$                  S-  S\4
S jjr     S4S\S\S\S\S\S\
R$                  S-  S\4S jjrS\S\S\4S jrS\S\4S  jrS\S\4S! jrS\S\4S" jr S5S\S#\S\4S$ jjr!S\S\"\\4   4S% jr#  S6S\S&\S\
R$                  S-  S\4S' jjr$  S6S\S&\S\
R$                  S-  S\4S( jjr%S\S)\S\4S* jr&    S7S\S\S)\S\S\
R$                  S-  S\4S+ jjr'    S7S\S\S)\S\S\
R$                  S-  S\4S, jjr(  S8S\S&\S\
R$                  S-  S\4S- jjr)  S9S\S.\S\S\
R$                  S-  S\4
S/ jjr*S0\\\4   S\\\4   4S1 jr+\+" \5      r,\+" \5      r-\+" \5      r.\+" \ 5      r/\+" \!5      r0\+" \$5      r1\+" \%5      r2\+" \'5      r3\+" \(5      r4\+" \)5      r5\+" \*5      r6g):zHThis file contains utilities for initializing neural network parameters.    N)Callable)LiteralTypeVar)	ParamSpec)Tensor)calculate_gainuniform_normal_trunc_normal_	constant_ones_zeros_eye_dirac_xavier_uniform_xavier_normal_kaiming_uniform_kaiming_normal_orthogonal_sparse_uniformnormalconstanteyediracxavier_uniformxavier_normalkaiming_uniformkaiming_normal
orthogonalsparse_R_P)linearconv1dconv2dconv3dconv_transpose1dconv_transpose2dconv_transpose3dsigmoidtanhrelu
leaky_reluselu)fan_infan_outtensorab	generatorreturnc                     [         R                  " 5          U R                  XUS9sS S S 5        $ ! , (       d  f       g = fNr5   )torchno_gradr	   r2   r3   r4   r5   s       O/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/torch/nn/init.py_no_grad_uniform_r>   E   s'     
qy9 
   0
>meanstdc                     [         R                  " 5          U R                  XUS9sS S S 5        $ ! , (       d  f       g = fr8   )r:   r;   r
   r2   r@   rA   r5   s       r=   _no_grad_normal_rD   L   s'     
~~d9~= 
r?   c                    S[         S[         4S jnXSU-  -
  :  d  XSU-  -   :  a  [        R                  " SSS9  [        R                  " 5          U" X1-
  U-  5      nU" XA-
  U-  5      nU R                  SU-  S-
  SU-  S-
  US9  U R                  5         U R                  U[        R                  " S	5      -  5        U R                  U5        U R                  X4S
9  U sS S S 5        $ ! , (       d  f       g = f)Nxr6   c                 h    S[         R                  " U [         R                  " S5      -  5      -   S-  $ )N      ?       @)matherfsqrt)rF   s    r=   norm_cdf(_no_grad_trunc_normal_.<locals>.norm_cdf_   s(    dhhq499S>122c99       zjmean is more than 2 std from [a, b] in nn.init.trunc_normal_. The distribution of values may be incorrect.
stacklevel   r9   rI   )minmax)floatwarningswarnr:   r;   r	   erfinv_mul_rJ   rL   add_clamp_)	r2   r@   rA   r3   r4   r5   rM   lus	            r=   _no_grad_trunc_normal_r_   V   s    :E :e : 	1s7{1s7{ 2;	
 
 ah#%&ah#%& 	A	1q519	B 	 	C$))C.()D 	!#+ 
s   BC--
C;valc                     [         R                  " 5          U R                  U5      sS S S 5        $ ! , (       d  f       g = fN)r:   r;   fill_r2   r`   s     r=   _no_grad_fill_re      s!    	||C  
s   1
?c                     [         R                  " 5          U R                  5       sS S S 5        $ ! , (       d  f       g = frb   )r:   r;   zero_r2   s    r=   _no_grad_zero_ri      s    	||~ 
r?   nonlinearityparamc                    / SQnX;   d  U S:X  a  gU S:X  a  gU S:X  a  [         R                  " S5      $ U S:X  av  Uc  S	nOQ[        U[        5      (       d  [        U[        5      (       d  [        U[
        5      (       a  UnO[        S
U S35      e[         R                  " SSUS-  -   -  5      $ U S:X  a   g[        SU  35      e)a  Return the recommended gain value for the given nonlinearity function.

The values are as follows:

================= ====================================================
nonlinearity      gain
================= ====================================================
Linear / Identity :math:`1`
Conv{1,2,3}D      :math:`1`
Sigmoid           :math:`1`
Tanh              :math:`\frac{5}{3}`
ReLU              :math:`\sqrt{2}`
Leaky Relu        :math:`\sqrt{\frac{2}{1 + \text{negative\_slope}^2}}`
SELU              :math:`\frac{3}{4}`
================= ====================================================

.. warning::
    In order to implement `Self-Normalizing Neural Networks`_ ,
    you should use ``nonlinearity='linear'`` instead of ``nonlinearity='selu'``.
    This gives the initial weights a variance of ``1 / N``,
    which is necessary to induce a stable fixed point in the forward pass.
    In contrast, the default gain for ``SELU`` sacrifices the normalization
    effect for more stable gradient flow in rectangular layers.

Args:
    nonlinearity: the non-linear function (`nn.functional` name)
    param: optional parameter for the non-linear function

Examples:
    >>> gain = nn.init.calculate_gain(
    ...     "leaky_relu", 0.2
    ... )  # leaky_relu with negative_slope=0.2

.. _Self-Normalizing Neural Networks: https://papers.nips.cc/paper/2017/hash/5d44ee6f2c3f71b73125876103c8f6c4-Abstract.html
)r$   r%   r&   r'   r(   r)   r*   r+   rS   r,   g?r-   rI   r.   {Gz?znegative_slope z not a valid numberrP   r/   g      ?zUnsupported nonlinearity )rJ   rL   
isinstanceboolintrV   
ValueError)rj   rk   
linear_fnsnegative_slopes       r=   r   r      s    LJ !\Y%>				yy~		%=!N5$''5#&&%'' #Nug5HIJJyyNA$5 5677			
 4\NCDDrO   c           	          [         R                  R                  U 5      (       a%  [         R                  R                  [        U 4XX#S9$ [        XX#5      $ )a  Fill the input Tensor with values drawn from the uniform distribution.

:math:`\mathcal{U}(a, b)`.

Args:
    tensor: an n-dimensional `torch.Tensor`
    a: the lower bound of the uniform distribution
    b: the upper bound of the uniform distribution
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.uniform_(w)
r<   )r:   	overrideshas_torch_function_variadichandle_torch_functionr	   r>   r<   s       r=   r	   r	      sO    ( 226::44viq 5 
 	
 V55rO   c           	          [         R                  R                  U 5      (       a%  [         R                  R                  [        U 4XX#S9$ [        XX#5      $ )a  Fill the input Tensor with values drawn from the normal distribution.

:math:`\mathcal{N}(\text{mean}, \text{std}^2)`.

Args:
    tensor: an n-dimensional `torch.Tensor`
    mean: the mean of the normal distribution
    std: the standard deviation of the normal distribution
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.normal_(w)
rC   )r:   ru   rv   rw   r
   rD   rC   s       r=   r
   r
      sO    ( 226::44fYvc 5 
 	
 F#99rO   c           	          [        XX#XES9$ )a  Fill the input Tensor with values drawn from a truncated normal distribution.

The values are effectively drawn from the
normal distribution :math:`\mathcal{N}(\text{mean}, \text{std}^2)`
with values outside :math:`[a, b]` redrawn until they are within
the bounds. The method used for generating the random values works
best when :math:`a \leq \text{mean} \leq b`.

Args:
    tensor: an n-dimensional `torch.Tensor`
    mean: the mean of the normal distribution
    std: the standard deviation of the normal distribution
    a: the minimum cutoff value
    b: the maximum cutoff value
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.trunc_normal_(w)
r9   )r_   )r2   r@   rA   r3   r4   r5   s         r=   r   r     s    8 "&OOrO   c                     [         R                  R                  U 5      (       a$  [         R                  R                  [        U 4XS9$ [        X5      $ )zFill the input Tensor with the value :math:`\text{val}`.

Args:
    tensor: an n-dimensional `torch.Tensor`
    val: the value to fill the tensor with

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.constant_(w, 0.3)
rd   )r:   ru   rv   rw   r   re   rd   s     r=   r   r   +  sK     226::44y 5 
 	
 &&&rO   c                     [        U S5      $ )zFill the input Tensor with the scalar value `1`.

Args:
    tensor: an n-dimensional `torch.Tensor`

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.ones_(w)
rH   )re   rh   s    r=   r   r   =  s     &#&&rO   c                     [        U 5      $ )zFill the input Tensor with the scalar value `0`.

Args:
    tensor: an n-dimensional `torch.Tensor`

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.zeros_(w)
)ri   rh   s    r=   r   r   J  s     &!!rO   c                     U R                  5       S:w  a  [        S5      e[        R                  " 5          [        R                  " U R
                  X R                  S.6  SSS5        U $ ! , (       d  f       U $ = f)a  Fill the 2-dimensional input `Tensor` with the identity matrix.

Preserves the identity of the inputs in `Linear` layers, where as
many inputs are preserved as possible.

Args:
    tensor: a 2-dimensional `torch.Tensor`

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.eye_(w)
rP   ,Only tensors with 2 dimensions are supported)outrequires_gradN)
ndimensionrq   r:   r;   r   shaper   rh   s    r=   r   r   W  sY     aGHH			6<<V;O;OP 
M 
Ms   +A**
A9groupsc                    U R                  5       nUS;  a  [        S5      eU R                  5       nUS   U-  S:w  a  [        S5      eUS   U-  n[        XCS   5      n[        R
                  " 5          U R                  5         [        U5       H  n[        U5       H  nUS:X  a   SXU-  U-   XpR                  S5      S-  4'   M)  US:X  a4  SU Xd-  U-   UU R                  S5      S-  U R                  S5      S-  4'   Mc  SU Xd-  U-   UU R                  S5      S-  U R                  S5      S-  U R                  S5      S-  4'   M     M     S	S	S	5        U $ ! , (       d  f       U $ = f)
a  Fill the {3, 4, 5}-dimensional input `Tensor` with the Dirac delta function.

Preserves the identity of the inputs in `Convolutional`
layers, where as many input channels are preserved as possible. In case
of groups>1, each group of channels preserves identity

Args:
    tensor: a {3, 4, 5}-dimensional `torch.Tensor`
    groups (int, optional): number of groups in the conv layer (default: 1)
Examples:
    >>> w = torch.empty(3, 16, 5, 5)
    >>> nn.init.dirac_(w)
    >>> w = torch.empty(3, 24, 5, 5)
    >>> nn.init.dirac_(w, 3)
)         z5Only tensors with 3, 4, or 5 dimensions are supportedr   z!dim 0 must be divisible by groupsrS   r   rP   r   N)r   rq   sizerT   r:   r;   rg   range)r2   r   
dimensionssizesout_chans_per_grpmin_dimgds           r=   r   r   l  s|     ""$J"PQQKKMEQx&A<==aF*#1X.G	vA7^?PQF0014aQ19LLM1_  -1A!+A!+-  -1A!+A!+A!+	- $  
, M- 
, Ms   4CE
E'c                     U R                  5       nUS:  a  [        S5      eU R                  S5      nU R                  S5      nSnU R                  5       S:  a  U R                  SS   H  nXE-  nM	     X$-  nX4-  nXg4$ )NrP   zNFan in and fan out can not be computed for tensor with fewer than 2 dimensionsrS   r   )dimrq   r   r   )r2   r   num_input_fmapsnum_output_fmapsreceptive_field_sizesr0   r1   s           r=   _calculate_fan_in_and_fan_outr     s    JA~\
 	
 kk!nO{{1~zz|a ab!A %  "3F5G?rO   gainc                     [        U 5      u  p4U[        R                  " S[        X4-   5      -  5      -  n[        R                  " S5      U-  n[	        X* Xb5      $ )a  Fill the input `Tensor` with values using a Xavier uniform distribution.

The method is described in `Understanding the difficulty of training
deep feedforward neural networks` - Glorot, X. & Bengio, Y. (2010).
The resulting tensor will have values sampled from
:math:`\mathcal{U}(-a, a)` where

.. math::
    a = \text{gain} \times \sqrt{\frac{6}{\text{fan\_in} + \text{fan\_out}}}

Also known as Glorot initialization.

Args:
    tensor: an n-dimensional `torch.Tensor`
    gain: an optional scaling factor
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain("relu"))
rI         @)r   rJ   rL   rV   r>   )r2   r   r5   r0   r1   rA   r3   s          r=   r   r     sQ    4 4F;OF
3v'7!889
9C		#AVR66rO   c                     [        U 5      u  p4U[        R                  " S[        X4-   5      -  5      -  n[	        U SXR5      $ )a  Fill the input `Tensor` with values using a Xavier normal distribution.

The method is described in `Understanding the difficulty of training deep feedforward
neural networks` - Glorot, X. & Bengio, Y. (2010). The resulting tensor
will have values sampled from :math:`\mathcal{N}(0, \text{std}^2)` where

.. math::
    \text{std} = \text{gain} \times \sqrt{\frac{2}{\text{fan\_in} + \text{fan\_out}}}

Also known as Glorot initialization.

Args:
    tensor: an n-dimensional `torch.Tensor`
    gain: an optional scaling factor
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.xavier_normal_(w)
rI           )r   rJ   rL   rV   rD   )r2   r   r5   r0   r1   rA   s         r=   r   r     s?    2 4F;OF
3v'7!889
9CFC88rO   modec                     UR                  5       nSS/nX;  a  [        SU SU 35      e[        U 5      u  p4US:X  a  U$ U$ )Nr0   r1   zMode z" not supported, please use one of )lowerrq   r   )r2   r   valid_modesr0   r1   s        r=   _calculate_correct_fanr     sT    ::<DY'K5&HVWW3F;OFX%6272rO   c           
         [         R                  R                  U 5      (       a(  [         R                  R                  [        U 4U UUUUS9$ SU R
                  ;   a  [        R                  " SSS9  U $ [        X5      n[        X15      nU[        R                  " U5      -  n[        R                  " S5      U-  n[         R                  " 5          U R                  U* XS9sSSS5        $ ! , (       d  f       g= f)	aD  Fill the input `Tensor` with values using a Kaiming uniform distribution.

The method is described in `Delving deep into rectifiers: Surpassing
human-level performance on ImageNet classification` - He, K. et al. (2015).
The resulting tensor will have values sampled from
:math:`\mathcal{U}(-\text{bound}, \text{bound})` where

.. math::
    \text{bound} = \text{gain} \times \sqrt{\frac{3}{\text{fan\_mode}}}

Also known as He initialization.

Args:
    tensor: an n-dimensional `torch.Tensor`
    a: the negative slope of the rectifier used after this layer (only
        used with ``'leaky_relu'``)
    mode: either ``'fan_in'`` (default) or ``'fan_out'``. Choosing ``'fan_in'``
        preserves the magnitude of the variance of the weights in the
        forward pass. Choosing ``'fan_out'`` preserves the magnitudes in the
        backwards pass.
    nonlinearity: the non-linear function (`nn.functional` name),
        recommended to use only with ``'relu'`` or ``'leaky_relu'`` (default).
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.kaiming_uniform_(w, mode="fan_in", nonlinearity="relu")

Note:
    Be aware that ``fan_in`` and ``fan_out`` are calculated assuming
    that the weight matrix is used in a transposed manner,
    (i.e., ``x @ w.T`` in ``Linear`` layers, where ``w.shape = [fan_out, fan_in]``).
    This is important for correct initialization.
    If you plan to use ``x @ w``, where ``w.shape = [fan_in, fan_out]``,
    pass in a transposed weight matrix, i.e. ``nn.init.kaiming_uniform_(w.T, ...)``.
)r2   r3   r   rj   r5   r   ,Initializing zero-element tensors is a no-oprP   rQ   r   r9   N)r:   ru   rv   rw   r   r   rW   rX   r   r   rJ   rL   r;   r	   )	r2   r3   r   rj   r5   fanr   rA   bounds	            r=   r   r     s    V 226::44I% 5 
 	
 	FLLDQRS
 
.C,*D
3
CIIcNS E	vuB 
s   C,,
C:c                 .   SU R                   ;   a  [        R                  " SSS9  U $ [        X5      n[	        X15      nU[
        R                  " U5      -  n[        R                  " 5          U R                  SXtS9sSSS5        $ ! , (       d  f       g= f)a+  Fill the input `Tensor` with values using a Kaiming normal distribution.

The method is described in `Delving deep into rectifiers: Surpassing
human-level performance on ImageNet classification` - He, K. et al. (2015).
The resulting tensor will have values sampled from
:math:`\mathcal{N}(0, \text{std}^2)` where

.. math::
    \text{std} = \frac{\text{gain}}{\sqrt{\text{fan\_mode}}}

Also known as He initialization.

Args:
    tensor: an n-dimensional `torch.Tensor`
    a: the negative slope of the rectifier used after this layer (only
        used with ``'leaky_relu'``)
    mode: either ``'fan_in'`` (default) or ``'fan_out'``. Choosing ``'fan_in'``
        preserves the magnitude of the variance of the weights in the
        forward pass. Choosing ``'fan_out'`` preserves the magnitudes in the
        backwards pass.
    nonlinearity: the non-linear function (`nn.functional` name),
        recommended to use only with ``'relu'`` or ``'leaky_relu'`` (default).
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.kaiming_normal_(w, mode="fan_out", nonlinearity="relu")

Note:
    Be aware that ``fan_in`` and ``fan_out`` are calculated assuming
    that the weight matrix is used in a transposed manner,
    (i.e., ``x @ w.T`` in ``Linear`` layers, where ``w.shape = [fan_out, fan_in]``).
    This is important for correct initialization.
    If you plan to use ``x @ w``, where ``w.shape = [fan_in, fan_out]``,
    pass in a transposed weight matrix, i.e. ``nn.init.kaiming_normal_(w.T, ...)``.
r   r   rP   rQ   r9   N)
r   rW   rX   r   r   rJ   rL   r:   r;   r
   )r2   r3   r   rj   r5   r   r   rA   s           r=   r   r   B  so    V 	FLLDQRS
 
.C,*D
3
C	~~a~: 
s   ,B
Bc                    U R                  5       S:  a  [        S5      eU R                  5       S:X  a  U $ U R                  S5      nU R                  5       U-  nU R	                  X445      R                  SSUS9nX4:  a  UR                  5         [        R                  R                  U5      u  pg[        R                  " US5      nUR                  5       n	Xi-  nX4:  a  UR                  5         [        R                  " 5          U R                  U5      R                  U5        U R                  U5        SSS5        U $ ! , (       d  f       U $ = f)al  Fill the input `Tensor` with a (semi) orthogonal matrix.

Described in `Exact solutions to the nonlinear dynamics of learning in deep
linear neural networks` - Saxe, A. et al. (2013). The input tensor must have
at least 2 dimensions, and for tensors with more than 2 dimensions the
trailing dimensions are flattened.

Args:
    tensor: an n-dimensional `torch.Tensor`, where :math:`n \geq 2`
    gain: optional scaling factor
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_LAPACK)
    >>> w = torch.empty(3, 5)
    >>> nn.init.orthogonal_(w)
rP   z4Only tensors with 2 or more dimensions are supportedr   rS   r9   N)r   rq   numelr   	new_emptyr
   t_r:   linalgqrdiagsignr;   view_ascopy_rZ   )
r2   r   r5   rowscols	flattenedqrr   phs
             r=   r   r   w  s   , QOPP||~;;q>D<<>T!D  $.66q!y6QI{ <<??9%DA

1aA	
BGA{		q"D 
 M 
 Ms   2E
Esparsityc                 v   U R                  5       S:w  a  [        S5      eU R                  u  pE[        R                  " X-  5      n[
        R                  " 5          U R                  SX#S9  [        U5       H$  n[
        R                  " U5      nUSU n	SX	U4'   M&     SSS5        U $ ! , (       d  f       U $ = f)aZ  Fill the 2D input `Tensor` as a sparse matrix.

The non-zero elements will be drawn from the normal distribution
:math:`\mathcal{N}(0, 0.01)`, as described in `Deep learning via
Hessian-free optimization` - Martens, J. (2010).

Args:
    tensor: an n-dimensional `torch.Tensor`
    sparsity: The fraction of elements in each column to be set to zero
    std: the standard deviation of the normal distribution used to generate
        the non-zero values
    generator: the torch Generator to sample from (default: None)

Examples:
    >>> w = torch.empty(3, 5)
    >>> nn.init.sparse_(w, sparsity=0.1)
rP   r~   r   r9   N)
r   rq   r   rJ   ceilr:   r;   r
   r   randperm)
r2   r   rA   r5   r   r   	num_zeroscol_idxrow_indiceszero_indicess
             r=   r   r     s    . aGHHJD		(/*I	q#3T{G...K&z	2L,-F() # 
 M 
 Ms   AB))
B8methc                    ^ ^^ T R                   mTS S mS[        R                  S[        R                  S[        4U UU4S jjnST ST ST S	3Ul        TUl         U$ )
Nargskwargsr6   c                  V   > [         R                  " ST ST S3[        SS9  T" U 0 UD6$ )Nz	`nn.init.z)` is now deprecated in favor of `nn.init.z`.rP   rQ   )rW   rX   FutureWarning)r   r   r   new_nameold_names     r=   deprecated_init(_make_deprecate.<locals>.deprecated_init  s;    z!J8*TVW	

 T$V$$rO   z
    z_(...)

    .. warning::
        This method is now deprecated in favor of :func:`torch.nn.init.z"`.

    See :func:`~torch.nn.init.z` for details.)__name__r#   r   r   r"   __doc__)r   r   r   r   s   ` @@r=   _make_deprecater     s~    }}H}H%rww %")) % % %$J H IQz R'j:O  (OrO   rb   )r   rH   N)r   rH   g       rI   N)rS   )rH   N)r   r0   r.   N)rS   N)rm   N)7r   rJ   rW   collections.abcr   typingr   r   typing_extensionsr   r:   r   __all__r"   r#   _NonlinearityType_FanModerV   	Generatorr>   rD   r_   re   ri   rp   r   r	   r
   r   r   r   r   r   r   tupler   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!    rO   r=   <module>r      sb   N   $ # '  > T]t_  &' MQ:::!&:38??T3I:: )-	>>
> 
> %	>
 >  )-))
) 
) 	)
 ) %) )X!6 ! !& !
6 f  BFGE#GE,/%K$,>GE
GEX (,	666 6 %	6
 6: (,	::
: 
: %	:
 :: (,PP
P 
P 	P
 P %P P>'f '5 'V '$
'& 
'V 
'
"6 
"f 
" F *26 23 2v 2j& U38_ . (,77
7 %7 	7F (,99
9 %9 	9>36 3 3c 3 &2(,>C>C>C >C $	>C
 %>C >CF &2(,2;2;2; 2; $	2;
 %2; 2;n (,00
0 %0 	0l (,	### 
# %	#
 #N(2r6* xB/? . (
#		!9%d 1/!"23 1[)
		!rO   