JFIF$        dd7 

Viewing File: /usr/lib/python3.9/site-packages/acme/__pycache__/client.cpython-39.pyc

a

}|�g"z�@sJdZddlZddlZddlmZddlmZddlZddl	Z	ddl
Z
ddlmZddlm
Z
ddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZddlZddlZddlZdd
lmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#e�$e%�Z&dZ'Gdd�d�Z(Gdd�d�Z)dS)zACME client API.�N)�parsedate_tz)�Any)�cast)�List)�Mapping)�Optional)�Set)�Tuple)�Union)�x509)�HTTPAdapter)�parse_header_links)�
challenges)�crypto_util)�errors)�jws)�messages�-c@s�eZdZdZejddd�dd�Zejejd�dd	�Z	ejejd
�dd�Z
dNejeejejd
�dd�Z
dOejeejd�dd�Zeejd�dd�Zejeejejfd�dd�ZdPejeejejd�dd�Zejejejd�dd�Zejejd�d d!�ZdQejejeejd"�d#d$�ZdRejejeejd"�d%d&�Zeje dd'�d(d)�Z!ed*�d+d,�Z"e#e#ejd-�d.d/�Z$eje%e&e%d0�d1d2�Z'e(e%dejd3�d4d5��Z)e(dSejee%ee%ejd6�d7d8��Z*ejejejd9�d:d;�Z+e#e#ejd-�d<d=�Z,ejejd
�d>d?�Z-ejejd�d@dA�Z.dTejeej/ee%ejdB�dCdD�Z0ej1e2j3ej4dE�dFdG�Z5e(eje ejdH�dIdJ��Z6eje e%ddK�dLdM�Z7dS)U�ClientV2zuACME client for a v2 API.

    :ivar messages.Directory directory:
    :ivar .ClientNetwork net: Client network.
    �
ClientNetworkN)�	directory�net�returncCs||_||_dS)z�Initialize.

        :param .messages.Directory directory: Directory Resource
        :param .ClientNetwork net: Client network.
        N)rr)�selfrr�r�//usr/lib/python3.9/site-packages/acme/client.py�__init__,szClientV2.__init__)�new_accountrcCsL|�|jd|�}|jdkr6d|jvr6t�|jd��|�|�}||j_|S)z�Register.

        :param .NewRegistration new_account:

        :raises .ConflictError: in case the account already exists

        :returns: Registration Resource.
        :rtype: `.RegistrationResource`
        �
newAccount���Location)	�_postr�status_code�headersr�
ConflictError�_regr_from_responser�account)rr�response�regrrrrr5s

zClientV2.new_account)r(rcCs|�|d�|j_|jjS)z�Query server about registration.

        :param messages.RegistrationResource regr: Existing Registration
            Resource.

        T)�_get_v2_accountrr&�rr(rrr�query_registrationHszClientV2.query_registration)r(�updatercCsJ|�|�}|dur|jn|}tjfit|���}|j||d�}||j_|S)aKUpdate registration.

        :param messages.RegistrationResource regr: Registration Resource.
        :param messages.Registration update: Updated body of the
            resource. If not provided, body will be taken from `regr`.

        :returns: Updated Registration Resource.
        :rtype: `.RegistrationResource`

        N��body)r)r.rZUpdateRegistration�dict�_send_recv_regrrr&)rr(r,r.Zupdated_regrrrr�update_registrationTs
zClientV2.update_registrationF)r(�update_bodyrcCsbd|j_|jjdd�}|�|jd|�}|jd}|j|rJtj�	|�
��n|j|d�}||j_|S)NT)Zonly_return_existingrr �r.�uri)rr&r.r,r!rr#r�Registration�	from_json�json)rr(r2Zonly_existing_regr'Zupdated_uriZnew_regrrrrr)js
��zClientV2._get_v2_account)�csr_pemrcCst�|�}t�|j|j�}z|j�tj�}WntjyDg}Yn0|j	�
tj�}g}|D]}|�t
jt
j|d��q\|D]}|�t
jt
jt|�d��q|t
j|d�}	|�|jd|	�}
t
j�|
���}g}|jD]}
|�|j|�|
�|
d��q�t
j||
j�d�||d�S)z�Request a new Order object from the server.

        :param bytes csr_pem: A CSR in PEM format.

        :returns: The newly created order.
        :rtype: OrderResource
        )�typ�value)�identifiersZnewOrder�r4r )r.r4�authorizationsr8)rZload_pem_x509_csrrZ%get_names_from_subject_and_extensionsZsubject�
