
    5P@i`                       U d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	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 d dlmZ d d	lmZmZmZmZ d d
lm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z( d dl)m*Z* erd dl+m,Z, eee-eeee-f      eeee-f   df   f   Z. ed      Z/de0d<    G d de1      Z2 G d de      Z3 G d de3      Z4 G d de3      Z5 G d de5      Z6 G d de5      Z7 G d  d!e7      Z8dd"d#	 	 	 	 	 	 	 d'd$Z9d(d%Z:d)d&Z;y)*    )annotationsN)ABCabstractmethod)deque)is_dataclass)Path)TYPE_CHECKINGAnyListMappingSequenceTupleUnioncast)dotenv_values)AliasChoices	AliasPath	BaseModelJson)origin_is_union)deep_updatelenient_issubclass)	FieldInfo)get_args
get_origin)path_type_label)BaseSettings. 
DotenvTypeENV_FILE_SENTINELc                      e Zd Zy)SettingsErrorN)__name__
__module____qualname__     c/home/www/lebenam.kofcorporation.com/venv/lib/python3.12/site-packages/pydantic_settings/sources.pyr"   r"   !   s    r'   r"   c                  T    e Zd ZdZd	dZed
d       ZddZddZddZ	edd       Z
y)PydanticBaseSettingsSourcezi
    Abstract base class for settings sources, every settings source classes should inherit from it.
    c                4    || _         |j                  | _        y N)settings_clsmodel_configconfig)selfr-   s     r(   __init__z#PydanticBaseSettingsSource.__init__*   s    ("//r'   c                     y)a  
        Gets the value, the key for model creation, and a flag to determine whether value is complex.

        This is an abstract method that should be overridden in every settings source classes.

        Args:
            field: The field.
            field_name: The field name.

        Returns:
            A tuple contains the key, value and a flag to determine whether value is complex.
        Nr&   r0   field
field_names      r(   get_field_valuez*PydanticBaseSettingsSource.get_field_value.   s     	r'   c                B    t        |j                  |j                        S )z
        Checks whether a field is complex, in which case it will attempt to be parsed as JSON.

        Args:
            field: The field.

        Returns:
            Whether the field is complex.
        )_annotation_is_complex
annotationmetadata)r0   r4   s     r(   field_is_complexz+PydanticBaseSettingsSource.field_is_complex>   s     &e&6&6GGr'   c                V    |&| j                  |      s|r| j                  |||      S |S )aF  
        Prepares the value of a field.

        Args:
            field_name: The field name.
            field: The field.
            value: The value of the field that has to be prepared.
            value_is_complex: A flag to determine whether value is complex.

        Returns:
            The prepared value.
        )r;   decode_complex_value)r0   r5   r4   valuevalue_is_complexs        r(   prepare_field_valuez.PydanticBaseSettingsSource.prepare_field_valueJ   s4     $"7"7">BR,,ZFFr'   c                ,    t        j                  |      S )a  
        Decode the value for a complex field

        Args:
            field_name: The field name.
            field: The field.
            value: The value of the field that has to be prepared.

        Returns:
            The decoded value for further preparation
        )jsonloads)r0   r5   r4   r>   s       r(   r=   z/PydanticBaseSettingsSource.decode_complex_value[   s     zz%  r'   c                     y r,   r&   r0   s    r(   __call__z#PydanticBaseSettingsSource.__call__i   s    r'   N)r-   type[BaseSettings]r4   r   r5   strreturnztuple[Any, str, bool])r4   r   rJ   bool
r5   rI   r4   r   r>   r
   r?   rK   rJ   r
   )r5   rI   r4   r   r>   r
   rJ   r
   rJ   dict[str, Any])r#   r$   r%   __doc__r1   r   r6   r;   r@   r=   rF   r&   r'   r(   r*   r*   %   sD    0  
H"!  r'   r*   c                  <     e Zd ZdZd fdZddZddZd	dZ xZS )
InitSettingsSourcezX
    Source class for loading values provided during settings class initialization.
    c                2    || _         t        | 	  |       y r,   )init_kwargssuperr1   )r0   r-   rS   	__class__s      r(   r1   zInitSettingsSource.__init__s   s    &&r'   c                     y)N)Nr   Fr&   r3   s      r(   r6   z"InitSettingsSource.get_field_valuew   s    r'   c                    | j                   S r,   rS   rE   s    r(   rF   zInitSettingsSource.__call__{   s    r'   c                "    d| j                   dS )NzInitSettingsSource(init_kwargs=)rX   rE   s    r(   __repr__zInitSettingsSource.__repr__~   s    01A1A0DAFFr'   )r-   rG   rS   rN   rH   rM   rJ   rI   )	r#   r$   r%   rO   r1   r6   rF   r[   __classcell__rU   s   @r(   rQ   rQ   n   s    ' Gr'   rQ   c                  R     e Zd Z	 d	 	 	 	 	 	 	 d fdZddZd	dZd
dZddZ xZS )PydanticBaseEnvSettingsSourcec                    t         |   |       ||n| j                  j                  dd      | _        ||| _        y | j                  j                  dd      | _        y )Ncase_sensitiveF
env_prefixr   )rT   r1   r/   getrb   rc   )r0   r-   rb   rc   rU   s       r(   r1   z&PydanticBaseEnvSettingsSource.__init__   sZ     	&0>0JnPTP[P[P_P_`prwPx(2(>*DKKOOT`bdDer'   c                >    | j                   s|j                         S |S r,   )rb   lower)r0   r>   s     r(   _apply_case_sensitivez3PydanticBaseEnvSettingsSource._apply_case_sensitive   s    $($7$7u{{}BUBr'   c                   g }t        |j                  t        t        f      r|j                  j	                         }n|j                  }|rt        |t
              r|D ]  }t        |t              r4|j                  || j                  |      t        |      dkD  rdndf       Gt        |t
              sXt        t        |d         }|j                  || j                  |      t        |      dkD  rdndf        |S |j                  || j                  |      df       |S |j                  || j                  | j                  |z         df       |S )a  
        Extracts field info. This info is used to get the value of field from environment variables.

        It returns a list of tuples, each tuple contains:
            * field_key: The key of field that has to be used in model creation.
            * env_name: The environment variable name of the field.
            * value_is_complex: A flag to determine whether the value from environment variable
              is complex and has to be parsed.

        Args:
            field (FieldInfo): The field.
            field_name (str): The field name.

        Returns:
            list[tuple[str, str, bool]]: List of tuples, each tuple contains field_key, env_name, and value_is_complex.
           TFr   )
isinstancevalidation_aliasr   r   convert_to_aliaseslistrI   appendrg   lenr   rc   )r0   r4   r5   
field_infov_aliasalias	first_args          r(   _extract_field_infoz1PydanticBaseEnvSettingsSource._extract_field_info   sK   " 35
e,,|Y.GHLQLbLbLuLuLwG,,G'4($ E!%-"))5$2L2LU2S]`af]gjk]kUYqv*wx#E40$(eAh$7	"))&(B(B9(MWZ[`WadeWetkpq 	 !!7D,F,Fw,OQV"WX  z4+E+EdooXbFb+cejklr'   c                   i }|j                         D ]  \  }}d}|j                  rt        |j                  d      s|||<   0|j                  j                  j                         D ]7  \  }}|j                  r|j                         |j                         k(  s5|} n |s|||<   t        |j                  t              r&t        |t              r| j                  ||      |<   ||<    |S )ae  
        Replace field names in values dict by looking in models fields insensitively.

        By having the following models:

            ```py
            class SubSubSub(BaseModel):
                VaL3: str

            class SubSub(BaseModel):
                Val2: str
                SUB_sub_SuB: SubSubSub

            class Sub(BaseModel):
                VAL1: str
                SUB_sub: SubSub

            class Settings(BaseSettings):
                nested: Sub

                model_config = SettingsConfigDict(env_nested_delimiter='__')
            ```

        Then:
            _replace_field_names_case_insensitively(
                field,
                {"val1": "v1", "sub_SUB": {"VAL2": "v2", "sub_SUB_sUb": {"vAl3": "v3"}}}
            )
            Returns {'VAL1': 'v1', 'SUB_sub': {'Val2': 'v2', 'SUB_sub_SuB': {'VaL3': 'v3'}}}
        Nmodel_fields)itemsr9   hasattrrv   rk   rf   r   r   rj   dict'_replace_field_names_case_insensitively)	r0   r4   field_valuesvaluesnamer>   sub_model_fieldsub_model_field_namefs	            r(   rz   zEPydanticBaseEnvSettingsSource._replace_field_names_case_insensitively   s    > "$'--/ 	5KD%04O ##753C3C^+T$t ,1+;+;+H+H+N+N+P '$a)).B.H.H.Jdjjl.Z&'O
 #$t!/"<"<iHZX]_cMd/3/[/[\kmr/s+,/4+,-	50 r'   c           	     B   i }| j                   j                  j                         D ]  \  }}	 | j                  ||      \  }}}	 | j                  ||||      }|5| j                  s@t        |j                  t              r&t        |t              r| j!                  ||      ||<   |||<    |S # t        $ r,}t        d| d| j                  j                   d      |d }~ww xY w# t        $ r,}t        d| d| j                  j                   d      |d }~ww xY w)Nzerror getting value for field "z" from source ""zerror parsing value for field ")r-   rv   rw   r6   	Exceptionr"   rU   r#   r@   
