+
    PV-jbJ  ã                   óÚ  a € R$ t.0 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
HtHt ^ RIHt ^RIHt ^RIHt ^RIHt ^RIHtHt ^R	IHt  ! R
 R]RR7      tR]P6                  R]P6                  R]P8                  R]P8                  R]P:                  R]P:                  R]P:                  R]P:                  R]P<                  R]P<                  R]P<                  R]P<                  /t] ^ k ]P@                  ! ]PB                  R%8  d   RMR4      t"R&t#] ^k ]$! ]%! ]PM                  4       4      4      t'] ^k ](! 0 R'm4      t)] ^k R R lt*R R lt+R  R! lt, ! R" R#4      t-R# )(av  
Digest authentication middleware for aiohttp client.

This middleware implements HTTP Digest Authentication according to RFC 7616,
providing a more secure alternative to Basic Authentication. It supports all
standard hash algorithms including MD5, SHA, SHA-256, SHA-512 and their session
variants, as well as both 'auth' and 'auth-int' quality of protection (qop) options.
N)ÚCallable)ÚFinalÚLiteralÚ	TypedDict)ÚURL)Úhdrs)ÚClientError)ÚClientHandlerType)ÚClientRequestÚClientResponse)ÚPayloadc                   ó,   a € ] tR t^t o V 3R ltRtV tR# )ÚDigestAuthChallengec                ón   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   # )é   ÚrealmÚnonceÚqopÚ	algorithmÚopaqueÚdomainÚstale©Ústr)ÚformatÚ__classdict__s   "€Úv/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/aiohttp/client_middleware_digest_auth.pyÚ__annotate__Ú DigestAuthChallenge.__annotate__   sU   ø‡ ‚ Ù�Jñ á�Jñ ñ 
�Hñ ñ �Nñ	 ñ
 �Kñ ñ �Kñ ñ �Jò ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      s   ø‡ ‡ „ r   r   F)ÚtotalÚMD5zMD5-SESSÚSHAzSHA-SESSÚSHA256zSHA256-SESSzSHA-256zSHA-256-SESSÚSHA512zSHA512-SESSzSHA-512zSHA-512-SESSz:(?:^|\s|,\s*)(\w+)\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([^\s,]+))z>(?:^|\s|,\s*)((?>\w+))\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([^\s,]+))c                ó0   € V ^8„  d   QhR\         R\         /# ©r   ÚvalueÚreturnr   )r   s   "r   r   r   l   s   € ÷ %ñ %œð %¤ñ %r   c                ó&   € V P                  RR4      # )z,Escape double quotes for HTTP header values.Ú"ú\"©Úreplace©r0   s   &r   Úescape_quotesr8   l   s   € à�=‰=˜˜eÓ$Ð$r   c                ó0   € V ^8„  d   QhR\         R\         /# r/   r   )r   s   "r   r   r   q   s   € ÷ %ñ %œ3ð %¤3ñ %r   c                ó&   € V P                  RR4      # )z-Unescape double quotes in HTTP header values.r4   r3   r5   r7   s   &r   Úunescape_quotesr;   q   s   € à�=‰=˜ Ó$Ð$r   c                óR   € V ^8„  d   QhR\         R\        \         \         3,          /# )r   Úheaderr1   )r   Údict)r   s   "r   r   r   v   s"   € ÷ ñ œsð ¤t¬C´¨H¥~ñ r   c           	     óÂ   € \         P                  V 4       UUUu/ uF5  w  rpVP                  4       ;p'       g   K   YB'       d   \        V4      MTbK7  	  uppp# u upppi )aI  
Parse key-value pairs from WWW-Authenticate or similar HTTP headers.

This function handles the complex format of WWW-Authenticate header values,
supporting both quoted and unquoted values, proper handling of commas in
quoted values, and whitespace variations per RFC 7616.

Examples of supported formats:
  - key1="value1", key2=value2
  - key1 = "value1" , key2="value, with, commas"
  - key1=value1,key2="value2"
  - realm="example.com", nonce="12345", qop="auth"

Args:
    header: The header value string to parse

