
    ~je                        U d dl Zd dlZd dlZd dl mZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ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 	 d dlmZmZ n:# e$ r2 	 d dlmZmZ n%# e$ r  eddi           Z ed	di           ZY nw xY wY nw xY wd
dlm Z m!Z!m"Z" eegdf         Z# ed          Z$ ede%e&ef                   Z' e(            Z)edee$         dee$         fd            Z*eddde+deee$         gee$         f         fd            Z*d>dddee$         dz  de+dee$         eee$         gee$         f         z  fdZ*dee'         de%ddfdZ,edee'         defd            Z-dee'         de%e&ef         fdZ.eedddddfde/e#         e#z  deez  deg ef         ez  d e+d!e+d"e+dz  d#e+d$e%dz  d%edefd&Z0de#fd'Z1d(e&d)ed*eddfd+Z2d(e&d)eddfd,Z3d(e&d)ed-e4ed.f         ddfd/Z5d(e&d)ed-e4ed.f         ddfd0Z6d(e&d)ed-e4ed.f         ddfd1Z7d(e&d)ed-e4ed.f         ddfd2Z8d(e&d)ed-e4ed.f         ddfd3Z9d(e&d)ed-e4ed.f         ddfd4Z:d(e&d)ed-e4ed.f         ddfd5Z;d(e&d)ed*eddfd6Z<d7ede#fd8Z=dede+fd9Z>d:ede+fd;Z?ee5ee6e/e7e%e8e4e9e@e:ejA        jB        e;iZCe%eee&ee4ed.f         gdf         f         eDd<<   e5eCejE        <   g d=ZFdS )?    N)Callable)_MISSING_TYPEMISSINGFieldfieldfieldsmake_dataclass)	lru_cachewraps)
	AnnotatedAny
ForwardRefLiteralTypeTypeVarUnionget_args
get_originoverload)NotRequiredRequiredr    r      )#StrictDataclassClassValidationErrorStrictDataclassDefinitionError#StrictDataclassFieldValidationErrorTTypedDictType)boundclsreturnc                     d S Nr   )r    s    k/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/huggingface_hub/dataclasses.pystrictr%   0   s    %(S    Faccept_kwargsr(   c                     d S r#   r   r'   s    r$   r%   r%   4   s    LOCr&   c                v    dt           t                   dt           t                   ffd}|  ||           n|S )a  
    Decorator to add strict validation to a dataclass.

    This decorator must be used on top of `@dataclass` to ensure IDEs and static typing tools
    recognize the class as a dataclass.

    Can be used with or without arguments:
    - `@strict`
    - `@strict(accept_kwargs=True)`

    Args:
        cls:
            The class to convert to a strict dataclass.
        accept_kwargs (`bool`, *optional*):
            If True, allows arbitrary keyword arguments in `__init__`. Defaults to False.

    Returns:
        The enhanced dataclass with strict validation on field assignment.

    Example:
    ```py
    >>> from dataclasses import dataclass
    >>> from huggingface_hub.dataclasses import as_validated_field, strict, validated_field

    >>> @as_validated_field
    >>> def positive_int(value: int):
    ...     if not value >= 0:
    ...         raise ValueError(f"Value must be positive, got {value}")

    >>> @strict(accept_kwargs=True)
    ... @dataclass
    ... class User:
    ...     name: str
    ...     age: int = positive_int(default=10)

    # Initialize
    >>> User(name="John")
    User(name='John', age=10)

    # Extra kwargs are accepted
    >>> User(name="John", age=30, lastname="Doe")
    User(name='John', age=30, *lastname='Doe')

    # Invalid type => raises
    >>> User(name="John", age="30")
    huggingface_hub.errors.StrictDataclassFieldValidationError: Validation error for field 'age':
        TypeError: Field 'age' expected int, got str (value: '30')

    # Invalid value => raises
    >>> User(name="John", age=-1)
    huggingface_hub.errors.StrictDataclassFieldValidationError: Validation error for field 'age':
        ValueError: Value must be positive, got -1
    ```
    r    r!   c           	          t           d          st          d j         d          i }t                     D ]}g }|                    t          |                     |j                            d          }|\t          |t                    s|g}|D ],}t          |          st          d|j         d| d          -|                    |           |||j        <   | _         j        dt          d	t           d