extensionsZget_extension_for_classZSubjectAlternativeNameZExtensionNotFoundr:Zget_values_for_typeZ	IPAddress�appendr�
IdentifierZIDENTIFIER_FQDNZ
IDENTIFIER_IP�strZNewOrderr!r�Orderr6r7r=�_authzr_from_response�_post_as_get�
OrderResourcer#�get)rr8�csrZdnsNamesZsan_extZipNamesr;�name�ip�orderr'r.r=�urlrrr�	new_ordervs8

�
�


�zClientV2.new_order)�authzrrcCs(|�|j�}|�||jj|j�}||fS)aPoll Authorization Resource for status.

        :param authzr: Authorization Resource
        :type authzr: `.AuthorizationResource`

        :returns: Updated Authorization Resource and HTTP response.

        :rtype: (`.AuthorizationResource`, `requests.Response`)

        )rDr4rCr.�
identifier)rrMr'Zupdated_authzrrrr�poll�s
�z
ClientV2.poll)�orderr�deadlinercCs6|durtj��tjdd�}|�||�}|�||�S)adPoll authorizations and finalize the order.

        If no deadline is provided, this method will timeout after 90
        seconds.

        :param messages.OrderResource orderr: order to finalize
        :param datetime.datetime deadline: when to stop polling and timeout

        :returns: finalized order
        :rtype: messages.OrderResource

        N�Z��seconds)�datetime�now�	timedelta�poll_authorizations�finalize_order)rrPrQrrr�poll_and_finalize�szClientV2.poll_and_finalizecCs�g}|jjD]L}tj��|kr|j|�|�|d�}|jjtjkrL|�	|�qt
�d�qqt|�t|jj�krvt
���g}|D]4}|jjtjkr~|jjD]}|jdur�|�	|�q�q~|r�t
�|��|j|d�S)zPoll Order Resource for status.r<�N)r=)r.r=rUrVrCrD�statusrZSTATUS_PENDINGr?�time�sleep�lenr�TimeoutError�STATUS_VALIDr�errorZValidationErrorr,)rrPrQZ	responsesrKrMZfailedZchallrrrrX�s&


zClientV2.poll_authorizations)rPrcCsRtj�tjj|j�}tjt�|�d�}|�	|j
j|�}|jtj
�|���d�}|S)aStart the process of finalizing an order.

        :param messages.OrderResource orderr: order to finalize
        :param datetime.datetime deadline: when to stop polling and timeout

        :returns: updated order
        :rtype: messages.OrderResource
        )rGr-)�OpenSSLZcryptoZload_certificate_requestZFILETYPE_PEMr8rZCertificateRequest�jose�ComparableX509r!r.�finalizer,rBr6r7)rrPrGZwrapped_csr�resrrr�begin_finalization�s

�zClientV2.begin_finalization)rPrQ�fetch_alternative_chainsrc	s�tj��|kr�t�d���|j�}tj�|�	��}|j
tjkrb|jdurVt
�|j��t
�d��q|j
tjkr|jdur��|j�}|j||jd�}|rˆ�|d�}�fdd�|D�}|j|d�}|Sqt
���dS)	z�
        Poll an order that has been finalized for its status.
        If it becomes valid, obtain the certificate.

        :returns: finalized order (with certificate)
        :rtype: messages.OrderResource
        r[NzPThe certificate order failed. No further information was provided by the server.)r.Z