Returns:
    Dictionary mapping parameter names to their values
)Ú_HEADER_PAIRS_PATTERNÚfindallÚstripr;   )r=   ÚkeyÚ
quoted_valÚunquoted_valÚstripped_keys   &    r   Úparse_header_pairsrG   v   s\   € ô, .C×-JÑ-JÈ6Ô-Rõá-RÑ)ˆC˜\ØŸI™I›KÐ'ˆLÓ'ô 	Rˆ¶Z”o jÔ1À\ÒQÙ-Róð ùô s
   šA¼Ac                   ó‚   a € ] tR t^‘t o RtRV 3R lR lltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	Rt
V tR# )ÚDigestAuthMiddlewarea±  
HTTP digest authentication middleware for aiohttp client.

This middleware intercepts 401 Unauthorized responses containing a Digest
authentication challenge, calculates the appropriate digest credentials,
and automatically retries the request with the proper Authorization header.

Features:
- Handles all aspects of Digest authentication handshake automatically
- Supports all standard hash algorithms:
  - MD5, MD5-SESS
  - SHA, SHA-SESS
  - SHA256, SHA256-SESS, SHA-256, SHA-256-SESS
  - SHA512, SHA512-SESS, SHA-512, SHA-512-SESS
- Supports 'auth' and 'auth-int' quality of protection modes
- Properly handles quoted strings and parameter parsing
- Includes replay attack protection with client nonce count tracking
- Supports preemptive authentication per RFC 7616 Section 3.6

Origin scoping:
The credentials are scoped to the origin of the first request the
middleware handles. A request to a different origin is passed through
untouched, so it never receives a digest response computed from those
credentials, unless that origin falls within a protection space the
anchor origin advertised through the RFC 7616 ``domain`` directive. Make
the first request through the middleware against the intended origin, as
the anchor is pinned to it and not reset for the life of the instance.

Standards compliance:
- RFC 7616: HTTP Digest Access Authentication (primary reference)
- RFC 2617: HTTP Authentication (deprecated by RFC 7616)
- RFC 1945: Section 11.1 (username restrictions)

Implementation notes:
The core digest calculation is inspired by the implementation in
https://github.com/requests/requests/blob/v2.18.4/requests/auth.py
with added support for modern digest auth features and error handling.
c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[RR/# )r   ÚloginÚpasswordÚ
preemptiver1   N)r   Úbool)r   r   s   "€r   r   Ú!DigestAuthMiddleware.__annotate__¹   s3   ø€ ÷ (ñ (áð(ñ ð(ñ ð	(ð
 
ñ(r   c                ó  € Vf   \        R4      hVf   \        R4      hRV9   d   \        R4      hWn        VP                  R4      V n        VP                  R4      V n        RV n        ^ V n        / V n        W0n        . V n	        R V n
        R # )Nz"None is not allowed as login valuez%None is not allowed as password valueÚ:z8A ":" is not allowed in username (RFC 1945#section-11.1)úutf-8r   )Ú
ValueErrorÚ
_login_strÚencodeÚ_login_bytesÚ_password_bytesÚ_last_nonce_bytesÚ_nonce_countÚ
_challengeÚ_preemptiveÚ_protection_spaceÚ_origin)ÚselfrK   rL   rM   s   &&&&r   Ú__init__ÚDigestAuthMiddleware.__init__¹   s�   € ð Š=ÜÐAÓBÐBàÒÜÐDÓEÐEà�%Œ<ÜÐWÓXÐXà&+ŒØ*/¯,©,°wÓ*?ˆÔØ-5¯_©_¸WÓ-EˆÔà!$ˆÔØˆÔØ/1ˆŒØ!+Ôà,.ˆÔà#'ˆŽr   c                óP   <€ V ^8„  d   QhRS[ RS[RS[S[R,          ,          RS[ /# )r   ÚmethodÚurlÚbodyr   r1   )r   r   r   r   )r   r   s   "€r   r   rO   Õ   s9   ø€ ÷ c,ñ c,¡Cð c,©cð c,¹Á7È3Å<Õ9Oð c,ÑTWñ c,r   c              ƒ  ó�	  a#a$"  € V P                   pRV9  d   \        R4      hRV9  d   \        R4      hVR,          pVR,          pV'       g   \        R4      hVP                  RR4      pVP                  RR	4      pVP                  4       p	VP                  R
R4      p
VP	                  R4      pVP	                  R4      p\        V4      P                  pRpRpV'       d‹   RR0P                  VP                  R4       Uu0 uF+  pVP                  4       '       g   K  VP                  4       kK-  	  up4      pV'       g   \        RV 24      hRV9   d   RMRpVP	                  R4      pV	\        9  d%   \        RV	 RRP                  \        4       24      h\        V	,          o$R V$3R llo#R V#3R llpRP                  V P                  WÀP                  34      pVP                  4        RV 2P	                  4       pVR8X  dM   \        V\         4      '       d   VP#                  4       G Rj  x€L
 pMTpS#! V4      pRP                  VV34      pS#! V4      pS#! V4      pW°P$                  8X  d   V ;P&                  ^,          un        M^V n        W°n        V P&                  R pVP	                  R4      p\(        P*                  ! RP                  \-        V P&                  4      P	                  R4      V\.        P0                  ! 4       P	                  R4      \2        P4                  ! ^4      .4      4      P7                  4       R,          pVP	                  R4      pV	P                  4       P9                  R4      '       d   S#! RP                  VVV34      4      pV'       d!   RP                  VVVVV34      pV! VV4      pMV! VRP                  VV34      4      pR\;        V P<                  4      R\;        V4      R\;        V4      RVR VP?                  4       RV/pV