t          dd ffd}| _        r j        }t%          |          dt          dd f fd            }| _        t           d          sdt          dd fd}	|	 _         j        t%                    dt           f fd            }
 j        j        du r|
 _        g }t/                     D ]}|                    d          st3           |          }t5          |          s8t7          t9          j        |          j                  dk    rt          d j         d| d          |                    |           | _        dt@          dd f fd}d|_!        t           d          r.t3           j"        dd          st          d j         d          | _"         j        t%                    d fd            }tG           d|            S )N__dataclass_fields__zClass 'z.' must be a dataclass before applying @strict.	validatorzInvalid validator for field '': z.. Must be a callable taking a single argument.selfnamevaluer!   c                     | j                             |g           D ]9}	  ||           # t          t          f$ r}t	          ||          |d}~ww xY w | ||           dS )z1Custom __setattr__ method for strict dataclasses.)r   causeN)__validators__get
ValueError	TypeErrorr   )r/   r0   r1   r-   eoriginal_setattrs        r$   __strict_setattr__z0strict.<locals>.wrap.<locals>.__strict_setattr__   s     "044T2>> Z Z	ZIe$$$$"I. Z Z Z=DPQRRRXYYZ T4/////s   ,AAAkwargsc                    d t          	          D             fd|                                D             }t          |          dk    r(t          d	j         dt          |           d          t          	          D ]}|j        |v r"t          | |j        ||j                            -|j        t          urt          | |j        |j                   W|j	        t          ur)t          | |j        |	                                           t          d|j         d          i }|                                D ]\  }}|vr|||<    | j        d	i | d S )
Nc                     h | ]	}|j         
S r   )r0   ).0fs     r$   	<setcomp>z9strict.<locals>.wrap.<locals>.__init__.<locals>.<setcomp>   s    #@#@#@qAF#@#@#@r&   c                 $    i | ]\  }}|v 	||S r   r   )r>   kvdataclass_fieldss      r$   
<dictcomp>z:strict.<locals>.wrap.<locals>.__init__.<locals>.<dictcomp>   s*    "\"\"\DAqaK[F[F[1aF[F[F[r&   r   zWhen `accept_kwargs=True`, z, accepts only keyword arguments, but found `z` positional args.zMissing required field - ''r   )r   itemslenr6   __name__r0   setattrdefaultr   default_factoryr7   __post_init__)
r/   argsr;   standard_kwargsr?   additional_kwargsr0   r1   rD   r    s
           @r$   __init__z&strict.<locals>.wrap.<locals>.__init__   s    $A#@F3KK#@#@#@ "\"\"\"\FLLNN"\"\"\ t99q==$Dcl D D&)$iiD D D  
   P PAv00afoaf.EFFFF'11afai8888*'99afa.?.?.A.ABBBB'(NQV(N(N(NOOO %'!#)<<>> 8 8KD%#33327)$/""77%677777r&   rM   c                 \    |                                 D ]\  }}t          | ||           dS )z2Default __post_init__ to accept additional kwargs.N)rG   rJ   )r/   r;   r0   r1   s       r$   rM   z+strict.<locals>.wrap.<locals>.__post_init__   s<    '-||~~ 3 3edE22223 3r&   c                      |           }fd| j                                         D             }d                    |          }|r|d d          d| dn|S )Nc                 8    g | ]\  }}|j         vd | d|S )*=)r,   )r>   rB   rC   r    s      r$   
