§
    òŽ’jhC  ã                  ój  — d dl m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	 ddl
mZmZmZmZ ddlmZ ddlmZmZmZmZmZ dd	lmZmZ dd
lmZmZ erddl
mZmZ ddlmZ  e ¦   «         Z! G d„ d¦  «        Z" e"¦   «         Z#e#j$        Z$e#j%        Z%e#j&        Z&e#j'        Z'e#j(        Z(e#j)        Z)e#j*        Z*dS )é    )ÚannotationsN)ÚSequence)ÚTYPE_CHECKINGÚAnyé   )Ú	AlgorithmÚget_default_algorithmsÚ
has_cryptoÚrequires_cryptography)ÚPyJWK)ÚDecodeErrorÚInvalidAlgorithmErrorÚInvalidKeyErrorÚInvalidSignatureErrorÚInvalidTokenError)Úbase64url_decodeÚbase64url_encode)ÚInsecureKeyLengthWarningÚRemovedInPyjwt3Warning)ÚAllowedPrivateKeysÚAllowedPublicKeys)Ú
SigOptionsc                  óà   — e Zd ZU dZ	 	 dAdBd	„ZedCd„¦   «         ZdDd„ZdEd„ZdFd„Z	dGd„Z
eddddfdHd%„Z	 	 	 	 dIdJd.„Z	 	 	 	 dIdKd0„ZdLd1„ZdMd3„Z	 	 	 dNdOd7„Zd8hZd9ed:<   dd;œdPd=„ZdQd?„ZdRd@„ZdS )SÚPyJWSÚJWTNÚ
algorithmsúSequence[str] | NoneÚoptionsúSigOptions | NoneÚreturnÚNonec                óN  — t          ¦   «         | _        |�t          |¦  «        nt          | j        ¦  «        | _        t	          | j                             ¦   «         ¦  «        D ]}|| j        vr| j        |= Œ|                      ¦   «         | _        |�i | j        ¥|¥| _        d S d S )N)r	   Ú_algorithmsÚsetÚ_valid_algsÚlistÚkeysÚ_get_default_optionsr   )Úselfr   r   Úkeys       ú9C:\Projects\DSCons\.venv\Lib\site-packages\jwt\api_jws.pyÚ__init__zPyJWS.__init__$   s±   € õ
 2Ñ3Ô3ˆÔà)Ð5�C�
‰OŒOˆO½3¸tÔ?OÑ;PÔ;Pð 	Ôõ
 ˜Ô(×-Ò-Ñ/Ô/Ñ0Ô0ð 	*ð 	*ˆCØ˜$Ô*Ð*Ð*ØÔ$ SÐ)øà#'×#<Ò#<Ñ#>Ô#>ˆŒØÐØ6˜dœlÐ6¨gÐ6ˆDŒLˆLˆLð Ðó    r   c                 ó   — dddœS )NTF)Úverify_signatureÚenforce_minimum_key_length© r1   r-   r+   r(   zPyJWS._get_default_options7   s   € à$(ÈÐNÐNÐNr-   Úalg_idÚstrÚalg_objr   c                óÆ   — || j         v rt          d¦  «        ‚t          |t          ¦  «        st	          d¦  «        ‚|| j         |<   | j                             |¦  «         dS )zÙ
        Registers a new Algorithm for use when creating and verifying tokens.

        :param str alg_id: the ID of the Algorithm
        :param alg_obj: the Algorithm object
        :type alg_obj: Algorithm
        z Algorithm already has a handler.z!Object is not of type `Algorithm`N)r#   Ú