fullchain_pem�	alternatecsg|]}��|�j�qSr)rD�text)�.0rK�rrr�
<listcomp>�z.ClientV2.poll_finalization.<locals>.<listcomp>)Zalternative_fullchains_pem)rUrVr]r^rDr4rrBr6r7r\ZSTATUS_INVALIDrbrZ
IssuanceError�Errorra�certificater,rk�
_get_linksr`)	rrPrQrir'r.Zcertificate_responseZalt_chains_urlsZ
alt_chainsrrmr�poll_finalization�s&

�zClientV2.poll_finalizationcCs|�|�|�|||�S)a{Finalize an order and obtain a certificate.

        :param messages.OrderResource orderr: order to finalize
        :param datetime.datetime deadline: when to stop polling and timeout
        :param bool fetch_alternative_chains: whether to also fetch alternative
            certificate chains

        :returns: finalized order
        :rtype: messages.OrderResource

        )rhrs)rrPrQrirrrrY
s
zClientV2.finalize_order)�cert�rsnrcCs|�|||jd�dS)aRevoke certificate.

        :param .ComparableX509 cert: `OpenSSL.crypto.X509` wrapped in
            `.ComparableX509`

        :param int rsn: Reason code for certificate revocation.

        :raises .ClientError: If revocation is unsuccessful.

        Z
revokeCertN)�_revoker)rrtrurrr�revokeszClientV2.revoke�rcCs$t|jd�o"t|jjd�o"|jjjS)zGChecks if ACME server requires External Account Binding authentication.�meta�external_account_required)�hasattrrryrzrmrrrrz's
��z"ClientV2.external_account_required��args�kwargsrcOs,|dd�d|dd�}|j|i|��S)z
        Send GET request using the POST-as-GET protocol.
        :param args:
        :param kwargs:
        :return:
        Nr[�N)r!)rr}r~�new_argsrrrrD-szClientV2._post_as_get)r'�
relation_typercs.d|jvrgSt|jd�}�fdd�|D�S)z�
        Retrieves all Link URIs of relation_type from the response.
        :param requests.Response response: The requests HTTP response.
        :param str relation_type: The relation type to filter by.
        ZLinkcs0g|](}d|vrd|vr|d�kr|d�qS)�relrKr)rl�l�r�rrrnBs�z'ClientV2._get_links.<locals>.<listcomp>)r#r
)rr'r��linksrr�rrr7s
zClientV2._get_links)rKrrcCstj�|�|����S)aB
        Retrieves the ACME directory (RFC 8555 section 7.1.1) from the ACME server.
        :param str url: the URL where the ACME directory is available
        :param ClientNetwork net: the ClientNetwork to use to make the request

        :returns: the ACME directory object
        :rtype: messages.Directory
        )r�	Directoryr6rFr7)�clsrKrrrr�
get_directoryEs
zClientV2.get_directory)r'r4�terms_of_servicercCs>d|jvr|jdd}tjtj�|���|j�d|�|d�S)Nzterms-of-servicerKr )r.r4r�)r�r�RegistrationResourcer5r6r7r#rF)r�r'r4r�rrrr%Qs
�zClientV2._regr_from_response)r(r.rcCs"|�|j|�}|j||j|jd�S)N)r4r�)r!r4r%r�)rr(r.r'rrrr0]s
�zClientV2._send_recv_regrcOs&|�dt|jd��|jj|i|��S)z�Wrapper around self.net.post that adds the newNonce URL.

        This is used to retry the request in case of a badNonce error.

        �
new_nonce_urlZnewNonce)�
setdefault�getattrrr�post�rr}r~rrrr!kszClientV2._postcCs|�|tj�ddd���S)z�Deactivate registration.

        :param messages.RegistrationResource regr: The Registration Resource
            to be deactivated.

        :returns: The Registration resource that was deactivated.
        :rtype: `.RegistrationResource`

        �deactivatedN)r\Zcontact)r1rr5r6r*rrr�deactivate_registrationts�z ClientV2.deactivate_registrationcCs.tjdd�}|�|j|�}|�||jj|j�S)aDeactivate authorization.

        :param messages.AuthorizationResource authzr: The Authorization resource
            to be deactivated.

        :returns: The Authorization resource that was deactivated.
        :rtype: `.AuthorizationResource`

        r�)r\)rZUpdateAuthorizationr!r4rCr.rN)rrMr.r'rrr�deactivate_authorization�s

�z!ClientV2.deactivate_authorization)r'rNr4rcCsFtjtj�|���|j�d|�d�}|durB|jj|krBt	�
|��|S)Nr r3)r�AuthorizationResourceZ
Authorizationr6r7r#rFr.rNr�UnexpectedUpdate)rr'rNr4rMrrrrC�s�
zClientV2._authzr_from_response)�challbr'rcCst|�|j|�}z|jdd}Wnty<t�d��Yn0tj|tj�	|�
��d�}|j|jkrpt�|j��|S)ahAnswer challenge.

        :param challb: Challenge Resource body.
        :type challb: `.ChallengeBody`

        :param response: Corresponding Challenge response
        :type response: `.challenges.ChallengeResponse`

        :returns: Challenge Resource with updated body.
        :rtype: `.ChallengeResource`

        :raises .UnexpectedUpdate:

        ZuprKz"up" Link header missing)�
authzr_urir.)r!r4r��KeyErrorr�ClientErrorr�ChallengeResource�
ChallengeBodyr6r7r�)rr�r'Zrespr�Zchallrrrr�answer_challenge�s�zClientV2.answer_challenge)r'�defaultrcCs�|j�dt|��}zt|�}Wnxty�t|�}|dur�z:t�|ddurV|dnd�}tj|dd��|WYSttfy�Yn0|}Yn0tj�	�tj|d�S)a�Compute next `poll` time based on response ``Retry-After`` header.

        Handles integers and various datestring formats per
        https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.37

        :param requests.Response response: Response from `poll`.
        :param int default: Default value (in seconds), used when
            ``Retry-After`` header is not present or invalid.

        :returns: Time point when next `poll` should be performed.
        :rtype: `datetime.datetime`

        zRetry-AfterN���r�rS)
r#rFrA�int�
ValueErrorrrUrW�
OverflowErrorrV)r�r'r��retry_afterrTZwhenZtz_secsrrrr��s
zClientV2.retry_after)rtrurKrcCs0|�|tj||d��}|jtjkr,t�d��dS)a.Revoke certificate.

        :param .ComparableX509 cert: `OpenSSL.crypto.X509` wrapped in
            `.ComparableX509`

        :param int rsn: Reason code for certificate revocation.

        :param str url: ACME URL to post to

        :raises .ClientError: If revocation is unsuccessful.

        )rq�reasonz0Successful revocation must return HTTP OK statusN)r!rZ
Revocationr"�http_clientZOKrr�)rrtrurKr'rrrrv�s
���zClientV2._revoke)N)F)N)F)F)NN)NN)8�__name__�
__module__�__qualname__�__doc__rr�rZNewRegistrationr�rr+rr5r1�boolr)�bytesrErLr�r	�requests�ResponserOrUrZrXrhrsrYrdrer�rwrzrrDrArrr�classmethodr�r%r0r!r�r�r@rCr�rZChallengeResponser�r�r�rvrrrrr%s�	�
���&�������!�
�

���	���
�
�rc	@s2eZdZdZdZdZdZdZdej	dde
fejee
jejeeedd	�d
d�Zdd�d
d�Zejeeed�dd�Zed)ejeeejd�dd��Zeeeeejd�dd�Zeeejd�dd�Zefeeeejd�dd�Zejdd�dd �Zeeed!�d"d#�Z eeejd�d$d%�Z!efeejeeejd&�d'd(�Z"dS)*rzvWrapper around requests that signs POSTs for authentication.

    Also adds user agent, and handles Content-Type.
    zapplication/jsonzapplication/jose+jsonzapplication/problem+jsonzReplay-NonceNTzacme-python)�keyr&�alg�
verify_ssl�
user_agent�timeoutrcCs\||_||_||_||_t�|_||_t��|_	||_
t�}|j	�d|�|j	�d|�dS)Nzhttp://zhttps://)
r�r&r�r��set�_noncesr�r�ZSession�session�_default_timeoutrZmount)rr�r&r�r�r�r�Zadapterrrrrs
zClientNetwork.__init__rxcCs&z|j��Wnty Yn0dSr)r��close�	Exceptionrmrrr�__del__szClientNetwork.__del__)�obj�noncerKrcCs~|r|jdd���nd}t�d|�|j||d�}|jdurJ|jd|d<|j|d	<tjj	|fit
ttt
f|���jdd�S)
z�Wrap `JSONDeSerializable` object in JWS.

        .. todo:: Implement ``acmePath``.

        :param josepy.JSONDeSerializable obj:
        :param str url: The URL to which this object will be POSTed
        :param str nonce:
        :rtype: str

        �)�indentrozJWS payload:
%s)r�r�rKNr4Zkidr�)Z
json_dumps�encode�logger�debugr�r&r�rZJWS�signrrrAr)rr�r�rK�jobjr~rrr�_wrap_in_jwss�

zClientNetwork._wrap_in_jws)r'�content_typerc
Cs$|j�d�}|r"|�d�d��}z|��}WntyDd}Yn0|jdkrdt�|j�dd���|j	s�|dur�||j
kr�t�d|�zt
j�|��Wq�tjy�}zt�||f��WYd}~q�d}~00n
t�|��nD|dur�||jkr�t�d	|�||jk�r |du�r t�d
|����|S)a�Check response content and its type.

        .. note::
           Checking is not strict: wrong server response ``Content-Type``
           HTTP header is ignored if response is an expected JSON object
           (c.f. Boulder #56).

        :param str content_type: Expected Content-Type response header.
            If JSON is expected and not present in server response, this
            function will raise an error. Otherwise, wrong Content-Type
            is ignored, but logged.

        :raises .messages.Error: If server response body
            carries HTTP Problem (https://datatracker.ietf.org/doc/html/rfc7807).
        :raises .ClientError: In case of other networking errors.

        �Content-Type�;rNi�r zUNKNOWN-LOCATIONz/Ignoring wrong Content-Type (%r) for JSON Errorz<Ignoring wrong Content-Type (%r) for JSON decodable responsez"Unexpected response Content-Type: )r#rF�split�stripr7r�r"rr$�ok�JSON_ERROR_CONTENT_TYPEr�r�rrpr6rd�DeserializationErrorr��JSON_CONTENT_TYPE)r�r'r�Zresponse_ctr�rbrrr�_check_response6s:


�&�zClientNetwork._check_response)�methodrKr}r~rc
OsD|dkrt�d||d�nt�d||�|j|d<|�di�|d�d|j�|�d|j�z |jj||g|�Ri|��}Wnntj	j
y�}zRd	}t�|t
|��}|d
ur��|��\}	}
}}td|	�|
�d|����WYd
}~n
d
}~00d
|dv�rt�|j�}
nd|_|j}
t�d|jd�dd�|j��D��|
�|S)a�Send HTTP request.

        Makes sure that `verify_ssl` is respected. Logs request and
        response (with headers). For allowed parameters please see
        `requests.request`.

        :param str method: method for the new `requests.Request` object
        :param str url: URL for the new `requests.Request` object

        :raises requests.exceptions.RequestException: in case of any problems

        :returns: HTTP Response
        :rtype: `requests.Response`


        �POSTzSending POST request to %s:
%s�datazSending %s request to %s.Zverifyr#z
User-Agentr�zT.*host='(\S*)'.*Max retries exceeded with url\: (\/\w*).*(\[Errno \d+\])([A-Za-z ]*)NzRequesting �:ZAcceptzutf-8z!Received response:
HTTP %d
%s

%s�
css|]\}}d�||�VqdS)z{0}: {1}N)�format)rl�k�vrrr�	<genexpr>�s�z.ClientNetwork._send_request.<locals>.<genexpr>)r�r�r�r�r�r�r�Zrequestr��
exceptionsZRequestException�re�matchrA�groupsr��base64Z	b64encodeZcontent�encodingrkr"�joinr#�items)rr�rKr}r~r'�eZ	err_regex�m�host�pathZ_err_no�err_msgZ
debug_contentrrr�
_send_requestqs<�
 .
��zClientNetwork._send_requestr|cOs|jdg|�Ri|��S)aSend HEAD request without checking the response.

        Note, that `_check_response` is not called, as it is expected
        that status code other than successfully 2xx will be returned, or
        messages2.Error will be raised by the server.

        ZHEAD)r�r�rrr�head�szClientNetwork.head)rKr�r~rcKs|j|jd|fi|��|d�S)z$Send GET request and check response.ZGET�r�)r�r�)rrKr�r~rrrrF�s�zClientNetwork.get)r'rc
Cs�|j|jvr||j|j}ztjjd�|�}Wn2tjy`}zt�	||��WYd}~n
d}~00t
�d|�|j�
|�n
t�|��dS)Nr�zStoring nonce: %s)�REPLAY_NONCE_HEADERr#rZHeader�_fields�decoderdr�rZBadNoncer�r�r��addZMissingNonce)rr'r�Z
decoded_noncerbrrr�
_add_nonce�s"zClientNetwork._add_nonce)rKr�rcCsL|jsBt�d�|dur$|�|�}n|j|�|�dd�}|�|�|j��S)NzRequesting fresh noncer�)r�r�r�r�r�r��pop)rrKr�r'rrr�
_get_nonce�s