<listcomp>z:strict.<locals>.wrap.<locals>.__repr__.<locals>.<listcomp>   sC     % % % 1 888 "MMAMM888r&   z, ))__dict__rG   join)r/   standard_reprrP   additional_reprr    original_reprs       r$   __repr__z&strict.<locals>.wrap.<locals>.__repr__   s     !.d 3 3% % % % !% 3 3 5 5% % %! #')),=">"> GXj-,BBBBBB]jjr&   T	validate_r   z' has a class validator 'z' that takes more than one argument. Class validators must take only 'self' as an argument. Methods starting with 'validate_' are considered to be class validators.c                     j         D ]>}	  ||            # t          t          f$ r}t          |j        |          |d}~ww xY wdS )z%Run class validators on the instance.)r-   r3   N)__class_validators__r6   r7   r   rI   )r/   r-   r8   r    s      r$   validatez&strict.<locals>.wrap.<locals>.validate   sz     5 l l	lIdOOOO"I. l l l=	HZbcdddjkkll ls   AA  Arc   "__is_defined_by_strict_decorator__Fz' already implements a method called 'validate'. This method name is reserved when using the @strict decorator on a dataclass. If you want to keep your own method, please rename it.c                 J     | g|R i |                      |            dS )z*Run class validators after initialization.N)rc   )r/   rN   r;   r    initial_inits      r$   init_with_validatez0strict.<locals>.wrap.<locals>.init_with_validate  s=     L///////LLr&   rQ   )r!   N)$hasattrr   rI   r   append_create_type_validatormetadatar5   
isinstancelist_is_validatorr0   extendr4   __setattr__r   strrQ   r   rM   r_   __dataclass_params__reprdir
startswithgetattrcallablerH   inspect	signature
parametersrb   r   rd   rc   rJ   )r    field_validatorsr?   
validatorscustom_validatorr-   r:   original_initrQ   rM   r_   class_validatorsr0   methodrc   rg   rf   r^   r9   r(   s   `               @@@r$   wrapzstrict.<locals>.wrapp   sS   s233 	0V#,VVV  
 :< 	2 	2AJ4Q77888 z~~k::+!"2D99 :(8'9$!1  I(33 < AAF  A  Ay  A  A  A   !!"2333'1QV$$- ?
	0S 
	0 
	0C 
	0D 
	0 
	0 
	0 
	0 
	0 
	0 - H	(LM=!! 8  8  8  8  8  8  8 "! 8D $CL 300 23# 3$ 3 3 3 3
 %2!  LM=!!k# k k k k k k "!k  ',44' HH 	, 	,D??;// S$''FF## 7$V,,788A==4>cl > >T > > >  
 ##F++++#3 	l1 	l 	l 	l 	l 	l 	l 	l 7;33
## 	3<)MuUU 4Ncl N N N     |	|			 	 	 	 	 	 
		
 	Z!3444
r&   )r   r   )r    r(   r   s    ` r$   r%   r%   8   sY    ph$q' hd1g h h h h h hV 44999T1r&   schemadatac                 4    t          |           } |di | dS )a  
    Validate that a dictionary conforms to the types defined in a TypedDict class.

    Under the hood, the typed dict is converted to a strict dataclass and validated using the `@strict` decorator.

    Args:
        schema (`type[TypedDictType]`):
            The TypedDict class defining the expected structure and types.
        data (`dict`):
            The dictionary to validate.

    Raises:
        `StrictDataclassFieldValidationError`:
            If any field in the dictionary does not conform to the expected type.

    Example:
    ```py
    >>> from typing import Annotated, TypedDict
    >>> from huggingface_hub.dataclasses import validate_typed_dict

    >>> def positive_int(value: int):
    ...     if not value >= 0:
    ...         raise ValueError(f"Value must be positive, got {value}")

    >>> class User(TypedDict):
    ...     name: str
    ...     age: Annotated[int, positive_int]

    >>> # Valid data
    >>> validate_typed_dict(User, {"name": "John", "age": 30})

    >>> # Invalid type for age
    >>> validate_typed_dict(User, {"name": "John", "age": "30"})
    huggingface_hub.errors.StrictDataclassFieldValidationError: Validation error for field 'age':
        TypeError: Field 'age' expected int, got str (value: '30')

    >>> # Invalid value for age
    >>> validate_typed_dict(User, {"name": "John", "age": -1})
    huggingface_hub.errors.StrictDataclassFieldValidationError: Validation error for field 'age':
        ValueError: Value must be positive, got -1
    ```
    Nr   )!_build_strict_cls_from_typed_dict)r   r   
strict_clss      r$   validate_typed_dictr     s0    X 36::J Jr&   c                    t          |           }t          | dd          s|                                D ]\  }}t          |          }|t          u r\t          |          ^}}t          |          st          |         }t          t          |gt          |          z                      ||<   yt          |          st          |         ||<   g }|                                D ]\  }}t          |          t          u rAt          |          ^}} |j
        ||t          t          d|d         i          f           \ |j
        ||t          t                    f           t          t          | j        |                    S )N	__total__Tr-   r   )rK   rk   )rK   )_get_typed_dict_annotationsrv   rG   r   r   r   _is_required_or_notrequiredr   tuplerm   ri   r   _TYPED_DICT_DEFAULT_VALUEr%   r	   rI   )r   