ValueErrorrb   r   r9   r   rj   ry   rz   )r0   datar5   r4   field_value	field_keyr?   es           r(   rF   z&PydanticBaseEnvSettingsSource.__call__   sE   !!%!2!2!?!?!E!E!G 	2J;?;O;OPUWa;b8Y(8"66z5+Wgh &++*5+;+;YG";5&*&R&RSXZe&fDO&1DO/	22 -  #5j\QUQ_Q_QhQhPiijk  #5j\QUQ_Q_QhQhPiijks/   B1C)1	C&:'C!!C&)	D2'DD)NN)r-   rG   rb   bool | Nonerc   
str | NonerJ   None)r>   rI   rJ   rI   )r4   r   r5   rI   rJ   zlist[tuple[str, str, bool]])r4   r   r{   rN   rJ   rN   rM   )	r#   r$   r%   r1   rg   rt   rz   rF   r]   r^   s   @r(   r`   r`      sG    mqf.f@Kf`jf	fC&P9vr'   r`   c                  l     e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 d fdZd	 fdZed
d       ZddZddZ	 xZ
S )SecretsSettingsSourcezE
    Source class for loading settings values from secret files.
    c                |    t         |   |||       ||| _        y | j                  j                  d      | _        y )Nsecrets_dir)rT   r1   r/   rd   r   )r0   r-   r   rb   rc   rU   s        r(   r1   zSecretsSettingsSource.__init__  s8     	~zB*5*A;t{{WdGer'   c                   i }| j                   |S t        | j                         j                         | _        | j                  j	                         s%t        j                  d| j                   d       |S | j                  j                         s!t        dt        | j                               t        | -         S )z4
        Build fields from "secrets" files.
        zdirectory "z" does not existz.secrets_dir must reference a directory, not a )r   r   
expandusersecrets_pathexistswarningswarnis_dirr"   r   rT   rF   )r0   secretsrU   s     r(   rF   zSecretsSettingsSource.__call__  s     *,#N !1!12==?  '')MMK(9(9'::JKLN  '')"PQ`aeararQsPt uvvw!!r'   c                    |j                         D ]G  }|j                  |k(  r|c S |r|j                  j                         |j                         k(  sE|c S  y)af  
        Find a file within path's directory matching filename, optionally ignoring case.

        Args:
            dir_path: Directory path.
            file_name: File name.
            case_sensitive: Whether to search for file name case sensitively.

        Returns:
            Whether file path or `None` if file does not exist in directory.
        N)iterdirr}   rf   )clsdir_path	file_namerb   r   s        r(   find_case_pathz$SecretsSettingsSource.find_case_path2  sR     !!# 	Avv"#)//:K(K		
 r'   c           	     J   | j                  ||      D ]  \  }}}| j                  | j                  || j                        }|s1|j	                         r#|j                         j                         ||fc S t        j                  d| dt        |       dd        dfS )ag  
        Gets the value for field from secret file and a flag to determine whether value is complex.

        Args:
            field: The field.
            field_name: The field name.

        Returns:
            A tuple contains the key, value if the file exists otherwise `None`, and
                a flag to determine whether value is complex.
        zattempted to load secret file "z" but found a z	 instead.   )
stacklevelN)
rt   r   r   rb   is_file	read_textstripr   r   r   )r0   r4   r5   r   env_namer?   paths          r(   r6   z%SecretsSettingsSource.get_field_valueF  s     6:5M5MeU_5` 	1Ix!1&&t'8'8(DDWDWXD||~~~'--/<LLL5dV>/Z^J_I``ij 	 Y 000r'   c                "    d| j                   dS )Nz"SecretsSettingsSource(secrets_dir=rZ   )r   rE   s    r(   r[   zSecretsSettingsSource.__repr__c  s    3D4D4D3GqIIr'   NNN)
r-   rG   r   zstr | Path | Nonerb   r   rc   r   rJ   r   rM   )r   r   r   rI   rb   rK   rJ   zPath | NonerH   r\   )r#   r$   r%   rO   r1   rF   classmethodr   r6   r[   r]   r^   s   @r(   r   r     sr     *.&*!%f(f 'f $	f
 f 
f"(  &1:Jr'   r   c                       e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 d fdZddZddZddZddZddZ	e
dd       Zdd	Zdd
Z xZS )EnvSettingsSourcezN
    Source class for loading settings values from environment variables.
    c                    t         |   |||       ||n| j                  j                  d      | _        t        | j                        | _        | j                         | _	        y )Nenv_nested_delimiter)
rT   r1   r/   rd   r   ro   rc   env_prefix_len_load_env_varsenv_vars)r0   r-   rb   rc   r   rU   s        r(   r1   zEnvSettingsSource.__init__l  sZ     	~zB$8$D $++//ZpJq 	! "$//2++-r'   c                    | j                   rt        j                  S t        j                  j                         D ci c]  \  }}|j	                         | c}}S c c}}w r,   )rb   osenvironrw   rf   )r0   kvs      r(   r   z EnvSettingsSource._load_env_vars{  sD    ::)+)9)9);<A	1<<<s   Ac                    d}| j                  ||      D ]%  \  }}}| j                  j                  |      }|% n |fS )aq  
        Gets the value for field from environment variables and a flag to determine whether value is complex.

        Args:
            field: The field.
            field_name: The field name.

        Returns:
            A tuple contains the key, value if the file exists otherwise `None`, and
                a flag to determine whether value is complex.
        N)rt   r   rd   )r0   r4   r5   env_valr   r   r?   s          r(   r6   z!EnvSettingsSource.get_field_value  s[     #595M5MeU_5` 	1Ix!1mm''1G"	
 	#333r'   c                R   | j                  |      \  }}|s|rq|!| j                  ||| j                        }|rO|S 	 | j                  |||      }t        |t              r't        || j                  ||| j                              S |S y||S y# t        $ r}|s|Y d}~Qd}~ww xY w)a  
        Prepare value for the field.

        * Extract value for nested field.
        * Deserialize value to python object for complex field.

        Args:
            field: The field.
            field_name: The field name.

        Returns:
            A tuple contains prepared value for the field.

        Raises:
            ValuesError: When There is an error in deserializing value for complex field.
        N)_field_is_complexexplode_env_varsr   r=   r   rj   ry   r   )	r0   r5   r4   r>   r?   
