
    h$,f^                         d dl mZmZ d dlZd dlZd dl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*  e*egegegegd	d
      dzd dd       Z+ G d d      Z, G d de      Z-ej\                  j_                  deeg      d        Z0ej\                  j_                  deeg      d        Z1d Z2ej\                  j_                  d eed dd       eeddd      g      d        Z3ej\                  j_                  dedddde4d fedd!d"de4d#fedd dde5d$fed dd%de5d&fedd'dde5d(fg      d)        Z6d* Z7d+ Z8ej\                  j_                  d,e9d-fed-fed.fejt                  d/fg      d0        Z;d1 Z<ej\                  j_                  d2 eedd d       eed dd       eeddd"       eh d3       e        ed
4       e&        ed5       e         e       g
      d6        Z=ej\                  j_                  d7 eedd8d%       eed9d:d      f eedd8d%       eed9d:d"      f eedd8d%       eed;d:d      f eedd8d%       eed:dd      f eedd8d%       eed;dd"      f eed8dd       eed9d:d      f eed8dd       eed9d:d"      f eed8dd       eeddd      f eed8dd       eedd9d      f eed8d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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g      d@        Z>ej\                  j_                  d2 e        ee?       e        e"        e$        e%        e        eeddd"      g      dA        Z@ej\                  j_                  d2 e        e        ee?       e"        e$        e%        e        e&        e        ed
4       eh d3       eeh dB       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d5       e         e       g      dC        ZAej\                  j_                  dD eed dd      dEf eed dd"      dFf eh d3      dGf eeBej                  ej                  h      ej                  feEdH fdIdJddgd8d;ggfdJ ej                  ddgd8d;gg      fdK eddgd8d;gg      fdLdMej                  j                  d       fdNe, e,       fe9dfedOfdPdQdRej                  f e       d'f e       dSf e       ddTz  f e       df e        eJdR      f e       ej                  f e       dUf ed5       e-d V      fdWg      dX        ZKej\                  j_                  dY eed dd      ef edZd[h      ef eedEd\h      efdJefdKe%fdMe$fde"feEefe9efd]efd^e&f ed
4      ef ed5      efd_efdRe!fg      d`        ZLda ZMdb ZNdc ZOdd ZPde ZQdf ZRdg ZSdh ZTdi ZUdj ZVdk ZWdl ZXdm ZYdn ZZdo Z[dp Z\dq Z]dr Z^ds Z_ej\                  j_                  dtd
dug      dv        Z`ej\                  j_                  dwg dx      dy        Zay){    )IntegralRealN)
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)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         Ilib/python3.12/site-packages/sklearn/utils/tests/test_param_validation.py_funcr0   (           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     r/   _methodz_Class._method3   r1   r2   c                      y)zA deprecated validated methodNr,   r6   s     r/   _deprecated_methodz_Class._deprecated_method7   r1   r2   N)	__name__
__module____qualname____doc__r$   r   r8   r   r:   r,   r2   r/   r4   r4   0   sQ    TcD6]$G! H! \cD6]$G, H ,r2   r4   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%   r6   s     r/   __init__z_Estimator.__init__B   s	    r2   Tr)   Nc                      y rC   r,   )r7   Xys      r/   fitz_Estimator.fitE       r2   NN)r;   r<   r=   r>   r   rA   dict__annotations__rE   r	   rI   r,   r2   r/   r@   r@   =   s4    F$'$=D0 5 6r2   r@   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   rN   intervals     r/   test_interval_rangerZ   J   s     r1V<H>>Hr1W=HX==r1V<H>>==r1Y?HXHr2   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   rQ   rW   rS   A      i   N)r   floatrX   s     r/   test_interval_large_integersr_   ^   s     q!I>Hb5   c6!!!B<x'''C=(((q!S&CHb5Hc6!!!B<8###C=(((d7("""r2   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   NrU   rS   rR   rW   )r   r   npinfrY   s    r/   test_interval_inf_in_boundsrd   s   s    
 ag6H66XdAf5HFF7hdD;H66!!!FF7("""r2   rY      rR   rS   rV   c                 ,    t         j                  | vsJ y)z)Check that np.nan is not in any interval.N)ra   nanrc   s    r/   test_nan_not_in_intervalrh      s     66!!!r2   zparams, error, match      ?rQ   )typerR   rU   rT   z=Expecting left to be an int for an interval over the integersg       @rW   z>Expecting right to be an int for an interval over the integersz&left can't be None when closed == leftrU   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errorrn   s      r/   test_interval_errorsrs      s3    @ 
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    r/   test_stroptionsry      s^    cU;G""3'''""3'''&&s+++W---r2   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   ra   rb   ru   rv   rw   s    r/   test_optionsr}      so    dT3/TFCG""4(((""266***&&t,,,#g,...r2   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   rv   )rj   expected_type_name
constraints      r/   %test_instances_of_type_human_readabler      s,     d#Jz? 01C0DAFFFFr2   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 rC   r,   r7   s    r/   r%   z test_hasmethods.<locals>._Good.a       r2   c                      y rC   r,   r   s    r/   r&   z test_hasmethods.<locals>._Good.b   r   r2   N)r;   r<   r=   r%   r&   r,   r2   r/   _Goodr      s    		r2   r   c                       e Zd Zd Zy)test_hasmethods.<locals>._Badc                      y rC   r,   r   s    r/   r%   ztest_hasmethods.<locals>._Bad.a   r   r2   N)r;   r<   r=   r%   r,   r2   r/   _Badr      s    	r2   r   z"an object implementing 'a' and 'b'N)r   ru   rv   )r   r   r   s      r/   test_hasmethodsr      se    S#J'J   %%eg...))$&111z?BBBBr2   r   >   r%   r&   r'   )numeric_onlyrI   c                 @    t        |       }| j                  |      rJ y)z>Check that the value generated does not satisfy the constraintNr!   ru   )r   	bad_values     r/   test_generate_invalid_param_valr      s%    " +:6I)))4444r2   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      r/   +test_generate_invalid_param_val_2_intervalsr      sm    b +mDI,,Y777//	:::*6FGI,,Y777//	::::r2   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)ro   rp   NotImplementedErrorr!   r   s    r/   )test_generate_invalid_param_val_all_validr   V  s.    " 
*	+ /":./ / /s   /8>   re   rQ   r   c                 @    t        |       }| j                  |      sJ y)z;Check that the value generated does satisfy the constraint.N)r"   ru   )r   values     r/   test_generate_valid_paramr   k  s"    : !,E%%e,,,r2   zconstraint_declaration, valuegzG?*   r&   c                     | dz   S )Nre   r,   )xs    r/   <lambda>r     s
    QU r2   rK   z
array-likezsparse matrix)random_stater   r   )r   Nr{   )booleanF)verbosere   rg   g      i  missingrD   )	cv_objectr   c                 @    t        |       }|j                  |      sJ y)z+Sanity check for the is_satisfied_by methodN)r#   ru   )constraint_declarationr   r   s      r/   test_is_satisfied_byr     s$    D !!78J%%e,,,r2   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      r/   test_make_constraintr     s$    , !!78J#<<<<r2   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 constraintrm   znot a valid constraintN)ro   rp   
ValueErrorr#   r,   r2   r/   test_make_constraint_unknownr     s/    	z)=	> 2012 2 2s   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 berm   wrongre   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   rQ   r   r   er   re   rQ   r   four)re   )ro   rp   r   r0   r,   r2   r/   test_validate_paramsr     ss   	%I
  	g
 
%I
 " 	7|!q!"
 
%I
 # 	"C>"#
 
%I
 ! 	a1 ! 
%I
 4 	a3/3Q33(34
 
%I
 3 	a2)2v2#q23 35 
" "
# #
! !4 4
3 3sG   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 rC   r,   )r%   r&   s     r/   funcz1test_validate_params_missing_params.<locals>.func  rJ   r2   re   rQ   N)r$   r~   )r   s    r/   #test_validate_params_missing_paramsr     s/    
 cC5\F G 	AJr2   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 deprecatedrm   re   rQ   r   r   Nr   r   )r   r0   ro   warnsFutureWarningrp   r   )decorated_functions    r/    test_decorate_validated_functionr      s    %e,	m+I	J &1a1%& 
m+I	J 0]]!)N
 	0 q!w/	00 0	& &
	0 	00 0s/   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 berm   r   Nz)Function _deprecated_method is deprecatedz6The 'a' parameter of _Class._deprecated_method must be)ro   rp   r   r4   r8   r   r   r:   r,   r2   r/   test_validate_params_methodr     s    	%R
 " 	!" 
m+V	W 1]]!J
 	1 H''0		11 1" "	1 	11 1s/   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 berm   N)r@   ro   rp   r   rI   )ests    r/   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 subsetrm   >   r%   r&   r'   r%   r(   r   N)ro   rp   r   r   r,   r2   r/   !test_stroptions_deprecated_subsetr   *  s4    	z)N	O ;?Sz:; ; ;s	   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 rC   r,   r   s    r/   fz!test_hidden_constraint.<locals>.f3  s     	r2   re   rQ   r   )r%   r&   r'   r   The 'param' parameterrm   badr   Nzan instance of 'dict'zan instance of 'list')	r$   r   listrL   ro   rp   r   rv   r   r   exc_infoerr_msgs      r/   test_hidden_constraintr   0  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 rC   r,   r   s    r/   r   z!test_hidden_stroptions.<locals>.fK      
 	r2   r   rm   r   r   N)r$   r   r   ro   rp   r   rv   r   r   s      r/   test_hidden_stroptionsr   H  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)hasattrr0   r4   r8   r,   r2   r/   4test_validate_params_set_param_constraints_attributer   a  s.     5677768##%ABBBr2   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 rC   r,   r   s    r/   r   z1test_boolean_constraint_deprecated_int.<locals>.fn  rJ   r2   FN)r$   ra   bool_r   s    r/   &test_boolean_constraint_deprecated_intr   i  s>    
 g	{+4P Q dGbhhuor2   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 rC   r,   r   s     r/   r   ztest_no_validation.<locals>.fz  r   r2   zThe 'param1' parameterrm   r   )r   c                       e Zd Zy)$test_no_validation.<locals>.SomeTypeN)r;   r<   r=   r,   r2   r/   SomeTyper     s    r2   r   )r   rK   r$   r~   ro   rp   r   )r   r   s     r/   test_no_validationr   w  sw     ;/:&*	 
,4L	M 	  XXZ s   
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)ro   importorskipr   ru   NAra   array)pdna_constraints     r/   $test_pandas_na_constraint_with_pd_nar    sR    			X	&B')M((///,,RXXi-@AAAAr2   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   ru   ranger   s    r/   test_iterable_not_stringr    sM    $&J%%i000%%eBi000))-8888r2   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   re   rQ   r   r   Nznot a CV object)r   ru   r
   r   s    r/   test_cv_objectsr    s     J%%a(((%%km444%%AA'71a&1a&9I&JKKK%%d+++))*;<<<<r2   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   rD   )r&   superrE   )r7   r&   r   s     r/   rE   z@test_third_party_estimator.<locals>.ThirdPartyEstimator.__init__  s    DFGq!r2   c                 &    t         |   ||       y rC   )r  rI   )r7   rG   rH   r   s      r/   rI   z;test_third_party_estimator.<locals>.ThirdPartyEstimator.fit  s    GK1r2   rK   )r;   r<   r=   rE   rI   __classcell__)r   s   @r/   ThirdPartyEstimatorr
    s    	"	 	r2   r  r   r&   N)r@   rI   )r  s    r/   test_third_party_estimatorr    s!    j  !  "r2   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   re   rV   rS   ri   N)r   r   ru   r   s    r/   test_interval_real_not_intr    s=    *a6:J%%c***))!,,,,r2   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.ri   re   N)
isinstancer   ra   float64int64r,   r2   r/   test_real_not_intr    sU    c:&&&!Z(((bjjmZ000"((1+z2222r2   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 rC   r,   rD   s    r/   r   z%test_skip_param_validation.<locals>.f  rJ   r2   The 'a' parameterrm   1rD   Nskip_parameter_validation)r$   r~   ro   rp   r   r   r   s    r/   test_skip_param_validationr    s}     cC5\F G 
,4G	H 	C 
$	7 	C 	  s   
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 rC   r,   rD   s    r/   r   z&test_skip_nested_validation.<locals>.f  rJ   r2   r&   c                      d      S )Ninvalid_param_valuerD   r,   )r&   r   s    r/   gz&test_skip_nested_validation.<locals>.g  s     ())r2   zThe 'b' parameterrm   r#  r  Nre   r  r   )r*   r$  r   s     @r/   test_skip_nested_validationr%    s     cC5\F G 	se&C*	*
 
,4G	H #	!"# %	A]]08KL 	F	 	# #	 	s   
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   rD   s    r/   r$  z9test_skip_nested_validation_and_config_context.<locals>.g  s     |788r2   r  re   N)r$   r~   r   )r  r*   expected_skippedr$  actual_skippeds        r/   .test_skip_nested_validation_and_config_contextr*    sa     	se4Q99 
2K	L 1 ---- s   	A  A	)r   )bnumbersr   r   numpyra   ro   scipy.sparser   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$   r0   r4   r@   markparametrizerZ   r_   rd   rh   	TypeErrorr   rs   ry   r}   r~   ndarrayr   r   r   r   r   r   r   rj   float32r  callabler   randomRandomStaterg   r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r%  r*  r,   r2   r/   <module>r;     s	   "   # 6 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	..q12		a	s		"	$	!T'"	$	%,'	"&&!	)$	E	JO,7@-A@- 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..r2   