type_hintskeyr1   originbasemetar   s           r$   r   r   P  s    -V44J 6;-- 
5$**,, 		5 		5JC&&F""&uoot2488 -&t,D"+E4&4::2E,F,F"G
3077 5"-e"4
3 F &&(( R R
Ue	))"5//KD4FM3e4MYdfjklfmXn&o&o&opqqqqFM3u5N'O'O'OPQQQQ .&99:::r&   c                     	 ddl }|                    |           S # t          $ r: d | j                            di                                           D             cY S w xY w)z0Extract type annotations from a TypedDict class.r   Nc                 <    i | ]\  }}|||nt          d           S r#   )type)r>   r0   r1   s      r$   rE   z/_get_typed_dict_annotations.<locals>.<dictcomp>w  s?     
 
 
 e 5,%%$t**
 
 
r&   __annotations__)annotationlibget_annotationsImportErrorrZ   r5   rG   )r   r   s     r$   r   r   o  s    
,,V444 
 
 

 
  &223DbIIOOQQ	
 
 
 	
 	
 	

s    AAATr-   rK   rL   initrs   hashcomparerk   r;   c                 l    t          | t                    s| g} |i }| |d<   t          d|||||||d|S )a<  
    Create a dataclass field with a custom validator.

    Useful to apply several checks to a field. If only applying one rule, check out the [`as_validated_field`] decorator.

    Args:
        validator (`Callable` or `list[Callable]`):
            A method that takes a value as input and raises ValueError/TypeError if the value is invalid.
            Can be a list of validators to apply multiple checks.
        **kwargs:
            Additional arguments to pass to `dataclasses.field()`.

    Returns:
        A field with the validator attached in metadata
    Nr-   rK   rL   r   rs   r   r   rk   r   )rl   rm   r   )	r-   rK   rL   r   rs   r   r   rk   r;   s	            r$   validated_fieldr     sm    4 i&&  K	%H[ 	'	 	 	 	 	r&   c                      t           t           dddddfdt          t          z  dt          g t          f         t          z  dt          dt          dt          dz  dt          d	t
          dz  d
t          f fd}|S )a  
    Decorates a validator function as a [`validated_field`] (i.e. a dataclass field with a custom validator).

    Args:
        validator (`Callable`):
            A method that takes a value as input and raises ValueError/TypeError if the value is invalid.
    TNrK   rL   r   rs   r   r   rk   r;   c                 .    t          f| ||||||d|S )Nr   )r   )	rK   rL   r   rs   r   r   rk   r;   r-   s	           r$   _innerz"as_validated_field.<locals>._inner  sC     

+

 

 

 

 
	
r&   )r   r   r   r   booldict)r-   r   s   ` r$   as_validated_fieldr     s     (/=D  $
 
}$
!"c'*]:
 
 	

 Tk
 
 +
 
 
 
 
 
 
, Mr&   r0   r1   expected_typec                 z   t          |          }t          |          }|t          u rdS |t          | |           dS t                              |          x}r || ||           dS t          |t                    rt          | ||           dS t          |t                    st          |t                    rdS |t          u r5|t          u rt          d|  d          t          | ||d                    dS |t          u r$|t          u rdS t          | ||d                    dS t          d|  d|           )z.Validate that 'value' matches 'expected_type'.NField 'z' is required but missing.r   zUnsupported type for field 'r.   )r   r   r   _validate_none_BASIC_TYPE_VALIDATORSr5   rl   r   _validate_simple_typer   rq   r   r   r7   type_validatorr   )r0   r1   r   r   rN   r-   s         r$   r   r     sw   &&FM""D		tU#####,0088	8 Q	$t$$$$$	M4	(	( QdE=99999	M:	.	. Q*]C2P2P Q	8		---FdFFFGGGtUDG,,,,,	;		---FtUDG,,,,,OtOOOOPPPr&   c                 X    |'t          d|  dt          |          j                   dS )zValidate None type.

    'None' is not a type, it's a special value. Type should be `NoneType` instead.
    But in type annotations 'None' is accepted so we must support it.
    Nr   z' expected None, got )r7   r   rI   )r0   r1   s     r$   r   r     s:     S$SST%[[=QSSTTT r&   rN   .c                     g }|D ]O}	 t          | ||            dS # t          $ r,}|                    t          |                     Y d}~Hd}~ww xY wt          d|  dt	          |           d| dd                    |                     )z8Validate that value matches one of the types in a Union.Nr   z' with value z doesn't match any type in z
. Errors: z; )r   r7   ri   rq   rs   r[   )r0   r1   rN   errorstr8   s         r$   _validate_unionr     s    F " "	"4***FF 	" 	" 	"MM#a&&!!!!!!!!	" p$ppT%[[ppTpp]a]f]fgm]n]npp  s   
A"AAc                 2   t          |t                    r(|d |D             vrt          d|  d| d|           dS t          |t                    r(|d |D             vrt          d|  d| d|           dS ||vrt          d|  d| d|           dS )zValidate Literal type.c                 <    g | ]}t          |t                    |S r   )rl   r   r>   args     r$   rW   z%_validate_literal.<locals>.<listcomp>  s'    FFF
30E0EFFFFr&   r   z' expected one of , got c                 f    g | ].}t          |t                    t          |t                    ,|/S r   )rl   intr   r   s     r$   rW   z%_validate_literal.<locals>.<listcomp>  s8    ccc
30D0DcZX[]aMbMbccccr&   N)rl   r   r7   r   )r0   r1   rN   s      r$   _validate_literalr      s    % OFFFFFFFQdQQdQQ%QQRRR GF	E3		 OcccccccQdQQdQQ%QQRRR dc	d		M$MM$MMeMMNNN 
	r&   c           	      :   t          |t                    s't          d|  dt          |          j                   |d         }t          |          D ]F\  }}	 t          |  d| d||           # t          $ r}t          d| d|  d          |d	}~ww xY wd	S )
zValidate list[T] type.r   z' expected a list, got r   []Invalid item at index z
 in list 'rF   N)rl   rm   r7   r   rI   	enumerater   r0   r1   rN   	item_typeiitemr8   s          r$   _validate_listr     s    eT"" WU$UUtE{{?SUUVVV QIU## R R4	Rd>>Q>>>4;;;; 	R 	R 	RIQII$IIIJJPQQ	RR Rs   A22
B<BBc                 `   t          |t                    s't          d|  dt          |          j                   |\  }}|                                D ]W\  }}	 t          |  d||           t          |  d|d||           2# t          $ r}t          d|  d          |d}~ww xY wdS )	zValidate dict[K, V] type.r   z' expected a dict, got z.keyr   r   zInvalid key or value in dict 'rF   N)rl   r   r7   r   rI   rG   r   )r0   r1   rN   key_type
value_typerB   rC   r8   s           r$   _validate_dictr     s    eT"" WU$UUtE{{?SUUVVV  Hj M M1	Md===!X666d++Q+++Q
;;;; 	M 	M 	MDTDDDEE1L	M	M Ms   +B
B+B&&B+c           
         t          |t                    s't          d|  dt          |          j                   t          |          dk    rm|d         t          u r^t          |          D ]L\  }}	 t          |  d| d||d                    $# t          $ r}t          d| d	|  d
          |d}~ww xY wdS t          |          t          |          k    r2t          d|  dt          |           dt          |                     t          t          ||                    D ]I\  }\  }}	 t          |  d| d||           !# t          $ r}t          d| d	|  d
          |d}~ww xY wdS )zValidate Tuple type.r   z' expected a tuple, got    r   r   r   r   r   z in tuple 'rF   Nz' expected a tuple of length r   )
rl   r   r7   r   rI   rH   Ellipsisr   r   zip)r0   r1   rN   r   r   r8   expecteds          r$   _validate_tupler   )  s   eU## XV$VVU@TVVWWW 4yyA~~$q'X-- '' 	W 	WGAtW$~~~~~tT!W==== W W W N N Nt N N NOOUVVW	W 	W 
Tc%jj	 	 b$bbSYYbbVYZ_V`V`bbccc#,S-=-=#>#> 	W 	WAhW$~~~~~tX>>>> W W W N N Nt N N NOOUVVW	W 	Ws0   4B
B8B33B85E
E3E..E3c                 .   t          |t                    s't          d|  dt          |          j                   |d         }t          |          D ]@\  }}	 t          |  d||           # t          $ r}t          d|  d          |d}~ww xY wdS )zValidate set[T] type.r   z' expected a set, got r   z itemzInvalid item in set 'rF   N)rl   setr7   r   rI   r   r   r   s          r$   _validate_setr   @  s    eS!! VT$TTd5kk>RTTUUU QIU## D D4	Dd>>>4;;;; 	D 	D 	D;D;;;<<!C	DD Ds   A//
B9BBc           	      V   t          |t          j        j                  s't	          d|  dt          |          j                   |sdS |d         }t          |          D ]F\  }}	 t          |  d| d||           # t          $ r}t	          d| d|  d	          |d}~ww xY wdS )
z&Validate Sequence or Sequence[T] type.r   z' expected a Sequence, got Nr   r   r   r   z in sequence 'rF   )	rl   collectionsabcSequencer7   r   rI   r   r   r   s          r$   _validate_sequencer   N  s    e[_566 [Y$YY4;;CWYYZZZ   QIU## V V4	Vd>>Q>>>4;;;; 	V 	V 	VMQMMdMMMNNTUU	VV Vs   (B  
B&
B!!B&c                 b   |t           u rUt          |t                    r@t          d|  d|j         dt          |          j         dt          |           d	          t          ||          s@t          d|  d|j         dt          |          j         dt          |           d	          dS )z&Validate simple type (int, str, etc.).r   z' expected r   z	 (value: rY   N)r   rl   r   r7   rI   r   rs   )r0   r1   r   s      r$   r   r   `  s    
5$ 7 7rdrr}'=rrT%[[EYrrdhindodorrr
 
 	
 e]++ 