ValueErrorÚ
isinstancer   Ú	TypeErrorr%   Úadd)r)   r2   r4   s      r+   Úregister_algorithmzPyJWS.register_algorithm;   sm   € ð �TÔ%Ð%Ð%ÝÐ?Ñ@Ô@Ð@å˜'¥9Ñ-Ô-ð 	AÝÐ?Ñ@Ô@Ð@à#*ˆÔ˜Ñ ØÔ×Ò˜VÑ$Ô$Ð$Ð$Ð$r-   c                óz   — || j         vrt          d¦  «        ‚| j         |= | j                             |¦  «         dS )zÂ
        Unregisters an Algorithm for use when creating and verifying tokens
        :param str alg_id: the ID of the Algorithm
        :raises KeyError: if algorithm is not registered.
        zJThe specified algorithm could not be removed because it is not registered.N)r#   ÚKeyErrorr%   Úremove)r)   r2   s     r+   Úunregister_algorithmzPyJWS.unregister_algorithmL   sS   € ð ˜Ô)Ð)Ð)Ýð1ñô ð ð
 Ô˜VÐ$ØÔ×Ò Ñ'Ô'Ð'Ð'Ð'r-   ú	list[str]c                ó*   — t          | j        ¦  «        S )zh
        Returns a list of supported values for the `alg` parameter.

        :rtype: list[str]
        )r&   r%   )r)   s    r+   Úget_algorithmszPyJWS.get_algorithms[   s   € õ �DÔ$Ñ%Ô%Ð%r-   Úalg_namec                óª   — 	 | j         |         S # t          $ r9}t          s|t          v rt	          d|› d�¦  «        |‚t	          d¦  «        |‚d}~ww xY w)a/  
        For a given string name, return the matching Algorithm object.

        Example usage:
        >>> jws_obj = PyJWS()
        >>> jws_obj.get_algorithm_by_name("RS256")

        :param alg_name: The name of the algorithm to retrieve
        :type alg_name: str
        :rtype: Algorithm
        zAlgorithm 'z9' could not be found. Do you have cryptography installed?úAlgorithm not supportedN)r#   r<   r
   r   ÚNotImplementedError)r)   rB   Úes      r+   Úget_algorithm_by_namezPyJWS.get_algorithm_by_namec   s‚   € ð	HØÔ# HÔ-Ð-øÝð 	Hð 	Hð 	HÝð  (Õ.CÐ"CÐ"CÝ)Øe (ÐeÐeÐeñô àðõ &Ð&?Ñ@Ô@ÀaÐGøøøøð	Høøøs   ‚ �
A™4AÁAFTÚpayloadÚbytesr*   ú(AllowedPrivateKeys | PyJWK | str | bytesÚ	algorithmú
str | NoneÚheadersúdict[str, Any] | NoneÚjson_encoderútype[json.JSONEncoder] | NoneÚis_payload_detachedÚboolÚsort_headersc                óv  — g }|t           u r t          |t          ¦  «        r|j        }	n'd}	n$|€ t          |t          ¦  «        r|j        }	nd}	n|}	|r:|                     d¦  «        }
|
r|d         }	|                     d¦  «        }|du rd}| j        |	dœ}|r,|                      |d¬¦  «         |                     |¦  «         |d	         s|d	= |rMd|d<   |                     d
g ¦  «        }t          |t          ¦  «        st          d¦  «        ‚d|vr	g |¢d‘|d
<   nd|v r|d= t          j        |d||¬¦  «                             ¦   «         }|                     t          |¦  «        ¦  «         |r|}nt          |¦  «        }|                     |¦  «         d                     |¦  «        }|                      |	¦  «        }t          |t          ¦  «        r|j        }|                     |¦  «        }|                     |¦  «        }|rF| j                             dd¦  «        rt+          |¦  «        ‚t-          j        |t0          d¬¦  «         |                     ||¦  «        }|                     t          |¦  «        ¦  «         |rd|d<   d                     |¦  «        }|                     d¦  «        S )NÚHS256ÚnoneÚalgÚb64FT)ÚtyprW   ©ÚencodingrY   Úcritz%Invalid 'crit' header: must be a list)ú,ú:)Ú
separatorsÚclsÚ	sort_keysó   .r0   é   ©Ú
stacklevelr-   r   úutf-8)Ú_ALGORITHM_UNSETr7   r   Úalgorithm_nameÚgetÚ
header_typÚ_validate_headersÚupdater&   r   ÚjsonÚdumpsÚencodeÚappendr   ÚjoinrG   r*   Úprepare_keyÚcheck_key_lengthr   r   ÚwarningsÚwarnr   ÚsignÚdecode)r)   rH   r*   rK   rM   rO   rQ   rS   ÚsegmentsÚ
algorithm_Úheaders_algÚheaders_b64ÚheaderÚexisting_critÚjson_headerÚmsg_payloadÚsigning_inputr4   Úkey_length_msgÚ	signatureÚencoded_strings                        r+   ro   zPyJWS.encodex   s  € ð !#ˆð Õ(Ð(Ð(Ý˜#�uÑ%Ô%ð %Ø Ô/�
�
à$�
�
ØÐÝ˜#�uÑ%Ô%ð $Ø Ô/�
�
à#�
�
à"ˆJð ð 	+Ø!Ÿ+š+ eÑ,Ô,ˆKØð ,Ø$ Uœ^�
à!Ÿ+š+ eÑ,Ô,ˆKØ˜eÐ#Ð#Ø&*Ð#ð *.¬ÀÐ!LÐ!Lˆàð 	#Ø×"Ò" 7°TÐ"Ñ:Ô:Ð:Ø�MŠM˜'Ñ"Ô"Ð"à�eŒ}ð 	Ø�u�àð 	Ø!ˆF�5‰Mð
 #ŸJšJ v¨rÑ2Ô2ˆMÝ˜m­TÑ2Ô2ð QÝ'Ð(OÑPÔPÐPØ˜MÐ)Ð)Ø!8 =Ð!8°%Ð!8��v‘øØ�fˆ_ˆ_à�u�å”jØ˜z¨|À|ð
