
    Q3j_                     6   d dl mZmZ d dlZd dlZd dlmZmZ d dl	m
Z
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mZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d d	l,m-Z-  e+egegegegd
d      d{d dd       Z. G d d      Z/ G d de      Z0ejb                  je                  deeg      d        Z3ejb                  je                  deeg      d        Z4d Z5ejb                  je                  d eed dd       eeddd      g      d        Z6ejb                  je                  dedddd e7d!fedd"d#d e7d$fedd dd e8d%fed dd&d e8d'fedd(dd e8d)fg      d*        Z9d+ Z:d, Z;ejb                  je                  d-e<d.fed.fed/fejz                  d0fg      d1        Z>d2 Z?ejb                  je                  d3 eedd d       eed dd       eeddd#       eh d4       e        ed5       e'        ed6       e!        e       g
      d7        Z@ejb                  je                  d8 eedd9d&       eed:d;d      f eedd9d&       eed:d;d#      f eedd9d&       eed<d;d      f eedd9d&       eed;dd      f eedd9d&       eed<dd#      f eed9dd       eed:d;d      f eed9dd       eed:d;d#      f eed9dd       eeddd      f eed9dd       eedd:d      f eed9dd       eedd=d#      f eed:d;d       eeddd&      f eed:d;d       eeddd      f eed:d;d       eed>d=d#      f eed:d;d       eed>d=d&      f eed:d;d#       eed?d@d#      f eed:d;d#       eed?d@d      f eeddd       eed dd      f eeddd       eed dd      fg      dA        ZAejb                  je                  d3 e        e eB       e        e#        e%        e&        e        eeddd#      g      dB        ZCejb                  je                  d3 e        e        e eB       e#        e%        e&        e        e'        e        ed5       eh d4       eeh dC       eeddd#       eed d@d#       eed dd#       eedd d#       eed dd#       eed dd       eedd d&       ed6       e!        e       g      dD        ZDejb                  je                  dE eed dd      dFf eed dd#      dGf eh d4      dHf eeEej                  ej                  h      ej                  feHdI fdJdKddgd9d<ggfdK ej                  ddgd9d<gg      fdL eddgd9d<gg      fdL eddgd9d<gg      fg
e-D  cg c]  } dL | ddgd9d<gg      f c} dMdNej                  j                  d       fdOe/ e/       fe<dfedPfdQdRdSej                  f e       d(f e       dTf e       ddUz  f e       df e        eMdS      f e       ej                  f e       dVf ed6       e0d W      fdX      dY        ZNejb                  je                  dZ eed dd      ef ed[d\h      ef eedFd]h      efdKefdLe&fdNe%fde#feHefe<e fd^efd_e'f ed5      ef ed6      efd`efdSe"fej                  e"fg      da        ZOdb ZPdc ZQdd ZRde ZSdf ZTdg ZUdh ZVdi ZWdj ZXdk ZYdl ZZdm Z[dn Z\do Z]dp Z^dq Z_dr Z`ds Zadt Zbejb                  je                  duddvg      dw        Zcejb                  je                  dxg dy      dz        Zdyc c} w )|    )IntegralRealN)	csr_array
csr_matrix)config_context
get_config)BaseEstimator_fit_context)LeaveOneOut
deprecated)
HasMethodsHiddenIntervalInvalidParameterErrorMissingValuesOptions
RealNotInt
StrOptions_ArrayLikes	_Booleans
_Callables
_CVObjects_InstancesOf_IterablesNotString_NanConstraint_NoneConstraint_PandasNAConstraint_RandomStates_SparseMatrices_VerboseHelpergenerate_invalid_param_valgenerate_valid_parammake_constraintvalidate_params)CSR_CONTAINERS)abcdTprefer_skip_nested_validation)r*   c                     y)z/A function to test the validation of functions.N )r'   r(   r)   r*   argskwargss         V/DATA/.local/lib/python3.12/site-packages/sklearn/utils/tests/test_param_validation.py_funcr2   )           c                   p    e Zd ZdZ edegid      d        Z e        edegid      d               Zy)_ClasszJA class to test the _InstancesOf constraint and the validation of methods.r'   Tr+   c                      y)zA validated methodNr.   selfr'   s     r1   _methodz_Class._method4   r3   r4   c                      y)zA deprecated validated methodNr.   r8   s     r1   _deprecated_methodz_Class._deprecated_method8   r3   r4   N)	__name__
__module____qualname____doc__r%   r   r:   r   r<   r.   r4   r1   r6   r6   1   sQ    TcD6]$G! H! \cD6]$G, H ,r4   r6   c                   L    e Zd ZU dZdegiZeed<   d Z e	d      d	d       Z
y)