'       d   \;        V
4      VR
&   V'       d   VVR&   VVR!&   VVR"&   . p VPA                  4        F@  w  p!p"V!\B        9   d   V PE                  V! R#V" R$24       K*  V PE                  V! R%V" 24       KB  	  R&RP                  V 4       2# u upi  ELŽ5i)'a}  
Build digest authorization header for the current challenge.

Args:
    method: The HTTP method (GET, POST, etc.)
    url: The request URL
    body: The request body (used for qop=auth-int)

Returns:
    A fully formatted Digest authorization header string

Raises:
    ClientError: If the challenge is missing required parameters or
                 contains unsupported values

r   z:Malformed Digest auth challenge: Missing 'realm' parameterr   z:Malformed Digest auth challenge: Missing 'nonce' parameterzBSecurity issue: Digest auth challenge contains empty 'nonce' valuer   Ú r   r*   r   rR   r   Úauthzauth-intÚ,zEDigest auth error: Unsupported Quality of Protection (qop) value(s): z/Digest auth error: Unsupported hash algorithm: z. Supported algorithms: z, c                ó0   € V ^8„  d   QhR\         R\         /# )r   Úxr1   ©Úbytes)r   s   "r   r   Ú2DigestAuthMiddleware._encode.<locals>.__annotate__   s   € ÷ 	3ñ 	3”ð 	3œ5ñ 	3r   c                óL   <€ S! V 4      P                  4       P                  4       # )z<RFC 7616 Section 3: Hash function H(data) = hex(hash(data)).)Ú	hexdigestrU   )rj   Úhash_fns   &€r   ÚHÚ'DigestAuthMiddleware._encode.<locals>.H   s   ø€ á˜1“:×'Ñ'Ó)×0Ñ0Ó2Ð2r   c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r   ÚsÚdr1   rk   )r   s   "r   r   rm   $  s!   € ÷ 	(ñ 	(”%ð 	(œEð 	(¤eñ 	(r   c                ó4   <€ S! RP                  W34      4      # )zDRFC 7616 Section 3: KD(secret, data) = H(concat(secret, ":", data)).ó   :)Újoin)rt   ru   rq   s   &&€r   ÚKDÚ(DigestAuthMiddleware._encode.<locals>.KD$  s   ø€ á�T—Y‘Y ˜vÓ&Ó'Ð'r   rw   rQ   NÚ08x:Né   Nz-SESSÚusernameÚuriÚresponseÚncÚcnoncez="r3   Ú=zDigest )#rZ   r   ÚgetÚupperrU   r   Úraw_path_qsÚintersectionÚsplitrB   ÚDigestFunctionsrx   ÚSUPPORTED_ALGORITHMSrV   rW   Ú
isinstancer   Úas_bytesrX   rY   ÚhashlibÚsha1r   ÚtimeÚctimeÚosÚurandomro   Úendswithr8   rT   ÚdecodeÚitemsÚQUOTED_AUTH_FIELDSÚappend)%r^   rb   rc   rd   Ú	challenger   r   Úqop_rawÚalgorithm_originalr   r   Únonce_bytesÚrealm_bytesÚpathr   Ú	qop_bytesÚqÚ
valid_qopsry   ÚA1ÚA2Úentity_bytesÚentity_hashÚHA1ÚHA2ÚncvalueÚncvalue_bytesr�   Úcnonce_bytesÚnoncebitÚresponse_digestÚheader_fieldsÚpairsÚfieldr0   rq   rp   s%   &&&&                               @@r   Ú_encodeÚDigestAuthMiddleware._encodeÕ   s•  ùé € ð" —O‘Oˆ	Ø˜)Ô#ÜØLóð ð ˜)Ô#ÜØLóð ð
 ˜'Õ"ˆØ˜'Õ"ˆ÷ ÜØTóð ð —-‘-  rÓ*ˆà&Ÿ]™]¨;¸Ó>ÐØ&×,Ñ,Ó.ˆ	Ø—‘˜x¨Ó,ˆð —l‘l 7Ó+ˆØ—l‘l 7Ó+ˆô
 �3‹x×#Ñ#ˆð ˆØˆ	ßØ  *Ð-×:Ñ:Ø$+§M¡M°#Ô$6ÓDÑ$6˜q¸!¿'¹'¿)”�—‘–Ñ$6ÑDóˆJ÷ Ü!Ø[Ð\cÐ[dÐeóð ð !+¨jÔ 8‘*¸fˆCØŸ
™
 7Ó+ˆIàœOÔ+ÜØAÀ)Àð M)Ø)-¯©Ô3GÓ)HÐ(IðKóð ô )¨Õ3ˆ÷	3ð 	3÷	(ð 	(ð
 �Y‰Y˜×)Ñ)¨;×8LÑ8LÐMÓNˆØ—‘“Ð˜q  Ð'×.Ñ.Ó0ˆØ�*ÔÜ˜$¤×(Ò(Ø%)§]¡]£_×4‘à#�Ù˜L›/ˆKØ—‘˜B Ð,Ó-ˆBá�‹eˆÙ�‹eˆð ×0Ñ0Ô0Ø×Ò Õ"Öà !ˆDÔà!,ÔØ×&Ñ& sÐ+ˆØŸ™ wÓ/ˆô —’Ø�H‰Hä˜×)Ñ)Ó*×1Ñ1°'Ó:ØÜ—J’J“L×'Ñ'¨Ó0Ü—J’J˜q“Mð	óó	
÷ ‰)‹+�cõ	ˆð —}‘} WÓ-ˆð �?‰?Ó×%Ñ% g×.Ò.Ù�D—I‘I˜s K°Ð>Ó?Ó@ˆC÷ Ø—y‘yØ˜m¨\¸9ÀcÐJóˆHñ !  hÓ/‰Oá   d§i¡i°¸cÐ0BÓ&CÓDˆOð œ d§o¡oÓ6Ø”] 5Ó)Ø”] 5Ó)Ø�4Ø˜×.Ñ.Ó0ØÐ+ð
ˆ÷ Ü&3°FÓ&;ˆM˜(Ñ#÷ Ø#&ˆM˜%Ñ Ø")ˆM˜$ÑØ&,ˆM˜(Ñ#ð ˆØ)×/Ñ/Ö1‰LˆE�5ØÔ*Ô*Ø—‘ ˜w b¨¨¨qÐ1Ö2à—‘ ˜w a¨ wÐ/Ö0ñ	 2ð ˜Ÿ™ 5Ó)Ð*Ð+Ð+ùòS Eò<  5ùsA   „A
SÁB4SÄR>Ä R>Ä4SÅC2SÈ5SÈ6E5SÎ,BSÑA?Sc                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   rc   r1   )r   rN   )r   r   s   "€r   r   rO   z  s   ø€ ÷ ñ ©ð ±ñ r   c                óü   € \        V4      pV P                   F`  pVP                  V4      '       g   K  \        V4      \        V4      8X  g   VR,          R8X  d    R# V\        V4      ,          R8X  g   K_   R# 	  R# )zÔ
Check if the given URL is within the current protection space.

According to RFC 7616, a URI is in the protection space if any URI
in the protection space is a prefix of it (after both have been made absolute).
Ú/TFéÿÿÿÿ)r   r\   Ú
startswithÚlen)r^   rc   Úrequest_strÚ	space_strs   &&  r   Ú_in_protection_spaceÚ)DigestAuthMiddleware._in_protection_spacez  si   € ô ˜#“hˆØ×/Ô/ˆIà×)Ñ)¨)×4Ò4Ùä�;Ó¤3 y£>Ô1°Y¸rµ]ÀcÔ5IÚàœ3˜y›>Õ*¨cÖ1Úñ 0ñ r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   r   r1   )r   rN   )r   r   s   "€r   r   rO   Ž  s   ø€ ÷ 9%ñ 9%¡nð 9%¹ñ 9%r   c           
     ó¸  € VP                   R8w  d   R# VP                  P                  RR4      pV'       g   R# VP                  R4      w  r4pV'       g   R# VP	                  4       R8w  d   R# V'       g   R# \        V4      ;p'       g   R# / V n        \         F(  pVP                  V4      ;pf   K  W€P                  V&   K*  	  VP                  P                  4       p	V P                  P                  R4      ;p
'       d³   . V n
        V
P                  4        F–  pVP                  R4      pVP                  R	4      '       d?   V P                  P                  \        V	P!                  \#        V4      4      4      4       Ki  V P                  P                  \        \#        V4      4      4       K˜  	  M\        V	4      .V n
        \%        V P                  4      # )
zr
Takes the given response and tries digest-auth, if needed.

Returns true if the original request must be resent.
i‘  Fzwww-authenticaterf   Ú Údigestr   r3   r²   )ÚstatusÚheadersrƒ   Ú	partitionÚlowerrG   rZ   ÚCHALLENGE_FIELDSrc   Úoriginr\   r‡   rB   r´   r–   r   rx   r   rN   )r^   r   Úauth_headerrb   Úsepr¿   Úheader_pairsr­   r0   rÃ   r   r~   s   &&          r   Ú_authenticateÚ"DigestAuthMiddleware._authenticateŽ  su  € ð �?‰?˜cÔ!Ùà×&Ñ&×*Ñ*Ð+=¸rÓBˆßÙà*×4Ñ4°SÓ9Ñˆ�Wßáà�<‰<‹>˜XÔ%áçáô !3°7Ó ;Ð;�Ö;áð ˆŒß%ˆEØ%×)Ñ)¨%Ó0Ð0�Ô=Ø).—‘ Ó&ñ &ð
 —‘×$Ñ$Ó&ˆà—_‘_×(Ñ(¨Ó2Ð2ˆ6Ö2à%'ˆDÔ"Ø—|‘|–~�à—i‘i “n�Ø—>‘> #×&Ò&à×*Ñ*×1Ñ1´#°f·k±kÄ#ÀcÃ(Ó6KÓ2LÖMð ×*Ñ*×1Ñ1´#´c¸#³h³-Ö@ò &ô '*¨&£k ]ˆDÔ"ô �D—O‘OÓ$Ð$r   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   ÚrequestÚhandlerr1   )r
   r	   r   )r   r   s   "€r   r   rO   É  s%   ø€ ÷ %ñ %Ù$ð%Ù/@ð%á	ñ%r   c              ƒ  óÀ  "  € VP                   P                  4       pV P                  f   W0n        MAW0P                  8w  d2   V P                  VP                   4      '       g   V! V4      G Rj  x€L
 # Rp\	        ^4       FÌ  pV^ 8”  gF   V P
                  '       dˆ   V P                  '       dv   V P                  VP                   4      '       dU   V P                  VP                  VP                   VP                  4      G Rj  x€L
 VP                  \        P                  &   V! V4      G Rj  x€L
 pV P                  V4      '       d   KÌ   M	  Vf   Q hV#  Lé LV L-5i)zRun the digest auth middleware.N)rc   rÃ   r]   r¸   Úranger[   rZ   r®   rb   rd   r¿   r   ÚAUTHORIZATIONrÇ   )r^   rÊ   rË   rÃ   r   Úretry_counts   &&&   r   Ú__call__ÚDigestAuthMiddleware.__call__É  s  é € ð —‘×#Ñ#Ó%ˆØ�<‰<ÒØ!�LØ—|‘|Ô#¨D×,EÑ,EÀgÇkÁk×,RÒ,RÙ  Ó)×)Ð)àˆÜ  ž8ˆKð ˜QŒØ× × Ð Ø—O—O�OØ×-Ñ-¨g¯k©k×:Ò:à<@¿L¹LØ—N‘N G§K¡K°·±ó=÷ 7�—‘¤× 2Ñ 2Ñ3ñ
 % WÓ-×-ˆHð ×%Ñ% h×/Ô/Ùñ% $ð* Ò#Ð#Ð#Øˆñ3 *ñ7ñ
 .ùsT   ‚A EÁ#EÁ.EÁ/,EÂEÂ. EÃ4EÄEÄ*EÄ.EÄ/EÅEÅEÅE)	rZ   rX   rV   rT   rY   r]   rW   r[   r\   N)T)r!   r"   r#   r$   Ú__doc__r_   r®   r¸   rÇ   rÐ   r&   r'   r(   s   @r   rI   rI   ‘   sA   ø‡ € ñ%÷N(ò (÷8c,ð c,÷Jð ÷(9%ð 9%÷v%ö %r   rI   c                ó�  € V ^8„  d   Qh/ ^ \         9   d)   \        \        \        \        .R3,          3,          ;R&   ^\         9   d)   \
        \        \        R,          R3,          ,          ;R&   ^\         9   d"   \
        \        \        R3,          ,          ;R&   ^\         9   d    \
        \        \        ,          ,          ;R&   # )r   zhashlib._Hashrˆ   .rÂ   r‰   r•   ©r   r   r   r   r   r   r   )	Ú__conditional_annotations__r>   r   r   rl   r   Útupler   Ú	frozenset)r   s   "r   r   r      s±   € ÷ ñ ÷Hò ””cœ8¤U G¨_Ð$<Õ=Ð=Õ>ñ ñI÷^ò ”%Ü	ÜÐQÕRÐTWÐWõõñ ñ_÷~ UÒ T”eœE¤# s (�OÕ,Ñ Tñ÷Lò ”Eœ)¤C�.Õ)ñ òMr   )é   é   rÔ   >   r~   r   r   r�   r   r   r}   )/rÕ   rÒ   rŒ   r�   ÚreÚsysrŽ   Úcollections.abcr   Útypingr   r   r   Úyarlr   rf   r   Úclient_exceptionsr   Úclient_middlewaresr	   Úclient_reqrepr
   r   Úpayloadr   r   Úmd5r�   Úsha256Úsha512rˆ   ÚcompileÚversion_infor@   rÂ   rÖ   ÚsortedÚkeysr‰   r×   r•   r8   r;   rG   rI   r   )rÕ   s   @r   Ú<module>rê      sE  øðöó Û 	Û 	Û 
Û Ý $ß ,Ñ ,å å Ý *Ý 1ß 8Ý ô˜)¨5õ ð 
ˆ7�;‰;Ø�—‘Ø	ˆ7�<‰<Ø�—‘Øˆg�n‰nØ�7—>‘>Øˆw�~‰~Ø�G—N‘NØˆg�n‰nØ�7—>‘>Øˆw�~‰~Ø�G—N‘NðB€ó ð" Ÿ
š
à
×Ñ˜'Ô!ñ Bà	JóÐ ð<ð	 ó ñ  05±V¸O×<PÑ<PÓ<RÓ5SÓ/TÐ Ó Tñ -6ÚIó-Ð ó õ
%õ
%õ
÷6]ó ]r   