ñ 
ô 
ç
Š&‰(Œ(ð 	ð 	�ŠÕ(¨Ñ5Ô5Ñ6Ô6Ð6àð 	4Ø!ˆKˆKå*¨7Ñ3Ô3ˆKØ�Š˜Ñ$Ô$Ð$ð Ÿ	š	 (Ñ+Ô+ˆà×,Ò,¨ZÑ8Ô8ˆÝ�c�5Ñ!Ô!ð 	Ø”'ˆCØ×!Ò! #Ñ&Ô&ˆà ×1Ò1°#Ñ6Ô6ˆØð 	VØŒ|×ÒÐ <¸eÑDÔDð VÝ% nÑ5Ô5Ð5å”˜nÕ.FÐSTÐUÑUÔUÐUà—L’L °Ñ4Ô4ˆ	à�ŠÕ(¨Ñ3Ô3Ñ4Ô4Ð4ð ð 	ØˆH�Q‰KØŸš 8Ñ,Ô,ˆà×$Ò$ WÑ-Ô-Ð-r-   Ú Újwtústr | bytesú'AllowedPublicKeys | PyJWK | str | bytesÚdetached_payloadúbytes | NoneÚkwargsúdict[str, Any]c                óæ  — |r>t          j        dt          |                     ¦   «         ¦  «        › �t          d¬¦  «         |€| j        }ni | j        ¥|¥}|d         }|r&|s$t          |t          ¦  «        st          d¦  «        ‚|  	                    |¦  «        \  }	}
}}|  
                    |¦  «         |                     dd¦  «        du rƒ|                     d	¦  «        pg }t          |t          ¦  «        rd|vrt          d
¦  «        ‚|€t          d¦  «        ‚|}	d                     |
                     dd¦  «        d         |	g¦  «        }
|r|                      |
|||||¬¦  «         |	||dœS )Nzypassing additional kwargs to decode_complete() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rc   rd   r/   z\It is required that you pass in a value for the "algorithms" argument when calling decode().rX   TFr\   zAThe 'b64' header parameter requires 'b64' to be listed in 'crit'.zƒIt is required that you pass in a value for the "detached_payload" argument to decode a message having the b64 header set to false.rb   r   r   )r   )rH   r|   r‚   )rt   ru   Útupler'   r   r   r7   r   r   Ú_loadrk   ri   r&   r   rq   ÚrsplitÚ_verify_signature)r)   r…   r*   r   r   rˆ   rŠ   Úmerged_optionsr/   rH   r€   r|   r‚   r\   s                 r+   Údecode_completezPyJWS.decode_completeÛ   sä  € ð ð 	ÝŒMð>å',¨V¯[ª[©]¬]Ñ';Ô';ð>ð >õ 'Øðñ ô ð ð ˆ?Ø!œ\ˆNˆNà8 ¤Ð8°Ð8ˆNà)Ð*<Ô=Ðàð 	 Jð 	µzÀ#ÅuÑ7MÔ7Mð 	ÝØnñô ð ð 59·J²J¸s±O´OÑ1ˆ� ¨	à×Ò˜vÑ&Ô&Ð&à�:Š:�e˜TÑ"Ô" eÐ+Ð+ð —:’:˜fÑ%Ô%Ð+¨ˆDÝ˜d¥DÑ)Ô)ð ¨U¸$Ð->Ð->Ý'ØWñô ð ð  Ð'Ý!ð Zñô ð ð 'ˆGØ ŸIšI }×';Ò';¸DÀ!Ñ'DÔ'DÀQÔ'GÈÐ&QÑRÔRˆMàð 	Ø×"Ò"ØØØØØØ&ð #ñ ô ð ð ØØ"ð
ð 
ð 	
r-   r   c                óÆ   — |r>t          j        dt          |                     ¦   «         ¦  «        › �t          d¬¦  «         |                      |||||¬¦  «        }|d         S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rc   rd   )rˆ   rH   )rt   ru   r�   r'   r   r’   )r)   r…   r*   r   r   rˆ   rŠ   Údecodeds           r+   rw   zPyJWS.decode  s„   € ð ð 	ÝŒMð>å',¨V¯[ª[©]¬]Ñ';Ô';ð>ð >õ 'Øðñ ô ð ð ×&Ò&Ø��j 'Ð<Lð 'ñ 
ô 
ˆð �yÔ!Ð!r-   c                óf   — |                       |¦  «        d         }|                      |¦  «         |S )zÎReturns back the JWT header parameters as a `dict`

        Note: The signature is not verified so the header parameters
        should not be fully trusted until signature verification is complete
        rc   )rŽ   rk   )r)   r…   rM   s      r+   Úget_unverified_headerzPyJWS.get_unverified_header3  s1   € ð —*’*˜S‘/”/ !Ô$ˆØ×Ò˜wÑ'Ô'Ð'àˆr-   ú*tuple[bytes, bytes, dict[str, Any], bytes]c                óö  — t          |t          ¦  «        r|                     d¦  «        }t          |t          ¦  «        st	          dt          › �¦  «        ‚	 |                     dd¦  «        \  }}|                     dd¦  «        \  }}n"# t          $ r}t	          d¦  «        |‚d }~ww xY w	 t          |¦  «        }n.# t          t          j        f$ r}t	          d¦  «        |‚d }~ww xY w	 t          j        |¦  «        }n%# t          $ r}	t	          d|	› �¦  «        |	‚d }	~	ww xY wt          |t          ¦  «        st	          d¦  «        ‚|                     d	d
¦  «        du r|rt	          d¦  «        ‚d}
n?	 t          |¦  «        }
n.# t          t          j        f$ r}t	          d¦  «        |‚d }~ww xY w	 t          |¦  «        }n.# t          t          j        f$ r}t	          d¦  «        |‚d }~ww xY w|
|||fS )Nrf   z$Invalid token type. Token must be a rb   r   zNot enough segmentszInvalid header paddingzInvalid header string: z,Invalid header string: must be a json objectrX   TFz2Payload segment must be empty when 'b64' is false.r-   zInvalid payload paddingzInvalid crypto padding)r7   r3   ro   rI   r   r�   Úsplitr6   r   r8   ÚbinasciiÚErrorrm   ÚloadsÚdictri   )r)   r…   r€   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚerrÚheader_datar|   rF   rH   r‚   s               r+   rŽ   zPyJWS._load>  sj  € Ý�c�3ÑÔð 	&Ø—*’*˜WÑ%Ô%ˆCå˜#�uÑ%Ô%ð 	NÝÐLÅUÐLÐLÑMÔMÐMð	>Ø,/¯JªJ°t¸QÑ,?Ô,?Ñ)ˆM˜>Ø.;×.AÒ.AÀ$ÈÑ.JÔ.JÑ+ˆN˜O˜OøÝð 	>ð 	>ð 	>ÝÐ3Ñ4Ô4¸#Ð=øøøøð	>øøøð	AÝ*¨>Ñ:Ô:ˆKˆKøÝ�8œ>Ð*ð 	Að 	Að 	AÝÐ6Ñ7Ô7¸SÐ@øøøøð	Aøøøð	DÝ%)¤Z°Ñ%<Ô%<ˆFˆFøÝð 	Dð 	Dð 	DÝÐ;¸Ð;Ð;Ñ<Ô<À!ÐCøøøøð	Døøøõ ˜&¥$Ñ'Ô'ð 	NÝÐLÑMÔMÐMà�:Š:�e˜TÑ"Ô" eÐ+Ð+ð ð XÝ!Ð"VÑWÔWÐWØˆGˆGðFÝ*¨?Ñ;Ô;��øÝ�xœ~Ð.ð Fð Fð FÝ!Ð";Ñ<Ô<À#ÐEøøøøðFøøøð	AÝ(¨Ñ8Ô8ˆIˆIøÝ�8œ>Ð*ð 	Að 	Að 	AÝÐ6Ñ7Ô7¸SÐ@øøøøð	Aøøøð ˜¨°	Ð:Ð:sx   Á2B Â
B*ÂB%Â%B*Â.B> Â>C)ÃC$Ã$C)Ã-D Ä
D$ÄDÄD$Å8F ÆF3ÆF.Æ.F3Æ7G ÇG2ÇG-Ç-G2r€   r|   r‚   c                ó  — |�|n| j         }|€t          |t          ¦  «        r|j        g}	 |d         }n# t          $ r t          d¦  «        d ‚w xY w|r|�||vrt          d¦  «        ‚t          |t          ¦  «        r4||j        k    rt          d|›d|j        ›�¦  «        ‚|j        }	|j        }
nN	 |                      |¦  «        }	n"# t          $ r}t          d¦  «        |‚d }~ww xY w|	 
                    |¦  «        }
|	                     |
¦  «        }|rA|                     dd¦  «        rt          |¦  «        ‚t          j        |t           d	¬
¦  «         |	                     ||
|¦  «        st%          d¦  «        ‚d S )NrW   zAlgorithm not specifiedz&The specified alg value is not allowedzToken algorithm z$ does not match the key's algorithm rD   r0   Fé   rd   zSignature verification failed)r   r7   r   rh   r<   r   r   r*   rG   rE   rr   rs   ri   r   rt   ru   r   Úverifyr   )r)   r€   r|   r‚   r*   r   r   Úeffective_optionsrW   r4   Úprepared_keyrF   r�   s                r+   r�   zPyJWS._verify_signaturep  sù  € ð (/Ð':˜G˜GÀÄÐàÐ¥*¨Sµ%Ñ"8Ô"8ÐØÔ,Ð-ˆJð	MØ˜”-ˆCˆCøÝð 	Mð 	Mð 	MÝ'Ð(AÑBÔBÈÐLð	Møøøð ð 	R�zÐ-°#¸ZÐ2GÐ2GÝ'Ð(PÑQÔQÐQå�c�5Ñ!Ô!ð 	4ð �cÔ(Ò(Ð(Ý+ð8 sð 8ð 8Ø!$Ô!3ð8ð 8ñô ð ð ”mˆGØœ7ˆLˆLðNØ×4Ò4°SÑ9Ô9��øÝ&ð Nð Nð NÝ+Ð,EÑFÔFÈAÐMøøøøðNøøøà"×.Ò.¨sÑ3Ô3ˆLà ×1Ò1°,Ñ?Ô?ˆØð 	VØ ×$Ò$Ð%AÀ5ÑIÔIð VÝ% nÑ5Ô5Ð5å”˜nÕ.FÐSTÐUÑUÔUÐUà�~Š~˜m¨\¸9ÑEÔEð 	IÝ'Ð(GÑHÔHÐHð	Ið 	Is!   ¬5 µAÂ4C
 Ã

C)ÃC$Ã$C)rX   zset[str]Ú_supported_critrZ   r[   c               ó‚   — d|v r|                       |d         ¦  «         |sd|v r|                      |¦  «         d S d S d S )NÚkidr\   )Ú_validate_kidÚ_validate_crit)r)   rM   r[   s      r+   rk   zPyJWS._validate_headers¦  sc   € ð �GÐÐØ×Ò˜w uœ~Ñ.Ô.Ð.Øð 	)˜F gÐ-Ð-Ø×Ò Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)Ð-Ð-r-   rª   c                óN   — t          |t          ¦  «        st          d¦  «        ‚d S )Nz(Key ID header parameter must be a string)r7   r3   r   )r)   rª   s     r+   r«   zPyJWS._validate_kid®  s0   € Ý˜#�sÑ#Ô#ð 	PÝ#Ð$NÑOÔOÐOð	Pð 	Pr-   c                ó:  — |d         }t          |t          ¦  «        rt          |¦  «        dk    rt          d¦  «        ‚|D ]X}t          |t          ¦  «        st          d¦  «        ‚|| j        vrt          d|› �¦  «        ‚||vrt          d|› d�¦  «        ‚ŒYd S )Nr\   r   z/Invalid 'crit' header: must be a non-empty listz-Invalid 'crit' header: values must be stringsz Unsupported critical extension: zCritical extension 'z' is missing from headers)r7   r&   Úlenr   r3   r¨   )r)   rM   r\   Úexts       r+   r¬   zPyJWS._validate_crit²  sË   € Ø�vŒˆÝ˜$¥Ñ%Ô%ð 	W­¨T©¬°aª¨Ý#Ð$UÑVÔVÐVØð 	ð 	ˆCÝ˜c¥3Ñ'Ô'ð YÝ'Ð(WÑXÔXÐXØ˜$Ô.Ð.Ð.Ý'Ð(PÈ3Ð(PÐ(PÑQÔQÐQØ˜'Ð!Ð!Ý'ØI¨3ÐIÐIÐIñô ð ð "ð	ð 	r-   )NN)r   r   r   r   r    r!   )r    r   )r2   r3   r4   r   r    r!   )r2   r3   r    r!   )r    r?   )rB   r3   r    r   )rH   rI   r*   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rR   r    r3   )r„   NNN)r…   r†   r*   r‡   r   r   r   r   rˆ   r‰   rŠ   r‹   r    r‹   )r…   r†   r*   r‡   r   r   r   r   rˆ   r‰   rŠ   r‹   r    r   )r…   r†   r    r‹   )r…   r†   r    r—   )r„   NN)r€   rI   r|   r‹   r‚   rI   r*   r‡   r   r   r   r   r    r!   )rM   r‹   r[   rR   r    r!   )rª   r   r    r!   )rM   r‹   r    r!   )Ú__name__Ú
__module__Ú__qualname__rj   r,   Ústaticmethodr(   r:   r>   rA   rG   rg   ro   r’   rw   r–   rŽ   r�   r¨   Ú__annotations__rk   r«   r¬   r1   r-   r+   r   r   !   sð  € € € € € € Ø€Jð ,0Ø%)ð7ð 7ð 7ð 7ð 7ð& ðOð Oð Oñ „\ðOð%ð %ð %ð %ð"(ð (ð (ð (ð&ð &ð &ð &ðHð Hð Hð Hð2 !1Ø)-Ø6:Ø$)Ø!ða.ð a.ð a.ð a.ð a.ðL 8:Ø+/Ø%)Ø)-ð@
ð @
ð @
ð @
ð @
ðJ 8:Ø+/Ø%)Ø)-ð"ð "ð "ð "ð "ð,	ð 	ð 	ð 	ð0;ð 0;ð 0;ð 0;ðn 8:Ø+/Ø%)ð1Ið 1Ið 1Ið 1Ið 1Iðh "' €OÐ'Ð'Ð'Ñ'ð <Að)ð )ð )ð )ð )ð )ðPð Pð Pð Pðð ð ð ð ð r-   r   )+Ú
__future__r   rš   rm   rt   Úcollections.abcr   Útypingr   r   r   r   r	   r
   r   Úapi_jwkr   Ú
exceptionsr   r   r   r   r   Úutilsr   r   r   r   r   r   Útypesr   Úobjectrg   r   Ú_jws_global_objro   r’   rw   r:   r>   rG   r–   r1   r-   r+   ú<module>r¿      sâ  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fàð "ØAÐAÐAÐAÐAÐAÐAÐAØ!Ð!Ð!Ð!Ð!Ð!à�6‘8”8Ð ð]ð ]ð ]ð ]ð ]ñ ]ô ]ð ]ð@ �%‘'”'€Ø	Ô	€Ø!Ô1€Ø	Ô	€Ø$Ô7Ð Ø&Ô;Ð Ø'Ô=Ð Ø'Ô=Ð Ð Ð r-   