is_complexallow_parse_failureenv_val_builtr   s	            r(   r@   z%EnvSettingsSource.prepare_field_value  s    " +/*@*@*G'
')} $ 5 5j% W ((  55j%OE
 eT*&ud.C.CJPUW[WdWd.eff L ! L  "  . / s   B 	B&B!!B&c                >    t        fdt        |      D              S )Nc              3  6   K   | ]  }t        |        y wr,   )r8   ).0argr:   s     r(   	<genexpr>z6EnvSettingsSource._union_is_complex.<locals>.<genexpr>  s     YS)#x8Ys   )anyr   )r0   r9   r:   s     `r(   _union_is_complexz#EnvSettingsSource._union_is_complex  s    YHZDXYYYr'   c                    | j                  |      rd}d|fS t        t        |j                              r,| j	                  |j                  |j
                        rd}d|fS y)za
        Find out if a field is complex, and if so whether JSON errors should be ignored
        FT)FF)r;   r   r   r9   r   r:   )r0   r4   r   s      r(   r   z#EnvSettingsSource._field_is_complex  sq       '"' ((( Z(8(89:t?U?UV[VfVfhmhvhv?w"& (((  r'   c                   | rt        t        | j                              ry| j                  rTt        | j                  d      r>| j                  j                  j                  |      r| j                  j                  |   S y)a  
        Find the field in a sub model by key(env name)

        By having the following models:

            ```py
            class SubSubModel(BaseSettings):
                dvals: Dict

            class SubModel(BaseSettings):
                vals: list[str]
                sub_sub_model: SubSubModel

            class Cfg(BaseSettings):
                sub_model: SubModel
            ```

        Then:
            next_field(sub_model, 'vals') Returns the `vals` field of `SubModel` class
            next_field(sub_model, 'sub_sub_model') Returns `sub_sub_model` field of `SubModel` class

        Args:
            field: The field.
            key: The key (env name).

        Returns:
            Field if it finds the next field otherwise `None`.
        Nrv   )r   r   r9   rx   rv   rd   )r4   keys     r(   
next_fieldzEnvSettingsSource.next_field  si    < 
53C3C(DE'%*:*:N"KPUP`P`PmPmPqPqruPv##0055r'   c                P   | j                  ||      D cg c]  \  }}}| | j                    }}}i }|j                         D ]  \  }t        fd|D              s| j                  d }	|	j                  | j                        ^}}
}|}|}|
D ]&  }| j                  ||      }|j                  |i       }( | j                  ||      }|r,|r*| j                  |      \  }}|r	 | j                  |||      }|||<    |S c c}}w # t        $ r}|s|Y d}~!d}~ww xY w)a  
        Process env_vars and extract the values of keys containing env_nested_delimiter into nested dictionaries.

        This is applied to a single field, hence filtering by env_var prefix.

        Args:
            field_name: The field name.
            field: The field.
            env_vars: Environment variables.

        Returns:
            A dictionaty contains extracted values from nested env values.
        c              3  @   K   | ]  }j                  |        y wr,   )
startswith)r   prefixr   s     r(   r   z5EnvSettingsSource.explode_env_vars.<locals>.<genexpr>  s     Jvx**62Js   N)rt   r   rw   r   r   splitr   
setdefaultr   r=   r   )r0   r5   r4   r   _r   prefixesresultr   env_name_without_prefixkeyslast_keyenv_vartarget_fieldr   r   allow_json_failurer   s        `            r(   r   z"EnvSettingsSource.explode_env_vars  sh    LPKcKcdikuKv
9GHaxj2234
 
 "$!)!1 	(HgJJJ&.t/B/B/D&E#!8!>!>t?X?X!YAhG-2L 6#|SA!,,S"56
  ??<BL 151G1G1U.
.$"&";";HlT["\ !(GH1	(4 =
2 & $1"#G  2$s   D,D	D%D  D%c                <    d| j                   d| j                  dS )Nz'EnvSettingsSource(env_nested_delimiter=, env_prefix_len=rZ   )r   r   rE   s    r(   r[   zEnvSettingsSource.__repr__!  s.    5d6O6O5R S"114A7	
r'   r   )
r-   rG   rb   r   rc   r   r   r   rJ   r   rJ   Mapping[str, str | None]rH   rL   r9   type[Any] | Noner:   z	list[Any]rJ   rK   )r4   r   rJ   ztuple[bool, bool])r4   FieldInfo | Noner   rI   rJ   r   )r5   rI   r4   r   r   r   rJ   rN   r\   )r#   r$   r%   rO   r1   r   r6   r@   r   r   staticmethodr   r   r[   r]   r^   s   @r(   r   r   g  s     '+!%+/.(. $. 	.
 ). 
.=
4*&PZ) # #J,\
r'   r   c                  n     e Zd ZdZeddddf	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZd	dZd
dZd fdZddZ	 xZ
S )DotEnvSettingsSourcezB
    Source class for loading settings values from env files.
    Nc                    |t         k7  r|n|j                  j                  d      | _        ||n|j                  j                  d      | _        t
        |   ||||       y )Nenv_fileenv_file_encoding)r    r.   rd   r   r   rT   r1   )r0   r-   r   r   rb   rc   r   rU   s          r(   r1   zDotEnvSettingsSource.__init__-  sc     %-0A$A|G`G`GdGdeoGp!2!>LD]D]DaDabuDv 	 	~zCWXr'   c                8    | j                  | j                        S r,   )_read_env_filesrb   rE   s    r(   r   z#DotEnvSettingsSource._load_env_vars<  s    ##D$7$788r'   c                    | j                   }|i S t        |t        t        j                  f      r|g}i }|D ]S  }t        |      j                         }|j                         s-|j                  t        || j                  |             U |S )Nencodingrb   )r   rj   rI   r   PathLiker   r   r   updateread_env_filer   )r0   rb   	env_filesdotenv_varsr   env_paths         r(   r   z$DotEnvSettingsSource._read_env_files?  s    MM	Ii#r{{!34"I-/! 	HH~002H!""!(T5K5K\jk	 r'   c                   t         	|          }g }| j                  s+|j                         D cg c]  }|j	                          }}| j
                  j                         D ]c  \  }}|j                  | j                        s"|%|| j                  d  }|j                  | j                        ^}}|r||vs|rZ||vs_|||<   e |S c c}w r,   )rT   rF   rb   r   rf   r   rw   r   rc   r   r   r   )
r0   r   data_lower_keysxr   	env_valuer   	first_keyr   rU   s
            r(   rF   zDotEnvSettingsSource.__call__Q  s    $w/1%'""26))+>Qqwwy>O> $(==#6#6#8 	0Hi""4??3	8M*243F3F3H*I' 7 = =d>W>W X	A#	(H'IT,A&/DO	0  ?s   Cc           	     p    d| j                   d| j                  d| j                  d| j                  d	S )NzDotEnvSettingsSource(env_file=z, env_file_encoding=z, env_nested_delimiter=r   rZ   )r   r   r   r   rE   s    r(   r[   zDotEnvSettingsSource.__repr__f  sL    ,T]],==QRVRhRhQk l$$($=$=#@@QRVReReQhhik	
r'   )r-   rG   r   zDotenvType | Noner   r   rb   r   rc   r   r   r   rJ   r   r   )rb   rK   rJ   r   rM   r\   )r#   r$   r%   rO   r    r1   r   r   rF   r[   r]   r^   s   @r(   r   r   (  s~     '8(,&*!%+/Y(Y $Y &	Y
 $Y Y )Y 
Y9$*
r'   r   Fr   c                   t        | |xs d      }|s2|j                         D ci c]  \  }}|j                         | c}}S |S c c}}w )Nutf8)r   )r   rw   rf   )	file_pathr   rb   	file_varsr   r   s         r(   r   r   m  sJ     (5YI[U['\I)2):;A	1;; <s   Ac                    t        d |D              ryt        |       }t        |       xs' t        |      xs t        |d      xs t        |d      S )Nc              3  <   K   | ]  }t        |t                y wr,   )rj   r   )r   mds     r(   r   z)_annotation_is_complex.<locals>.<genexpr>x  s     
3B:b$
3s   F__pydantic_core_schema____get_pydantic_core_schema__)r   r   _annotation_is_complex_innerrx   )r9   r:   origins      r(   r8   r8   w  sY    

3(
33
#F$Z0 	;'/	;656	; 69:	r'   c           
         t        | t        t        f      ryt        | t        t        t
        t        t        t        t        f      xs t        |       S )NF)r   rI   bytesr   r   r   tupleset	frozensetr   r   )r9   s    r(   r   r     sE    *sEl3j9gxPSU^`e*fg kwl r'   )r   r   r   r   rb   rK   rJ   r   r   )r9   r   rJ   rK   )<
__future__r   _annotationsrB   r   r   abcr   r   collectionsr   dataclassesr   pathlibr   typingr	   r
   r   r   r   r   r   r   dotenvr   pydanticr   r   r   r    pydantic._internal._typing_extrar   pydantic._internal._utilsr   r   pydantic.fieldsr   typing_extensionsr   r   pydantic_settings.utilsr   pydantic_settings.mainr   rI   r   r    __annotations__r   r"   r*   rQ   r`   r   r   r   r   r8   r   r&   r'   r(   <module>r     s-   2  	  #  $  R R R   = = < E % 2 33 4d5s#34eE$)<Lc<Q6RRS

 !%R : (	J 	F FRG3 G(J$> JZUJ9 UJp~
5 ~
BB
, B
L 04E",EI	r'   