rdrr}'=rrT%[[EYrrdhindodorrr
 
 	

 
r&   r   c                 &     dt           ddf fd}|S )z-Create a type validator function for a field.r1   r!   Nc                 >    t          j        | j                   d S r#   )r   r0   r   )r1   r   s    r$   r-   z)_create_type_validator.<locals>.validatorp  s    uz5%*55555r&   )r   )r   r-   s   ` r$   rj   rj   l  s7    6 6 6 6 6 6 6 6 r&   c                    t          |           sdS t          j        |           }t          |j                                                  }t          |          dk    rdS |d         j        t          j        j	        t          j        j
        t          j        j        fvrdS |dd         D ]}|j        t          j        j        k    r dS  dS )zCheck if a function is a validator.

    A validator is a Callable that can be called with a single positional argument.
    The validator can have more arguments with default values.

    Basically, returns True if `validator(value)` is possible.
    Fr   r   NT)rw   rx   ry   rm   rz   valuesrH   kind	ParameterPOSITIONAL_OR_KEYWORDPOSITIONAL_ONLYVAR_POSITIONALrK   empty)r-   ry   rz   	parameters       r$   rn   rn   v  s     I u!),,Ii*113344J
:!u!}/)("  
 u^  	 1 77755 84r&   	type_hintc                 \    | t           t          fv pt          |           t           t          fv S )z2Helper to check if a type is Required/NotRequired.)r   r   r   )r   s    r$   r   r     s*    ;//eJy4I4IhXcMd4der&   r   )r%   r   r   Validator_Tr   r   r   r#   )Gcollections.abcr   rx   typesr   dataclassesr   r   r   r   r   r	   	functoolsr
   r   typingr   r   r   r   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   r   r   r   r   r   r   rq   r   objectr   r%   r   r   r   r   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   rj   rn   r   r   r   r   r   r   	UnionType__all__r   r&   r$   <module>r      s          $ $ $ $ $ $ T T T T T T T T T T T T T T T T & & & & & & & &                       
2,,,,,,,,, 2 2 22;;;;;;;;; 2 2 24
B++d="b112	2          ud{#GCLLtCH~>>>"FHH  
 (Q (DG ( ( ( 
 ( 
$) O O OT OhQy$q'7I.J O O O 
 Oc2 c2 c2 c2Q$ c2 c2$q'T\^bcd^e]fhlmnho]oTpJp c2 c2 c2 c2L/] 3 /4 /D / / / /d ;d=.A ;d ; ; ; ;<
](; 
S#X 
 
 
 
$ $+9@ ( (K ;.(= ( b#g&6( 	(
 ( +( ( Tk( ( 	( ( ( (V+    DQ QS Q Q Q Q Q Q6U US UT U U U U# c sCx T    	OC 	O 	O5c? 	Ot 	O 	O 	O 	OR RS Rc3h RD R R R RM MS Mc3h MD M M M MW# Wc WsCx WT W W W W.D DC DuS#X D4 D D D DVS V VE#s(O V V V V V$	
 	
C 	
 	
 	
 	
 	
 	
% K    S T    6f3 f4 f f f f 
?..	?O0R S(CeCHo+F+L"MMN    +: u '  s6   A BABA?<B>A??BB