zClientNetwork._get_noncec
Osrz|j|i|��WStjyl}z@|jdkrVt�d|�|j|i|��WYd}~S�WYd}~n
d}~00dS)z�POST object wrapped in `.JWS` and check response.

        If the server responded with a badNonce error, the request will
        be retried once.

        ZbadNoncez Retrying request after error:
%sN)�
_post_oncerrp�coder�r�)rr}r~rbrrrr��s
zClientNetwork.post)rKr�r�r~rcKsf|�dd�}|�||�||�|�}|�dd|i�|jd|fd|i|��}|j||d�}|�|�|S)Nr�r#r�r�r�r�)r�r�r�r�r�r�r�)rrKr�r�r~r�r�r'rrrr��s
zClientNetwork._post_once)N)#r�r�r�r�r�ZJOSE_CONTENT_TYPEr�r�rdZRS256�DEFAULT_NETWORK_TIMEOUTZJWKrrr�ZJWASignaturer�rAr�rr�ZJSONDeSerializabler�r�r�r�r�rr�r�rFr�r�r�r�rrrrr�s>
���
�:G
���r)*r�r�rUZemail.utilsrZhttp.clientZclientr�Zloggingr�r]�typingrrrrrrr	r
ZcryptographyrZjosepyrdrcr�Zrequests.adaptersrZrequests.utilsr
ZacmerrrrrZ	getLoggerr�r�r�rrrrrr�<module>sB
N
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg