§
    JŠtj®>  ã                  ó~  — d dl mZ d dlZ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 ddlmZmZ ddlmZmZmZmZmZmZ g d¢Z e
d	¦  «        Zd
dœdTd„ZdUd„Z ej        d¦  «        ZdVd„Z ej        d¦  «        ZdWd„Z ej        d¦  «        Z ej        d ¦  «        ZdWd!„Z  ej        d"¦  «        Z! ej        d#¦  «        Z"dXd%„Z#dYd)„Z$dZd+„Z%d[d-„Z& ej        d.¦  «        Z'd\d0„Z(d]d2„Z)d^d4„Z*d_d6„Z+d`d8„Z,e,Z-dad=„Z.dbd@„Z/e/Z0dcdB„Z1dddD„Z2e2Z3dedG„Z4e4Z5dfdI„Z6dgdK„Z7 ej        dL¦  «        Z8dWdM„Z9dhdN„Z:didP„Z;djdS„Z<dS )ké    )ÚannotationsN)ÚSequence)ÚCallableÚTypeVarÚcasté   )ÚInvalidHeaderFormatÚInvalidHeaderValue)ÚConnectionOptionÚExtensionHeaderÚExtensionNameÚExtensionParameterÚSubprotocolÚUpgradeProtocol)Ú
build_hostÚparse_connectionÚparse_upgradeÚparse_extensionÚbuild_extensionÚparse_subprotocolÚbuild_subprotocolÚvalidate_subprotocolsÚbuild_www_authenticate_basicÚparse_authorization_basicÚbuild_authorization_basicÚTF)Úalways_include_portÚhostÚstrÚportÚintÚsecureÚboolr   Úreturnc               óš   — 	 t          j        | ¦  «        }|j        dk    rd| › d�} n# t          $ r Y nw xY w|s
||rdndk    r| › d|› �} | S )z#
    Build a ``Host`` header.

    é   ú[ú]i»  éP   ú:)Ú	ipaddressÚ
ip_addressÚversionÚ
ValueError)r   r    r"   r   Úaddresss        úP/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websockets/headers.pyr   r   '   s‹   € ðÝÔ& tÑ,Ô,ˆð Œ?˜aÒÐØ�t�;�;�;ˆDøøõ ð ð ð àˆðøøøð ð  ˜d¨fÐ'< s s¸"Ò=Ð=ØÐÐ˜ÐÐˆà€Ks   ‚( ¨
5´5ÚheaderÚposú
str | Nonec                ó<   — |t          | ¦  «        k    rdn| |         S )z·
    Return the next character from ``header`` at the given position.

    Return :obj:`None` at the end of ``header``.

    We never need to peek more than one character ahead.

    N)Úlen)r1   r2   s     r0   Ú
peek_aheadr6   I   s"   € ð �#˜f™+œ+Ò%Ð%ˆ4ˆ4¨6°#¬;Ð6ó    z[\t ]*c                óh   — t                                | |¦  «        }|€J ‚|                     ¦   «         S )z±
    Parse optional whitespace from ``header`` at the given position.

    Return the new position.

    The whitespace itself isn't returned because it isn't significant.

    )Ú_OWS_reÚmatchÚend)r1   r2   r:   s      r0   Ú	parse_OWSr<   X   s1   € õ �MŠM˜& #Ñ&Ô&€EØÐÐÐØ�9Š9‰;Œ;Ðr7   z[-!#$%&\'*+.^_`|~0-9a-zA-Z]+Úheader_nameútuple[str, int]c                ó°   — t                                | |¦  «        }|€t          |d| |¦  «        ‚|                     ¦   «         |                     ¦   «         fS )z®
    Parse a token from ``header`` at the given position.

    Return the token value and the new position.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    Nzexpected token)Ú	_token_rer:   r	   Úgroupr;   ©r1   r2   r=   r:   s       r0   Úparse_tokenrC   j   sL   € õ �OŠO˜F CÑ(Ô(€EØ€}Ý! +Ð/?ÀÈÑMÔMÐMØ�;Š;‰=Œ=˜%Ÿ)š)™+œ+Ð%Ð%r7   zC"(?:[\x09\x20-\x21\x23-\x5b\x5d-\x7e]|\\[\x09\x20-\x7e\x80-\xff])*"z\\([\x09\x20-\x7e\x80-\xff])c                óò   — t                                | |¦  «        }|€t          |d| |¦  «        ‚t                               d|                     ¦   «         dd…         ¦  «        |                     ¦   «         fS )z¹
    Parse a quoted string from ``header`` at the given position.

    Return the unquoted value and the new position.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    Nzexpected quoted stringz\1r   éÿÿÿÿ)Ú_quoted_string_rer:   r	   Ú_unquote_reÚsubrA   r;   rB   s       r0   Úparse_quoted_stringrI   ‚   sf   € õ ×#Ò# F¨CÑ0Ô0€EØ€}Ý! +Ð/GÈÐQTÑUÔUÐUÝ�?Š?˜5 %§+¢+¡-¤-°°"°Ô"5Ñ6Ô6¸¿	º	¹¼ÐCÐCr7   z[\x09\x20-\x7e\x80-\xff]*z([\x22\x5c])Úvaluec                óš   — t                                | ¦  «        }|€t          d¦  «        ‚dt                               d| ¦  «        z   dz   S )zh
    Format ``value`` as a quoted string.

    This is the reverse of :func:`parse_quoted_string`.

    Nz-invalid characters for quoted-string encodingú"z\\\1)Ú_quotable_reÚ	fullmatchr.   Ú	_quote_rerH   )rJ   r:   s     r0   Úbuild_quoted_stringrP   ˜   sI   € õ ×"Ò" 5Ñ)Ô)€EØ€}ÝÐHÑIÔIÐIØ•—’˜w¨Ñ.Ô.Ñ.°Ñ4Ð4r7   Ú
parse_itemú(Callable[[str, int, str], tuple[T, int]]úlist[T]c                óR  — t          ||¦  «        dk    r't          ||dz   ¦  «        }t          ||¦  «        dk    °'g }	  | |||¦  «        \  }}|                     |¦  «         t          ||¦  «        }|t          |¦  «        k    rnŠt          ||¦  «        dk    rt          ||dz   ¦  «        }nt	          |d||¦  «        ‚t          ||¦  «        dk    r't          ||dz   ¦  «        }t          ||¦  «        dk    °'|t          |¦  «        k    rnŒÓ|t          |¦  «        k    sJ ‚|S )aö  
    Parse a comma-separated list from ``header`` at the given position.

    This is appropriate for parsing values with the following grammar:

        1#item

    ``parse_item`` parses one item.

    ``header`` is assumed not to start or end with whitespace.

    (This function is designed for parsing an entire header value and
    :func:`~websockets.http.read_headers` strips whitespace from values.)

    Return a list of items.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    ú,r   Tzexpected comma)r6   r<   Úappendr5   r	   )rQ   r1   r2   r=   ÚitemsÚitems         r0   Ú
parse_listrY   ¥   sX  € õ> �V˜SÑ
!Ô
! SÒ
(Ð
(Ý˜  a¡Ñ(Ô(ˆõ �V˜SÑ
!Ô
! SÒ
(Ð
(ð €Eðà�J˜v s¨KÑ8Ô8‰	ˆˆcØ�Š�TÑÔÐÝ˜ Ñ$Ô$ˆð •#�f‘+”+ÒÐØõ �f˜cÑ"Ô" cÒ)Ð)Ý˜F C¨!¡GÑ,Ô,ˆCˆCå% kÐ3CÀVÈSÑQÔQÐQõ ˜ Ñ%Ô%¨Ò,Ð,Ý˜F C¨!¡GÑ,Ô,ˆCõ ˜ Ñ%Ô%¨Ò,Ð,ð •#�f‘+”+ÒÐØð-ð4 •#�f‘+”+ÒÐÐÐà€Lr7   útuple[ConnectionOption, int]c                óX   — t          | ||¦  «        \  }}t          t          |¦  «        |fS )z½
    Parse a Connection option from ``header`` at the given position.

    Return the protocol value and the new position.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    )rC   r   r   ©r1   r2   r=   rX   s       r0   Úparse_connection_optionr]   ç   s/   € õ ˜F C¨Ñ5Ô5�I€Dˆ#ÝÕ  $Ñ'Ô'¨Ð,Ð,r7   úlist[ConnectionOption]c                ó0   — t          t          | dd¦  «        S )zÓ
    Parse a ``Connection`` header.

    Return a list of HTTP connection options.

    Args
        header: value of the ``Connection`` header.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    r   Ú
Connection)rY   r]   ©r1   s    r0   r   r   ÷   s   € õ Õ-¨v°q¸,ÑGÔGÐGr7   z>[-!#$%&\'*+.^_`|~0-9a-zA-Z]+(?:/[-!#$%&\'*+.^_`|~0-9a-zA-Z]+)?útuple[UpgradeProtocol, int]c                óÖ   — t                                | |¦  «        }|€t          |d| |¦  «        ‚t          t          |                     ¦   «         ¦  «        |                     ¦   «         fS )z½
    Parse an Upgrade protocol from ``header`` at the given position.

    Return the protocol value and the new position.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    Nzexpected protocol)Ú_protocol_rer:   r	   r   r   rA   r;   rB   s       r0   Úparse_upgrade_protocolre     sX   € õ ×Ò˜v sÑ+Ô+€EØ€}Ý! +Ð/BÀFÈCÑPÔPÐPÝ• §¢¡¤Ñ/Ô/°·²±´Ð<Ð<r7   úlist[UpgradeProtocol]c                ó0   — t          t          | dd¦  «        S )zÆ
    Parse an ``Upgrade`` header.

    Return a list of HTTP protocols.

    Args:
        header: Value of the ``Upgrade`` header.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    r   ÚUpgrade)rY   re   ra   s    r0   r   r     s   € õ Õ,¨f°a¸ÑCÔCÐCr7   útuple[ExtensionParameter, int]c                óž  — t          | ||¦  «        \  }}t          | |¦  «        }d}t          | |¦  «        dk    rŽt          | |dz   ¦  «        }t          | |¦  «        dk    rC|}t          | ||¦  «        \  }}t                               |¦  «        €t          |d| |¦  «        ‚nt          | ||¦  «        \  }}t          | |¦  «        }||f|fS )zÌ
    Parse a single extension parameter from ``header`` at the given position.

    Return a ``(name, value)`` pair and the new position.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    Nú=r   rL   zinvalid quoted header content)rC   r<   r6   rI   r@   rN   r	   )r1   r2   r=   ÚnamerJ   Ú
pos_befores         r0   Úparse_extension_item_paramrn   .  sð   € õ ˜F C¨Ñ5Ô5�I€Dˆ#Ý
�F˜CÑ
 Ô
 €Cà€EÝ�&˜#ÑÔ #Ò%Ð%Ý˜  a¡Ñ(Ô(ˆÝ�f˜cÑ"Ô" cÒ)Ð)ØˆJÝ,¨V°S¸+ÑFÔF‰JˆE�3õ ×"Ò" 5Ñ)Ô)Ð1Ý)ØÐ!@À&È*ñô ð ð 2õ
 % V¨S°+Ñ>Ô>‰JˆE�3Ý˜ Ñ$Ô$ˆà�%ˆ=˜#ÐÐr7   útuple[ExtensionHeader, int]c                óH  — t          | ||¦  «        \  }}t          | |¦  «        }g }t          | |¦  «        dk    rPt          | |dz   ¦  «        }t          | ||¦  «        \  }}|                     |¦  «         t          | |¦  «        dk    °Pt          t          |¦  «        |f|fS )a  
    Parse an extension definition from ``header`` at the given position.

    Return an ``(extension name, parameters)`` pair, where ``parameters`` is a
    list of ``(name, value)`` pairs, and the new position.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    ú;r   )rC   r<   r6   rn   rV   r   r   )r1   r2   r=   rl   Ú
parametersÚ	parameters         r0   Úparse_extension_itemrt   R  s±   € õ ˜F C¨Ñ5Ô5�I€Dˆ#Ý
�F˜CÑ
 Ô
 €Cà€JÝ
�V˜SÑ
!Ô
! SÒ
(Ð
(Ý˜  a¡Ñ(Ô(ˆÝ3°F¸CÀÑMÔM‰ˆ	�3Ø×Ò˜)Ñ$Ô$Ð$õ �V˜SÑ
!Ô
! SÒ
(Ð
(õ • Ñ%Ô% zÐ2°CÐ7Ð7r7   úlist[ExtensionHeader]c                ó0   — t          t          | dd¦  «        S )aâ  
    Parse a ``Sec-WebSocket-Extensions`` header.

    Return a list of WebSocket extensions and their parameters in this format::

        [
            (
                'extension name',
                [
                    ('parameter name', 'parameter value'),
                    ....
                ]
            ),
            ...
        ]

    Parameter values are :obj:`None` when no value is provided.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    r   zSec-WebSocket-Extensions)rY   rt   ra   s    r0   r   r   k  s   € õ. Õ*¨F°AÐ7QÑRÔRÐRr7   rl   r   rr   úSequence[ExtensionParameter]c                ón   — d                      t          t          | ¦  «        gd„ |D ¦   «         z   ¦  «        S )zc
    Build an extension definition.

    This is the reverse of :func:`parse_extension_item`.

    z; c                ó*   — g | ]\  }}|€|n|› d|› �‘ŒS )Nrk   © )Ú.0rl   rJ   s      r0   ú
<listcomp>z(build_extension_item.<locals>.<listcomp>“  sD   € ð 
ð 
ð 
ñ ��eð �MˆDˆD¨$Ð'8Ð'8°Ð'8Ð'8ð
ð 
ð 
r7   )Újoinr   r   )rl   rr   s     r0   Úbuild_extension_itemr~   ˆ  sK   € ð �9Š9Ý	�c�4‰ŒÐð
ð 
ð  *ð
ñ 
ô 
ñ	
ñô ð r7   Ú
extensionsúSequence[ExtensionHeader]c                ó@   — d                      d„ | D ¦   «         ¦  «        S )zl
    Build a ``Sec-WebSocket-Extensions`` header.

    This is the reverse of :func:`parse_extension`.

    ú, c              3  ó<   K  — | ]\  }}t          ||¦  «        V — Œd S )N)r~   )r{   rl   rr   s      r0   ú	<genexpr>z"build_extension.<locals>.<genexpr>¢  sB   è è € ð ð Ù3C°4¸Õ˜T :Ñ.Ô.ðð ð ð ð ð r7   ©r}   )r   s    r0   r   r   ›  s6   € ð �9Š9ð ð ØGQðñ ô ñ ô ð r7   útuple[Subprotocol, int]c                óX   — t          | ||¦  «        \  }}t          t          |¦  «        |fS )zº
    Parse a subprotocol from ``header`` at the given position.

    Return the subprotocol value and the new position.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    )rC   r   r   r\   s       r0   Úparse_subprotocol_itemrˆ   ª  s.   € õ ˜F C¨Ñ5Ô5�I€Dˆ#Ý•˜TÑ"Ô" CÐ'Ð'r7   úlist[Subprotocol]c                ó0   — t          t          | dd¦  «        S )z 
    Parse a ``Sec-WebSocket-Protocol`` header.

    Return a list of WebSocket subprotocols.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    r   zSec-WebSocket-Protocol)rY   rˆ   ra   s    r0   r   r   º  s   € õ Õ,¨f°aÐ9QÑRÔRÐRr7   ÚsubprotocolsúSequence[Subprotocol]c                ó,   — d                      | ¦  «        S )zl
    Build a ``Sec-WebSocket-Protocol`` header.

    This is the reverse of :func:`parse_subprotocol`.

    r‚   r…   )r‹   s    r0   r   r   Ê  s   € ð �9Š9�\Ñ"Ô"Ð"r7   ÚNonec                óø   — t          | t          ¦  «        st          d¦  «        ‚t          | t          ¦  «        rt          d¦  «        ‚| D ].}t                               |¦  «        st          d|› �¦  «        ‚Œ/dS )zT
    Validate that ``subprotocols`` is suitable for :func:`build_subprotocol`.

    zsubprotocols must be a listz&subprotocols must be a list, not a strzinvalid subprotocol: N)Ú
isinstancer   Ú	TypeErrorr   r@   rN   r.   )r‹   Úsubprotocols     r0   r   r   ×  s˜   € õ
 �l¥HÑ-Ô-ð 7ÝÐ5Ñ6Ô6Ð6Ý�,¥Ñ$Ô$ð BÝÐ@ÑAÔAÐAØ#ð Dð DˆÝ×"Ò" ;Ñ/Ô/ð 	DÝÐB°[ÐBÐBÑCÔCÐCð	DðDð Dr7   Úrealmc                óN   — t          | ¦  «        } t          d¦  «        }d| › d|› �S )z�
    Build a ``WWW-Authenticate`` header for HTTP Basic Auth.

    Args:
        realm: Identifier of the protection space.

    zUTF-8zBasic realm=z
, charset=)rP   )r“   Úcharsets     r0   r   r   å  s4   € õ   Ñ&Ô&€EÝ! 'Ñ*Ô*€GØ4˜%Ð4Ð4¨7Ð4Ð4Ð4r7   z[A-Za-z0-9-._~+/]+=*c                ó°   — t                                | |¦  «        }|€t          |d| |¦  «        ‚|                     ¦   «         |                     ¦   «         fS )z°
    Parse a token68 from ``header`` at the given position.

    Return the token value and the new position.

    Raises:
        InvalidHeaderFormat: On invalid inputs.

    Nzexpected token68)Ú_token68_rer:   r	   rA   r;   rB   s       r0   Úparse_token68r˜   ö  sN   € õ ×Ò˜f cÑ*Ô*€EØ€}Ý! +Ð/AÀ6È3ÑOÔOÐOØ�;Š;‰=Œ=˜%Ÿ)š)™+œ+Ð%Ð%r7   c                óP   — |t          | ¦  «        k     rt          |d| |¦  «        ‚dS )z8
    Check that parsing reached the end of header.

    ztrailing dataN)r5   r	   )r1   r2   r=   s      r0   Ú	parse_endrš     s1   € ð
 �S�‰[Œ[ÒÐÝ! +¨ÀÈÑLÔLÐLð Ðr7   útuple[str, str]c                óX  — t          | dd¦  «        \  }}|                     ¦   «         dk    rt          dd|› �¦  «        ‚t          | |¦  «        dk    rt	          dd| |¦  «        ‚|dz  }t          | |d¦  «        \  }}t          | |d¦  «         	 t          j        | 	                    ¦   «         ¦  «         
                    ¦   «         }n$# t          j        $ r t          dd¦  «        d	‚w xY w	 |                     d
d¦  «        \  }}n# t          $ r t          dd¦  «        d	‚w xY w||fS )a!  
    Parse an ``Authorization`` header for HTTP Basic Auth.

    Return a ``(username, password)`` tuple.

    Args:
        header: Value of the ``Authorization`` header.

    Raises:
        InvalidHeaderFormat: On invalid inputs.
        InvalidHeaderValue: On unsupported inputs.

    r   ÚAuthorizationÚbasiczunsupported scheme: ú zexpected space after schemer   z#expected base64-encoded credentialsNr*   z&expected username:password credentials)rC   Úlowerr
   r6   r	   r˜   rš   Úbase64Ú	b64decodeÚencodeÚdecodeÚbinasciiÚErrorÚsplitr.   )r1   Úschemer2   Úbasic_credentialsÚ	user_passÚusernameÚpasswords          r0   r   r     s�  € õ  ˜f a¨Ñ9Ô9�K€FˆCØ‡|‚|�~„~˜Ò Ð Ý ØØ+ 6Ð+Ð+ñ
ô 
ð 	
õ �&˜#ÑÔ #Ò%Ð%Ý!ØÐ:¸FÀCñ
ô 
ð 	
ð ˆ1�H€CÝ*¨6°3¸ÑHÔHÑÐ�sÝˆf�c˜?Ñ+Ô+Ð+ðÝÔ$Ð%6×%=Ò%=Ñ%?Ô%?Ñ@Ô@×GÒGÑIÔIˆ	ˆ	øÝŒ>ð ð ð Ý ØØ1ñ
ô 
ð ð	ðøøøð
Ø&Ÿ_š_¨S°!Ñ4Ô4Ñˆ�(�(øÝð ð ð Ý ØØ4ñ
ô 
ð ð	ðøøøð �XÐÐs   Â8C
 Ã
!C+Ã/D	 Ä	D%r«   r¬   c                ó–   — d| vsJ ‚| › d|› �}t          j        |                     ¦   «         ¦  «                             ¦   «         }d|z   S )z€
    Build an ``Authorization`` header for HTTP Basic Auth.

    This is the reverse of :func:`parse_authorization_basic`.

    r*   zBasic )r¡   Ú	b64encoder£   r¤   )r«   r¬   rª   r©   s       r0   r   r   ?  s]   € ð �hÐÐÐÐØÐ(Ð(˜hÐ(Ð(€IÝÔ(¨×)9Ò)9Ñ);Ô);Ñ<Ô<×CÒCÑEÔEÐØÐ'Ñ'Ð'r7   )
r   r   r    r!   r"   r#   r   r#   r$   r   )r1   r   r2   r!   r$   r3   )r1   r   r2   r!   r$   r!   )r1   r   r2   r!   r=   r   r$   r>   )rJ   r   r$   r   )
rQ   rR   r1   r   r2   r!   r=   r   r$   rS   )r1   r   r2   r!   r=   r   r$   rZ   )r1   r   r$   r^   )r1   r   r2   r!   r=   r   r$   rb   )r1   r   r$   rf   )r1   r   r2   r!   r=   r   r$   ri   )r1   r   r2   r!   r=   r   r$   ro   )r1   r   r$   ru   )rl   r   rr   rw   r$   r   )r   r€   r$   r   )r1   r   r2   r!   r=   r   r$   r†   )r1   r   r$   r‰   )r‹   rŒ   r$   r   )r‹   rŒ   r$   rŽ   )r“   r   r$   r   )r1   r   r2   r!   r=   r   r$   rŽ   )r1   r   r$   r›   )r«   r   r¬   r   r$   r   )=Ú
__future__r   r¡   r¥   r+   ÚreÚcollections.abcr   Útypingr   r   r   Ú
exceptionsr	   r
   r   r   r   r   r   r   Ú__all__r   r   r6   Úcompiler9   r<   r@   rC   rF   rG   rI   rM   rO   rP   rY   r]   r   rd   re   r   rn   rt   r   Úparse_extension_listr~   r   Úbuild_extension_listrˆ   r   Úparse_subprotocol_listr   Úbuild_subprotocol_listr   r   r—   r˜   rš   r   r   rz   r7   r0   ú<module>rº      sê  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð €ð €GˆC�L„L€ð !&ðð ð ð ð ð ðD	7ð 	7ð 	7ð 	7ð ˆ"Œ*�YÑ
Ô
€ðð ð ð ð ˆBŒJÐ6Ñ7Ô7€	ð&ð &ð &ð &ð  �B”JØJñô Ð ð
 ˆbŒjÐ8Ñ9Ô9€ðDð Dð Dð Dð  ˆrŒzÐ6Ñ7Ô7€ð ˆBŒJ�Ñ'Ô'€	ð
5ð 
5ð 
5ð 
5ð?ð ?ð ?ð ?ðD-ð -ð -ð -ð Hð Hð Hð Hð  ˆrŒzØEñô €ð
=ð =ð =ð =ð$Dð Dð Dð Dð !ð !ð !ð !ðH8ð 8ð 8ð 8ð2Sð Sð Sð Sð4 'Ð ðð ð ð ð&	ð 	ð 	ð 	ð 'Ð ð(ð (ð (ð (ð 
Sð 
Sð 
Sð 
Sð +Ð ð#ð #ð #ð #ð +Ð ðDð Dð Dð Dð5ð 5ð 5ð 5ð ˆbŒjÐ0Ñ1Ô1€ð&ð &ð &ð &ð Mð Mð Mð Mð-ð -ð -ð -ð`(ð (ð (ð (ð (ð (r7   