_Estimatorz<An estimator to test the validation of estimator parameters.r'   _parameter_constraintsc                     || _         y Nr'   r8   s     r1   __init__z_Estimator.__init__C   s	    r4   Tr+   Nc                      y rE   r.   )r9   Xys      r1   fitz_Estimator.fitF       r4   NN)r=   r>   r?   r@   r   rC   dict__annotations__rG   r
   rK   r.   r4   r1   rB   rB   >   s4    F$'$=D0 5 6r4   rB   interval_typec                     t        | ddd      }d|v sJ d|vsJ t        | ddd      }d|vsJ d|v sJ t        | ddd      }d|v sJ d|v sJ t        | ddd      }d|vsJ d|vsJ y)	z.Check the range of values depending on closed.   leftclosedrightbothneitherN)r   rP   intervals     r1   test_interval_ranger\   K   s     r1V<H>>Hr1W=HX==r1V<H>>==r1Y?HXHr4   c                 0   t        | ddd      }ddz  |vsJ ddz  |vsJ t        ddz        |vsJ t        ddz        |vsJ t        | dddz  d      }ddz  |v sJ ddz  |vsJ t        ddz        |v sJ t        ddz        |vsJ ddz  |vsJ y)	zbCheck that Interval constraint work with large integers.

    non-regression test for #26648.
    r   rS   rY   rU   A      i   N)r   floatrZ   s     r1   test_interval_large_integersra   _   s     q!I>Hb5   c6!!!B<x'''C=(((q!S&CHb5Hc6!!!B<8###C=(((d7("""r4   c                     t        t        ddd      } t        j                  | v sJ t        t        ddd      } t        j                   | v sJ t        t        ddd      } t        j                  | vsJ t        j                   | vsJ y)zjCheck that inf is included iff a bound is closed and set to None.

    Only valid for real intervals.
    r   NrW   rU   rT   rY   )r   r   npinfr[   s    r1   test_interval_inf_in_boundsrf   t   s    
 ag6H66XdAf5HFF7hdD;H66!!!FF7("""r4   r[      rT   rU   rX   c                 ,    t         j                  | vsJ y)z)Check that np.nan is not in any interval.N)rc   nanre   s    r1   test_nan_not_in_intervalrj      s     66!!!r4   zparams, error, match      ?rS   )typerT   rW   rV   z=Expecting left to be an int for an interval over the integersg       @rY   z>Expecting right to be an int for an interval over the integersz&left can't be None when closed == leftrW   z(right can't be None when closed == rightzright can't be less than leftc                 r    t        j                  ||      5  t        di |  ddd       y# 1 sw Y   yxY w)zNCheck that informative errors are raised for invalid combination of parametersmatchNr.   )pytestraisesr   )paramserrorrp   s      r1   test_interval_errorsru      s*    @ 
uE	*6 
+	*	*s   -6c                      t        h ddh      } | j                  d      sJ | j                  d      sJ | j                  d      rJ dt        |       v sJ y)z*Sanity check for the StrOptions constraint   r'   r(   r)   r)   r   r'   r*   z'c' (deprecated)N)r   is_satisfied_bystroptionss    r1   test_stroptionsr|      s^    cU;G""3'''""3'''&&s+++W---r4   c                      t        t        ddt        j                  hdh      } | j	                  d      sJ | j	                  t        j                        sJ | j	                  d      rJ dt        |       v sJ y)z'Sanity check for the Options constraintg            ?r   Gz?z-0.5 (deprecated)N)r   r   rc   rd   rx   ry   rz   s    r1   test_optionsr      so    dT3/TFCG""4(((""266***&&t,,,#g,...r4   ztype, expected_type_nameintr`   znumpy.ndarrayc                 B    t        |       }t        |      d| dk(  sJ y)z?Check the string representation of the _InstancesOf constraint.zan instance of ''N)r   ry   )rl   expected_type_name
constraints      r1   %test_instances_of_type_human_readabler      s,     d#Jz? 01C0DAFFFFr4   c                      t        ddg      }  G d d      } G d d      }| j                   |             sJ | j                   |             rJ t        |       dk(  sJ y)	z Check the HasMethods constraint.r'   r(   c                       e Zd Zd Zd Zy)test_hasmethods.<locals>._Goodc                      y rE   r.   r9   s    r1   r'   z test_hasmethods.<locals>._Good.a       r4   c                      y rE   r.   r   s    r1   r(   z test_hasmethods.<locals>._Good.b   r   r4   N)r=   r>   r?   r'   r(   r.   r4   r1   _Goodr      s    		r4   r   c                       e Zd Zd Zy)test_hasmethods.<locals>._Badc                      y rE   r.   r   s    r1   r'   ztest_hasmethods.<locals>._Bad.a   r   r4   N)r=   r>   r?   r'   r.   r4   r1   _Badr      s    	r4   r   z"an object implementing 'a' and 'b'N)r   rx   ry   )r   r   r   s      r1   test_hasmethodsr      se    S#J'J   %%eg...))$&111z?BBBBr4   r   rw   )numeric_onlyrK   c                 @    t        |       }| j                  |      rJ y)z>Check that the value generated does not satisfy the constraintNr"   rx   )r   	bad_values     r1   test_generate_invalid_param_valr      s%    " +:6I)))4444r4   zinteger_interval, real_interval         i   
   c                     t        |      }|j                  |      rJ | j                  |      rJ t        |       }|j                  |      rJ | j                  |      rJ y)ztCheck that the value generated for an interval constraint does not satisfy any of
    the interval constraints.
    r   Nr   )integer_intervalreal_intervalr   s      r1   +test_generate_invalid_param_val_2_intervalsr      sm    b +mDI,,Y777//	:::*6FGI,,Y777//	::::r4   c                 v    t        j                  t              5  t        |        ddd       y# 1 sw Y   yxY w)zmCheck that the function raises NotImplementedError when there's no invalid value
    for the constraint.
    N)rq   rr   NotImplementedErrorr"   r   s    r1   )test_generate_invalid_param_val_all_validr   W  s%    " 
*	+":. 
,	+	+s   /8>   rg   rS   r   c                 @    t        |       }| j                  |      sJ y)z;Check that the value generated does satisfy the constraint.N)r#   rx   )r   values     r1   test_generate_valid_paramr   l  s"    : !,E%%e,,,r4   zconstraint_declaration, valuegzG?*   r(   c                     | dz   S )Nrg   r.   )xs    r1   <lambda>r     s    QUr4   rM   z
array-likezsparse matrix)random_stater   r   )r   Nr~   )booleanF)verboserg   ri   g      i  missingrF   )	cv_objectr   c                 @    t        |       }|j                  |      sJ y)z+Sanity check for the is_satisfied_by methodN)r$   rx   )constraint_declarationr   r   s      r1   test_is_satisfied_byr     s$    N !!78J%%e,,,r4   z1constraint_declaration, expected_constraint_classoption1option2r   r   r   r   c                 :    t        |       }|j                  |u sJ y)zICheck that make_constraint dispatches to the appropriate constraint classN)r$   	__class__)r   expected_constraint_classr   s      r1   test_make_constraintr     s$    . !!78J#<<<<r4   c                  z    t        j                  t        d      5  t        d       ddd       y# 1 sw Y   yxY w)zNCheck that an informative error is raised when an unknown constraint is passedzUnknown constraintro   znot a valid constraintN)rq   rr   
ValueErrorr$   r.   r4   r1   test_make_constraint_unknownr     s&    	z)=	>01 
?	>	>s   1:c                     t        j                  t        d      5  t        dd       ddd       t        j                  t        d      5  t        ddgddi ddd       t        j                  t        d	      5  t        di ddi ddd       t        j                  t        d
      5  t        ddd       ddd       t        j                  t        d      5  t        dgg dddiddi ddd       t        j                  t        d	      5  t        dgg dddiddi ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   txY w# 1 sw Y   yxY w)zGCheck that validate_params works no matter how the arguments are passedz"The 'a' parameter of _func must bero   wrongrg   r)   Nz"The 'b' parameter of _func must ber)   "The 'c' parameter of _func must bez"The 'd' parameter of _func must be)r)   r*   r   )r   rS   r   r   er   rg   rS   r   four)rg   )rq   rr   r   r2   r.   r4   r1   test_validate_paramsr     sU   	%I
 	g

 
%I
 	7|!q!

 
%I
 	"C>"

 
%I
 	a1 
 
%I
 	a3/3Q33(3

 
%I
 	a2)2v2#q2
 
5
 


 


 


 

 


 
sG   D9E>E/E!E*E69EEEE'*E36E?c                  J    t        dt        gid      d        }  | dd       y)zTCheck that no error is raised when there are parameters without
    constraints
    r'   Tr+   c                      y rE   r.   )r'   r(   s     r1   funcz1test_validate_params_missing_params.<locals>.func   rL   r4   rg   rS   N)r%   r   )r   s    r1   #test_validate_params_missing_paramsr     s/    
 cC5\F G 	AJr4   c                  x    t               t              } t        j                  t        d      5   | ddd       ddd       t        j                  t        d      5  t        j
                  t        d      5   | ddd	       ddd       ddd       y# 1 sw Y   ]xY w# 1 sw Y   xY w# 1 sw Y   yxY w)
z5Check that validate_params functions can be decoratedzFunction _func is deprecatedro   rg   rS   r   r   Nr   r   )r   r2   rq   warnsFutureWarningrr   r   )decorated_functions    r1    test_decorate_validated_functionr     s    %e,	m+I	J1a1% 
K 
m+I	J]]!)N
 q!w/
 
K	J	 
K	J

 
 
K	Js/   BB0;B$B0B!$B-	)B00B9c                     t        j                  t        d      5  t               j	                  d       ddd       t        j
                  t        d      5  t        j                  t        d      5  t               j                  d       ddd       ddd       y# 1 sw Y   kxY w# 1 sw Y   xY w# 1 sw Y   yxY w)z-Check that validate_params works with methodsz+The 'a' parameter of _Class._method must bero   r   Nz)Function _deprecated_method is deprecatedz6The 'a' parameter of _Class._deprecated_method must be)rq   rr   r   r6   r:   r   r   r<   r.   r4   r1   test_validate_params_methodr     s    	%R
 	!
 
m+V	W]]!J
 H''0	
 
X	W
 

 
 
X	Ws/   B B85B,B8 B),B5	1B88Cc                      t        d      } t        j                  t        d      5  | j	                          ddd       y# 1 sw Y   yxY w)z9Check that validate_params works with Estimator instancesr   z'The 'a' parameter of _Estimator must bero   N)rB   rq   rr   r   rK   )ests    r1   test_validate_params_estimatorr   &  s;     W
C	%N
 		
 
 
s   AA
c                      t        j                  t        d      5  t        h dddh       ddd       y# 1 sw Y   yxY w)z@Check that the deprecated parameter must be a subset of options.z#deprecated options must be a subsetro   rw   r'   r*   r   N)rq   rr   r   r   r.   r4   r1   !test_stroptions_deprecated_subsetr   1  s,    	z)N	O?Sz: 
P	O	Os	   7A c                  4   t        dt        t              t        gid      d        }  | dddd        | g d	       t	        j
                  t        d
      5 } | d       ddd       t        j                        }d|v sJ d|vsJ y# 1 sw Y   +xY w)zECheck that internal constraints are not exposed in the error message.paramTr+   c                      y rE   r.   r   s    r1   fz!test_hidden_constraint.<locals>.f:  s     	r4   rg   rS   r   )r'   r(   r)   r   The 'param' parameterro   badr   Nzan instance of 'dict'zan instance of 'list')	r%   r   listrN   rq   rr   r   ry   r   r   exc_infoerr_msgs      r1   test_hidden_constraintr   7  s     	6$<&'t AAAiL	%<
		
 (..!G"g---"'111
 
s   
BBc            	      @   t        dt        dh      t        t        dh            gid      d        }  | d        | d       t        j                  t
        d      5 } | d	
       ddd       t        j                        }d|v sJ d|vsJ y# 1 sw Y   +xY w)zBCheck that we can have 2 StrOptions constraints, one being hidden.r   autowarnTr+   c                      y rE   r.   r   s    r1   r   z!test_hidden_stroptions.<locals>.fR      
 	r4   r   ro   r   r   N)r%   r   r   rq   rr   r   ry   r   r   s      r1   test_hidden_stroptionsr   O  s     	:vh'
F80D)EFG&*	 fIfI	%<
		
 (..!GW   
 
s    
BBc                  h    t        t        d      sJ t        t               j                  d      sJ y)zCheck that the validate_params decorator properly sets the parameter constraints
    as attribute of the decorated function/method.
    _skl_parameter_constraintsN)hasattrr2   r6   r:   r.   r4   r1   4test_validate_params_set_param_constraints_attributer   h  s.     5677768##%ABBBr4   c                  v    t        ddgid      d        }  | d        | t        j                  d             y)zCheck that validate_params raise a deprecation message but still passes
    validation when using an int for a parameter accepting a boolean.
    r   r   Tr+   c                      y rE   r.   r   s    r1   r   z1test_boolean_constraint_deprecated_int.<locals>.fu  rL   r4   FN)r%   rc   bool_r   s    r1   &test_boolean_constraint_deprecated_intr   p  s>    
 g	{+4P Q dGbhhuor4   c                      t        t        dgddd      dd       } t        j                  t        d      5   | d	
       ddd        G d d      } | |        |  |              y# 1 sw Y   +xY w)z5Check that validation can be skipped for a parameter.Nno_validationparam1param2Tr+   c                      y rE   r.   r   s     r1   r   ztest_no_validation.<locals>.f  r   r4   zThe 'param1' parameterro   r   )r   c                       e Zd Zy)$test_no_validation.<locals>.SomeTypeN)r=   r>   r?   r.   r4   r1   SomeTyper     s    r4   r   )r   rM   r%   r   rq   rr   r   )r   r   s     r1   test_no_validationr   ~  sr     ;/:&*	 
,4L	M	 
N  XXZ 
N	Ms   
A--A6c                      t        j                  d      } t               }|j                  | j                        sJ |j                  t        j                  g d            rJ y)z9Add a specific test for checking support for `pandas.NA`.pandasr   N)rq   importorskipr   rx   NArc   array)pdna_constraints     r1   $test_pandas_na_constraint_with_pd_nar    sR    			X	&B')M((///,,RXXi-@AAAAr4   c                      t               } | j                  g d      sJ | j                  t        d            sJ | j                  d      rJ y)zGCheck that a string does not satisfy the _IterableNotString constraint.r   r   zsome stringN)r   rx   ranger   s    r1   test_iterable_not_stringr    sM    $&J%%i000%%eBi000))-8888r4   c                     t               } | j                  d      sJ | j                  t                     sJ | j                  ddgddgfddgddgfg      sJ | j                  d      sJ | j                  d      rJ y)zUCheck that the _CVObjects constraint accepts all current ways
    to pass cv objects.r   rg   rS   r   r   Nznot a CV object)r   rx   r   r   s    r1   test_cv_objectsr
    s     J%%a(((%%km444%%AA'71a&1a&9I&JKKK%%d+++))*;<<<<r4   c                  P     G d dt               }  | d      j                          y)zCheck that the validation from a scikit-learn estimator inherited by a third
    party estimator does not impose a match between the dict of constraints and the
    parameters of the estimator.
    c                   *     e Zd Z fdZd fd	Z xZS )7test_third_party_estimator.<locals>.ThirdPartyEstimatorc                 4    || _         t        | 	  d       y )Nr   rF   )r(   superrG   )r9   r(   r   s     r1   rG   z@test_third_party_estimator.<locals>.ThirdPartyEstimator.__init__  s    DFGq!r4   c                 &    t         |   ||       y rE   )r  rK   )r9   rI   rJ   r   s      r1   rK   z;test_third_party_estimator.<locals>.ThirdPartyEstimator.fit  s    GK1r4   rM   )r=   r>   r?   rG   rK   __classcell__)r   s   @r1   ThirdPartyEstimatorr    s    	"	 	r4   r  r   r(   N)rB   rK   )r  s    r1   test_third_party_estimatorr    s!    j  !  "r4   c                  v    t        t        ddd      } | j                  d      sJ | j                  d      rJ y)z9Check for the type RealNotInt in the Interval constraint.r   rg   rX   rU   rk   N)r   r   rx   r   s    r1   test_interval_real_not_intr    s=    *a6:J%%c***))!,,,,r4   c                      t        dt              sJ t        dt              rJ t        t        j                  d      t              sJ t        t        j                  d      t              rJ y)zCheck for the RealNotInt type.rk   rg   N)
isinstancer   rc   float64int64r.   r4   r1   test_real_not_intr    sU    c:&&&!Z(((bjjmZ000"((1+z2222r4   c                      t        dt        gid      d        } t        j                  t        d      5   | d       d	d	d	       t        d
      5   | d       d	d	d	       y	# 1 sw Y   (xY w# 1 sw Y   y	xY w)z@Check that param validation can be skipped using config_context.r'   Tr+   c                      y rE   r.   rF   s    r1   r   z%test_skip_param_validation.<locals>.f  rL   r4   The 'a' parameterro   1rF   Nskip_parameter_validation)r%   r   rq   rr   r   r   r   s    r1   test_skip_param_validationr"    so     cC5\F G 
,4G	H	C 
I 
$	7	C 
8	7	 
I	H 
8	7s   
A'
A3'A03A<r,   Fc                 n   t        dt        gid      d        t        dt        gi|       fd       }t        j                  t        d      5   |d	
       ddd       | r
 |d
       yt        j                  t        d      5   |d
       ddd       y# 1 sw Y   CxY w# 1 sw Y   yxY w)z,Check that nested validation can be skipped.r'   Tr+   c                      y rE   r.   rF   s    r1   r   z&test_skip_nested_validation.<locals>.f  rL   r4   r(   c                      d      S )Ninvalid_param_valuerF   r.   )r(   r   s    r1   gz&test_skip_nested_validation.<locals>.g  s     ())r4   zThe 'b' parameterro   r&  r  Nrg   r  r   )r,   r'  r   s     @r1   test_skip_nested_validationr(    s     cC5\F G 	se&C*	*
 
,4G	H	!" 
I %	A]]08KLF ML 
I	H MLs   
B
B+B(+B4zJskip_parameter_validation, prefer_skip_nested_validation, expected_skipped))TTT)TFT)FTT)FFFc                     t        dt        gi|      d        }t        |       5   |d      }ddd       |k(  sJ y# 1 sw Y   xY w)z5Check interaction between global skip and local skip.r'   r+   c                     t               d   S )Nr!  )r   rF   s    r1   r'  z9test_skip_nested_validation_and_config_context.<locals>.g
  s     |788r4   r   rg   N)r%   r   r   )r!  r,   expected_skippedr'  actual_skippeds        r1   .test_skip_nested_validation_and_config_contextr-    s\     	se4Q99 
2K	L1 
M ---- 
M	Ls   	A  A	)r   )enumbersr   r   numpyrc   rq   scipy.sparser   r   sklearn._configr   r   sklearn.baser	   r
   sklearn.model_selectionr   sklearn.utilsr   sklearn.utils._param_validationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   sklearn.utils.fixesr&   r2   r6   rB   markparametrizer\   ra   rf   rj   	TypeErrorr   ru   r|   r   r   ndarrayr   r   r   r   r   r   r   rl   float32r  callabler  randomRandomStateri   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r"  r(  r-  )	containers   0r1   <module>r@     s
   "   . 6 4 / $      4 / &vTF$8"&:a :	:
, 
,
 
 8T*:; <& 8T*:;# <#(#  dAq((4tF*ST"	"
  sQ&IL	
 q3)LL	
 ta6J5	
 q47K7	
 q2H,	
+<=<./ 	e	5	w	_%	GGC( tQv.q$v.tT)4?#4(555 % XtQw7ZQv6	

 XtQw7ZQy9	

 XtQw7ZAf5	

 XtQw7ZD8	

 XtQw7ZD;	

 Xq$v6ZQv6	

 Xq$v6ZQy9	

 Xq$v6ZAf5	

 Xq$v6Zr&9	

 Xq$v6Zr)<	

 Xr1V4Zq9	

 Xr1V4ZD8	

 Xr1V4Zb;	

 Xr1V4Zb9	

 Xr1Y7ZBy9	

 Xr1Y7ZBv6	

 Xq$v6ZAf5	

 Xq$v6ZAf5	
KILZ
;[LZ
; T4i8	// T4(?#)$4i81b31d95495q!I.q$v.tQw/5-6-76- #	$1V	,d3	(AtI	6;	O	$c*	

BJJ/	0"**=	?#	AA'(	xrxx!Q!Q 012	*q!fq!f%567	)aVaV$456! ,

+	 i!Q!Q(89:+

! 	!  
..q12!!" 	#!$ 
%!& 
a'!( 
s)!* 	+!, 	-!. 
/!0 
"1!2 
$3!4 
!T'"5!6 
$7!8 
%,'9!: 
"&&!;!< 
)$=!> 
E	JO,?!@ 	A!$J-K$J- 7	$1V	,h7	Y	*	+Z8	d|	$g.	{#	/*	'		:	l	I	N#	D	)=9	E	J'	j!		 !*=+*=23D	01 ;20!2C,B9=#&-3 84-H I4 P..W

s   ^