§
    ÈtºfèZ  ã                   ó"  — d Z ddlZddlZddlmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ 	 ddlmamZ ddlma ddlmZmZ n# e$ r d„ Z e¦   «          Y nw xY wddlm Z   G d„ dej!        ¦  «        Z" G d„ dej!        ¦  «        Z# G d„ dej$        ¦  «        Z% G d„ dej$        ¦  «        Z& e ej'        ¦  «         G d„ dej$        ¦  «        ¦   «         Z(d„ Z)d„ Z* G d„ d¦  «        Z+t.          � G d„ dt2          j,        ¦  «        Z- G d „ d!ee¦  «        Z. G d"„ d#e¦  «        Z/ G d$„ d%e/¦  «        Z0 G d&„ d'e¦  «        Z1 G d(„ d)ee+¦  «        Z2 G d*„ d+¦  «        Z3 G d,„ d-e¦  «        Z4 G d.„ d/e¦  «        Z5dS )0z 
Tests for twisted SSL support.
é    N)ÚdeferÚ
interfacesÚprotocolÚreactor)ÚConnectionDone)ÚwaitUntilAllDisconnected)Úbasic)ÚFilePath)Úplatform)ÚProperlyCloseFilesMixin)ÚTestCase)ÚSSLÚcrypto)Ússl)ÚClientTLSContextÚcertPathc                  ó   — d xa ad S ©N)r   r   © ó    úT/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/test/test_ssl.pyÚ_noSSLr      s   € ð Ðˆˆcˆcˆcr   )Úimplementerc                   ó:   — e Zd ZdZg d¢ZddgZd„ Zd„ Zd„ Zd„ Z	d	S )
ÚUnintelligentProtocola  
    @ivar deferred: a deferred that will fire at connection lost.
    @type deferred: L{defer.Deferred}

    @cvar pretext: text sent before TLS is set up.
    @type pretext: C{bytes}

    @cvar posttext: text sent after TLS is set up.
    @type posttext: C{bytes}
    )s
   first lines   last thing before tls startsó   STARTTLSs   first thing after tls starteds   last thing everc                 ó6   — t          j        ¦   «         | _        d S r   ©r   ÚDeferredÚdeferred©Úselfs    r   Ú__init__zUnintelligentProtocol.__init__7   ó   € ÝœÑ(Ô(ˆŒˆˆr   c                 óD   — | j         D ]}|                      |¦  «         Œd S r   )ÚpretextÚsendLine)r"   Úls     r   ÚconnectionMadez$UnintelligentProtocol.connectionMade:   s2   € Ø”ð 	ð 	ˆAØ�MŠM˜!ÑÔÐÐð	ð 	r   c                 óè   — |dk    rk| j                              t          ¦   «         | j        j        ¦  «         | j        D ]}|                      |¦  «         Œ| j                              ¦   «          d S d S )Nó   READY)Ú	transportÚstartTLSr   ÚfactoryÚclientÚposttextr'   ÚloseConnection)r"   Úliner(   s      r   ÚlineReceivedz"UnintelligentProtocol.lineReceived>   sy   € Ø�8ÒÐØŒN×#Ò#Õ$4Ñ$6Ô$6¸¼Ô8KÑLÔLÐLØ”]ð !ð !�Ø—’˜aÑ Ô Ð Ð ØŒN×)Ò)Ñ+Ô+Ð+Ð+Ð+ð	 Ðr   c                 ó:   — | j                              d ¦  «         d S r   ©r    Úcallback©r"   Úreasons     r   ÚconnectionLostz$UnintelligentProtocol.connectionLostE   ó   € ØŒ×Ò˜tÑ$Ô$Ð$Ð$Ð$r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r0   r#   r)   r3   r9   r   r   r   r   r   '   ss   € € € € € ð	ð 	ð LÐKÐK€Gà0Ð2DÐE€Hð)ð )ð )ðð ð ð,ð ,ð ,ð%ð %ð %ð %ð %r   r   c                   ó2   — e Zd ZdZd	d„Zd„ Zd„ Zd„ Zd„ ZdS )
ÚLineCollectoraJ  
    @ivar deferred: a deferred that will fire at connection lost.
    @type deferred: L{defer.Deferred}

    @ivar doTLS: whether the protocol is initiate TLS or not.
    @type doTLS: C{bool}

    @ivar fillBuffer: if set to True, it will send lots of data once
        C{STARTTLS} is received.
    @type fillBuffer: C{bool}
    Fc                 óR   — || _         || _        t          j        ¦   «         | _        d S r   )ÚdoTLSÚ
fillBufferr   r   r    )r"   rB   rC   s      r   r#   zLineCollector.__init__V   s#   € ØˆŒ
Ø$ˆŒÝœÑ(Ô(ˆŒˆˆr   c                 ó6   — d| j         _        g | j         _        d S )Nr   )r.   ÚrawdataÚlinesr!   s    r   r)   zLineCollector.connectionMade[   s   € Ø"ˆŒÔØˆŒÔÐÐr   c                 ó”  — | j         j                             |¦  «         |dk    r¢| j        r't	          d¦  «        D ]}|                      d¦  «         Œ|                      d¦  «         | j        rBt          t          t          ¬¦  «        }| j	         
                    || j         j        ¦  «         d S |                      ¦   «          d S d S )Nr   iô  sè  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr+   )ÚprivateKeyFileNameÚcertificateFileName)r.   rF   ÚappendrC   Úranger'   rB   ÚServerTLSContextr   r,   r-   ÚserverÚ
setRawMode)r"   r2   ÚxÚctxs       r   r3   zLineCollector.lineReceived_   sÓ   € ØŒÔ×!Ò! $Ñ'Ô'Ð'Ø�;ÒÐØŒð /Ý˜s™œð /ð /�AØ—M’M +Ñ.Ô.Ð.Ð.Ø�MŠM˜(Ñ#Ô#Ð#ØŒzð "Ý&Ý'/Ý(0ðñ ô �ð ”×'Ò'¨¨T¬\Ô-@ÑAÔAÐAÐAÐAà—’Ñ!Ô!Ð!Ð!Ð!ð Ðr   c                 ób   — | j         xj        |z  c_        | j                             ¦   «          d S r   )r.   rE   r,   r1   ©r"   Údatas     r   ÚrawDataReceivedzLineCollector.rawDataReceivedo   s2   € ØŒÐÔ Ñ$ÐÔØŒ×%Ò%Ñ'Ô'Ð'Ð'Ð'r   c                 ó:   — | j                              d ¦  «         d S r   r5   r7   s     r   r9   zLineCollector.connectionLosts   r:   r   N©F)	r;   r<   r=   r>   r#   r)   r3   rT   r9   r   r   r   r@   r@   I   sn   € € € € € ð
ð 
ð)ð )ð )ð )ð
 ð  ð  ð"ð "ð "ð (ð (ð (ð%ð %ð %ð %ð %r   r@   c                   ó   — e Zd ZdZd„ ZdS )ÚSingleLineServerProtocolzK
    A protocol that sends a single line of data at C{connectionMade}.
    c                 ól   — | j                              d¦  «         | j                              ¦   «          d S )Nó   +OK <some crap>
)r,   ÚwriteÚgetPeerCertificater!   s    r   r)   z'SingleLineServerProtocol.connectionMade|   s3   € ØŒ×ÒÐ3Ñ4Ô4Ð4ØŒ×)Ò)Ñ+Ô+Ð+Ð+Ð+r   N)r;   r<   r=   r>   r)   r   r   r   rX   rX   w   s-   € € € € € ðð ð,ð ,ð ,ð ,ð ,r   rX   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚRecordingClientProtocolzv
    @ivar deferred: a deferred that will fire with first received content.
    @type deferred: L{defer.Deferred}
    c                 ó6   — t          j        ¦   «         | _        d S r   r   r!   s    r   r#   z RecordingClientProtocol.__init__‡   r$   r   c                 ó8   — | j                              ¦   «          d S r   )r,   r\   r!   s    r   r)   z&RecordingClientProtocol.connectionMadeŠ   s   € ØŒ×)Ò)Ñ+Ô+Ð+Ð+Ð+r   c                 ó:   — | j                              |¦  «         d S r   r5   rR   s     r   ÚdataReceivedz$RecordingClientProtocol.dataReceived�   r:   r   N)r;   r<   r=   r>   r#   r)   rb   r   r   r   r^   r^   �   sK   € € € € € ðð ð
)ð )ð )ð,ð ,ð ,ð%ð %ð %ð %ð %r   r^   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú ImmediatelyDisconnectingProtocolz•
    A protocol that disconnect immediately on connection. It fires the
    C{connectionDisconnected} deferred of its factory on connetion lost.
    c                 ó8   — | j                              ¦   «          d S r   ©r,   r1   r!   s    r   ÚhandshakeCompletedz3ImmediatelyDisconnectingProtocol.handshakeCompleted˜   s   € ØŒ×%Ò%Ñ'Ô'Ð'Ð'Ð'r   c                 óD   — | j         j                             d ¦  «         d S r   )r.   ÚconnectionDisconnectedr6   r7   s     r   r9   z/ImmediatelyDisconnectingProtocol.connectionLost›   s!   € ØŒÔ+×4Ò4°TÑ:Ô:Ð:Ð:Ð:r   N)r;   r<   r=   r>   rg   r9   r   r   r   rd   rd   ‘   s<   € € € € € ðð ð
(ð (ð (ð;ð ;ð ;ð ;ð ;r   rd   c                 óì  — t          j        ¦   «         }|                     t           j        d¦  «         t          j        ¦   «         }|                     ¦   «         }| |_        ||_        |                     |¦  «         | 	                    |d¦  «         t          j
        ¦   «         }|                     d¦  «         |                     d¦  «         |                     d¦  «         |                     |                     ¦   «         ¦  «         |                     |                     ¦   «         ¦  «         |                     |                     ¦   «         ¦  «         | 	                    |d¦  «         |||fS )z‘
    Create a certificate for given C{organization} and C{organizationalUnit}.

    @return: a tuple of (key, request, certificate) objects.
    i   Úmd5é   r   é<   )r   ÚPKeyÚgenerate_keyÚTYPE_RSAÚX509ReqÚget_subjectÚOÚOUÚ
set_pubkeyÚsignÚX509Úset_serial_numberÚgmtime_adj_notBeforeÚgmtime_adj_notAfterÚ
set_issuerÚset_subjectÚ
get_pubkey)ÚorganizationÚorganizationalUnitÚpkeyÚreqÚsubjectÚcerts         r   ÚgenerateCertificateObjectsr„   Ÿ   s6  € õ Œ;‰=Œ=€DØ×Ò•f”o tÑ,Ô,Ð,Ý
Œ.Ñ
Ô
€CØ�oŠoÑÔ€GØ€G„IØ#€G„JØ‡N‚N�4ÑÔÐØ‡H‚HˆT�5ÑÔÐõ Œ;‰=Œ=€DØ×Ò˜1ÑÔÐØ×Ò˜aÑ Ô Ð Ø×Ò˜RÑ Ô Ð Ø‡O‚O�C—O’OÑ%Ô%Ñ&Ô&Ð&Ø×Ò�S—_’_Ñ&Ô&Ñ'Ô'Ð'Ø‡O‚O�C—N’NÑ$Ô$Ñ%Ô%Ð%Ø‡I‚Iˆd�EÑÔÐà��dˆ?Ðr   c                 óh  — t          ||¦  «        \  }}}d|t          j        fd|t          j        fd|t          j        ffD ]p\  }}}t
          j                             | |f¦  «                             d¦  «        }	t          |	¦  «         
                     |t          j        |¦  «        ¦  «         ŒqdS )z…
    Create certificate files key, req and cert prefixed by C{basename} for
    given C{organization} and C{organizationalUnit}.
    Úkeyr�   rƒ   zutf-8N)r„   r   Údump_privatekeyÚdump_certificate_requestÚdump_certificateÚosÚextsepÚjoinÚencoder
   Ú
setContentÚFILETYPE_PEM)
Úbasenamer~   r   r€   r�   rƒ   ÚextÚobjÚdumpFuncÚfNames
             r   ÚgenerateCertificateFilesr•   »   s¼   € õ
 1°Ð?QÑRÔR�O€Dˆ#ˆtð 
�•fÔ,Ð-Ø	�•VÔ4Ð5Ø	�•vÔ.Ð/ðð Gð GÑˆˆS�(õ
 ”	—’ ¨#˜Ñ/Ô/×6Ò6°wÑ?Ô?ˆÝ�‰Œ×"Ò" 8 8­FÔ,?ÀÑ#EÔ#EÑFÔFÐFÐFðGð Gr   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚContextGeneratingMixinah  
    Offer methods to create L{ssl.DefaultOpenSSLContextFactory} for both client
    and server.

    @ivar clientBase: prefix of client certificate files.
    @type clientBase: C{str}

    @ivar serverBase: prefix of server certificate files.
    @type serverBase: C{str}

    @ivar clientCtxFactory: a generated context factory to be used in
        L{IReactorSSL.connectSSL}.
    @type clientCtxFactory: L{ssl.DefaultOpenSSLContextFactory}

    @ivar serverCtxFactory: a generated context factory to be used in
        L{IReactorSSL.listenSSL}.
    @type serverCtxFactory: L{ssl.DefaultOpenSSLContextFactory}
    c                 óü   — |                       ¦   «         }t          |||¦  «         t          j        t          j                             |df¦  «        t          j                             |df¦  «        g|¢R i |¤Ž}||fS )Nr†   rƒ   )Úmktempr•   r   ÚDefaultOpenSSLContextFactoryrŠ   r‹   rŒ   )r"   ÚorgÚorgUnitÚargsÚkwArgsÚbaseÚserverCtxFactorys          r   ÚmakeContextFactoryz)ContextGeneratingMixin.makeContextFactoryß   sŠ   € Ø�{Š{‰}Œ}ˆÝ   s¨GÑ4Ô4Ð4ÝÔ;ÝŒI�NŠN˜D %˜=Ñ)Ô)ÝŒI�NŠN˜D &˜>Ñ*Ô*ð
ð ð
ð 
ð 
ð ð	
ð 
Ðð Ð%Ð%Ð%r   c                 ón   —  | j         |i |¤Ž\  | _        | _         | j         |i |¤Ž\  | _        | _        d S r   )r¡   Ú
clientBaseÚclientCtxFactoryÚ
serverBaser    )r"   Ú
clientArgsÚclientKwArgsÚ
serverArgsÚserverKwArgss        r   ÚsetupServerAndClientz+ContextGeneratingMixin.setupServerAndClientë   s]   € Ø1H°Ô1HØð2
Ø'ð2
ð 2
Ñ.ˆŒ˜Ô.ð 2I°Ô1HØð2
Ø'ð2
ð 2
Ñ.ˆŒ˜Ô.Ð.Ð.r   N)r;   r<   r=   r>   r¡   rª   r   r   r   r—   r—   Ë   s<   € € € € € ðð ð&
&ð 
&ð 
&ð
ð 
ð 
ð 
ð 
r   r—   c                   ó   — e Zd ZdZdZd„ ZdS )rL   zf
        A context factory with a default method set to
        L{OpenSSL.SSL.SSLv23_METHOD}.
        Fc                 óX   — t           j        |d<   t          j        j        | g|¢R i |¤Ž d S )NÚ	sslmethod)r   ÚSSLv23_METHODr   rš   r#   )r"   r�   Úkws      r   r#   zServerTLSContext.__init__þ   s8   € Ý!Ô/ˆBˆ{‰OÝÔ,Ô5°dÐH¸TÐHÐHÐHÀRÐHÐHÐHÐHÐHr   N)r;   r<   r=   r>   ÚisClientr#   r   r   r   rL   rL   ö   s9   € € € € € ð	ð 	ð
 ˆð	Ið 	Ið 	Ið 	Ið 	Ir   rL   c                   óP   — e Zd ZdZ ej        ed¦  «        €dZd„ Zd„ Z	d„ Z
d„ ZdS )ÚStolenTCPTestszc
    For SSL transports, test many of the same things which are tested for
    TCP transports.
    Nú2Reactor does not support SSL, cannot run SSL testsc                 óà   — t           j                             t          t          ¦  «                             ¦   «         ¦  «        }|                     ¦   «         }t          j        ||||¬¦  «        S )zY
        Create an SSL server with a certificate using L{IReactorSSL.listenSSL}.
        ©Ú	interface)	r   ÚPrivateCertificateÚloadPEMr
   r   Ú
getContentÚoptionsr   Ú	listenSSL)r"   ÚaddressÚ
portNumberr.   rƒ   ÚcontextFactorys         r   ÚcreateServerzStolenTCPTests.createServer  sV   € õ Ô%×-Ò-­hµxÑ.@Ô.@×.KÒ.KÑ.MÔ.MÑNÔNˆØŸš™œˆÝÔ  ¨W°nÐPWÐXÑXÔXÐXr   c                 óV   — t          j        ¦   «         }|                     |||¦  «        S )zG
        Create an SSL client using L{IReactorSSL.connectSSL}.
        )r   ÚCertificateOptionsÚ
connectSSL)r"   r¼   r½   ÚclientCreatorr¾   s        r   ÚconnectClientzStolenTCPTests.connectClient  s*   € õ Ô/Ñ1Ô1ˆØ×'Ò'¨°¸^ÑLÔLÐLr   c                 ó   — t           j        S )zº
        Return L{OpenSSL.SSL.Error} as the expected error type which will be
        raised by a write to the L{OpenSSL.SSL.Connection} object after it has
        been closed.
        )r   ÚErrorr!   s    r   ÚgetHandleExceptionTypez%StolenTCPTests.getHandleExceptionType  s   € õ ŒyÐr   c                 ó.  — t          j        t          j        t          j        d¦  «        t          j        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        ¦  «        t          j        d¦  «        ¦  «        ¦  «        S )a4  
        Return a L{hamcrest.core.matcher.Matcher} for the argument
        L{OpenSSL.SSL.Error} will be constructed with for this case.
        This is basically just a random OpenSSL implementation detail.
        It would be better if this test worked in a way which did not
        require this.
        zSSL routinesÚ	SSL_writeÚssl_write_internalÚ zprotocol is shutdown)ÚhamcrestÚcontainsÚequal_toÚany_ofr!   s    r   ÚgetHandleErrorCodeMatcherz(StolenTCPTests.getHandleErrorCodeMatcher#  s‚   € õ Ô ÝÔÝÔ! .Ñ1Ô1Ý”ÝÔ% kÑ2Ô2ÝÔ%Ð&:Ñ;Ô;ÝÔ% bÑ)Ô)ñô õ
 Ô!Ð"8Ñ9Ô9ñô ñ

ô 

ð 
	
r   )r;   r<   r=   r>   r   ÚIReactorSSLr   Úskipr¿   rÄ   rÇ   rÐ   r   r   r   r²   r²     s|   € € € € € ðð ð
 €zÔ˜g tÑ,Ô,Ð4ØCˆðYð Yð YðMð Mð Mðð ð ð
ð 
ð 
ð 
ð 
r   r²   c                   ód   — e Zd ZdZ ej        ed¦  «        €dZdZdZ	dZ
d„ Zd
d„Zd„ Zd„ Zd	„ ZdS )ÚTLSTestszƒ
    Tests for startTLS support.

    @ivar fillBuffer: forwarded to L{LineCollector.fillBuffer}
    @type fillBuffer: C{bool}
    Nr³   Fc                 ó²   — | j         j        �| j         j                             ¦   «          | j        j        � | j        j                             ¦   «          d S d S r   )ÚclientProtor,   r1   ÚserverProtor!   s    r   ÚtearDownzTLSTests.tearDownJ  sX   € ØÔÔ%Ð1ØÔÔ&×5Ò5Ñ7Ô7Ð7ØÔÔ%Ð1ØÔÔ&×5Ò5Ñ7Ô7Ð7Ð7Ð7ð 2Ð1r   c                 óò  ‡‡— ‰| _         t          j        ¦   «         x}| _        ˆfd„|_        |rd|_        nd|_        ‰| _        t          j        ¦   «         x}| _        ˆfd„|_        |rd|_        nd|_        t          j
        d|d¬¦  «        }|                      |j        ¦  «         t          j        d|                     ¦   «         j        |¦  «         t!          j        ‰j        ‰j        g¦  «        S )a½  
        Helper method to run TLS tests.

        @param clientProto: protocol instance attached to the client
            connection.
        @param serverProto: protocol instance attached to the server
            connection.
        @param clientIsServer: flag indicated if client should initiate
            startTLS instead of server.

        @return: a L{defer.Deferred} that will fire when both connections are
            lost.
        c                  ó   •— ‰ S r   r   ©rÖ   s   €r   ú<lambda>z#TLSTests._runTest.<locals>.<lambda>`  ó   ø€ ˜k€ r   FTc                  ó   •— ‰ S r   r   ©r×   s   €r   rÜ   z#TLSTests._runTest.<locals>.<lambda>h  rÝ   r   r   ú	127.0.0.1rµ   )rÖ   r   ÚClientFactoryÚclientFactoryrM   r/   r×   ÚServerFactoryÚserverFactoryr   Ú	listenTCPÚ
addCleanupÚstopListeningÚ
connectTCPÚgetHostÚportr   ÚgatherResultsr    )r"   rÖ   r×   ÚclientIsServerÚcfÚsfrê   s    ``    r   Ú_runTestzTLSTests._runTestP  sú   øø€ ð 'ˆÔÝ"*Ô"8Ñ":Ô":Ð:ˆˆTÔØ)Ð)Ð)Ð)ˆŒØð 	ØˆBŒIˆIàˆBŒIà&ˆÔÝ"*Ô"8Ñ":Ô":Ð:ˆˆTÔØ)Ð)Ð)Ð)ˆŒØð 	ØˆBŒIˆIàˆBŒIåÔ   B°+Ð>Ñ>Ô>ˆØ�Š˜Ô*Ñ+Ô+Ð+åÔ˜;¨¯ª©¬Ô(;¸RÑ@Ô@Ð@åÔ" KÔ$8¸+Ô:NÐ#OÑPÔPÐPr   c                 ó¢   ‡ — ˆ fd„}‰                       t          ¦   «         t          d‰ j        ¦  «        ¦  «        }|                     |¦  «        S )z~
        Test for server and client startTLS: client should received data both
        before and after the startTLS.
        c                 óv   •— ‰                      ‰j        j        t          j        t          j        z   ¦  «         d S r   )ÚassertEqualrä   rF   r   r&   r0   )Úignorer"   s    €r   Úcheckz TLSTests.test_TLS.<locals>.check{  ó=   ø€ Ø×ÒØÔ"Ô(Ý%Ô-Õ0EÔ0NÑNñô ð ð ð r   T©rï   r   r@   rC   ÚaddCallback©r"   rô   Úds   `  r   Útest_TLSzTLSTests.test_TLSu  sV   ø€ ð	ð 	ð 	ð 	ð 	ð �MŠMÕ/Ñ1Ô1µ=ÀÀtÄÑ3WÔ3WÑXÔXˆØ�}Š}˜UÑ#Ô#Ð#r   c                 ó¢   ‡ — ˆ fd„}‰                       t          ¦   «         t          d‰ j        ¦  «        ¦  «        }|                     |¦  «        S )z›
        Test for server startTLS not followed by a startTLS in client: the data
        received after server startTLS should be received as raw.
        c                 óœ   •— ‰                      ‰j        j        t          j        ¦  «         ‰                     ‰j        j        d¦  «         d S )NzNo encrypted bytes received)rò   rä   rF   r   r&   Ú
assertTruerE   ©Úignoredr"   s    €r   rô   z"TLSTests.test_unTLS.<locals>.checkŠ  sD   ø€ Ø×Ò˜TÔ/Ô5Õ7LÔ7TÑUÔUÐUØ�OŠO˜DÔ.Ô6Ð8UÑVÔVÐVÐVÐVr   Frö   rø   s   `  r   Ú
test_unTLSzTLSTests.test_unTLS„  sa   ø€ ð	Wð 	Wð 	Wð 	Wð 	Wð �MŠMÝ!Ñ#Ô#¥]°5¸$¼/Ñ%JÔ%Jñ
ô 
ˆð �}Š}˜UÑ#Ô#Ð#r   c                 ó¤   ‡ — ˆ fd„}‰                       t          d‰ j        ¦  «        t          ¦   «         d¦  «        }|                     |¦  «        S )z:
        Test startTLS first initiated by client.
        c                 óv   •— ‰                      ‰j        j        t          j        t          j        z   ¦  «         d S r   )rò   râ   rF   r   r&   r0   rþ   s    €r   rô   z)TLSTests.test_backwardsTLS.<locals>.check˜  rõ   r   T)rï   r@   rC   r   r÷   rø   s   `  r   Útest_backwardsTLSzTLSTests.test_backwardsTLS“  s_   ø€ ð
	ð 	ð 	ð 	ð 	ð �MŠMÝ˜$ ¤Ñ0Ô0Õ2GÑ2IÔ2IÈ4ñ
ô 
ˆð �}Š}˜UÑ#Ô#Ð#r   rV   )r;   r<   r=   r>   r   rÑ   r   rÒ   rC   rÖ   r×   rØ   rï   rú   r   r  r   r   r   rÔ   rÔ   :  sž   € € € € € ðð ð €zÔ˜g tÑ,Ô,Ð4ØCˆà€Jà€KØ€Kð8ð 8ð 8ð#Qð #Qð #Qð #QðJ$ð $ð $ð$ð $ð $ð$ð $ð $ð $ð $r   rÔ   c                   ó<   — e Zd ZdZ ej        ed¦  «        €dZdZdS )ÚSpammyTLSTestszA
    Test TLS features with bytes sitting in the out buffer.
    Nr³   T)	r;   r<   r=   r>   r   rÑ   r   rÒ   rC   r   r   r   r  r  ¤  s9   € € € € € ðð ð €zÔ˜g tÑ,Ô,Ð4ØCˆà€J€J€Jr   r  c                   óH   — e Zd Z ej        ed¦  «        €dZdZdZd„ Z	d„ Z
dS )ÚBufferingTestsNr³   c                 óì   — | j         j        �| j         j                             ¦   «          | j        j        �| j        j                             ¦   «          t	          t
          | j         | j        g¦  «        S r   )r×   r,   r1   rÖ   r   r   r!   s    r   rØ   zBufferingTests.tearDown¶  se   € ØÔÔ%Ð1ØÔÔ&×5Ò5Ñ7Ô7Ð7ØÔÔ%Ð1ØÔÔ&×5Ò5Ñ7Ô7Ð7å'­°$Ô2BÀDÔDTÐ1UÑVÔVÐVr   c                 ót  ‡‡— t          ¦   «         xŠ| _        t          ¦   «         xŠ| _        t	          j        ¦   «         }t	          j        ¦   «         x}| _        ˆfd„|_        ˆfd„|_        t          j	        t          t          ¦  «        }t          j        ¦   «         }t          j        d||d¬¦  «        }|                      |j        ¦  «         t          j        d|                     ¦   «         j        ||¦  «        }|                      |j        ¦  «         ‰j                             | j        d¦  «        S )Nc                  ó   •— ‰ S r   r   rß   s   €r   rÜ   z6BufferingTests.test_openSSLBuffering.<locals>.<lambda>Å  ó   ø€  +€ r   c                  ó   •— ‰ S r   r   rÛ   s   €r   rÜ   z6BufferingTests.test_openSSLBuffering.<locals>.<lambda>Æ  r  r   r   rà   rµ   rZ   )rX   r×   r^   rÖ   r   rã   rá   r/   r   rš   r   ÚClientContextFactoryr   r»   ræ   rç   rÂ   ré   rê   Ú
disconnectr    r÷   rò   )	r"   rM   r/   ÚsCTXÚcCTXrê   ÚclientConnectorrÖ   r×   s	          @@r   Útest_openSSLBufferingz$BufferingTests.test_openSSLBuffering¾  s  øø€ Ý)AÑ)CÔ)CÐCˆ�dÔ&Ý)@Ñ)BÔ)BÐBˆ�dÔ&åÔ'Ñ)Ô)ˆÝ'Ô5Ñ7Ô7Ð7ˆ�”à-Ð-Ð-Ð-ˆŒØ-Ð-Ð-Ð-ˆŒåÔ/µ½(ÑCÔCˆÝÔ'Ñ)Ô)ˆåÔ   F¨D¸KÐHÑHÔHˆØ�Š˜Ô*Ñ+Ô+Ð+å!Ô,Ø˜Ÿš™œÔ,¨f°dñ
ô 
ˆð 	�Š˜Ô2Ñ3Ô3Ð3àÔ#×/Ò/ØÔÐ4ñ
ô 
ð 	
r   )r;   r<   r=   r   rÑ   r   rÒ   r×   rÖ   rØ   r  r   r   r   r  r  ¯  sY   € € € € € Ø€zÔ˜g tÑ,Ô,Ð4ØCˆà€KØ€KðWð Wð Wð
ð 
ð 
ð 
ð 
r   r  c                   óP   — e Zd ZdZ ej        ed¦  «        €dZd„ Zd„ Z	d„ Z
d„ ZdS )ÚConnectionLostTestsz'
    SSL connection closing tests.
    Nr³   c                 óæ  ‡ — d}‰                       ||dz   fi ||dz   fi ¦  «         t          j        ¦   «         }t          j        |_        t	          j        d|‰ j        ¦  «        x‰ _        }t          j        ¦   «         }t          |_        t          j        ¦   «         |_        t	          j        d|                     ¦   «         j        |‰ j        ¦  «         |j                             ˆ fd„¦  «        S )Nútwisted.test.test_sslú, clientú, serverr   rà   c                 ó6   •— ‰j                              ¦   «         S r   )Ú
serverPortrç   )ÚignoredResultr"   s    €r   rÜ   z=ConnectionLostTests.testImmediateDisconnect.<locals>.<lambda>ù  s   ø€  $¤/×"?Ò"?Ñ"AÔ"A€ r   )rª   r   rã   ÚProtocolr   r»   r    r  rá   rd   r   r   ri   rÂ   ré   rê   r¤   r÷   )r"   r›   ÚserverProtocolFactoryr  ÚclientProtocolFactorys   `    r   ÚtestImmediateDisconnectz+ConnectionLostTests.testImmediateDisconnectà  s  ø€ Ø%ˆØ×!Ò!Ø�#˜
Ñ"Ð# R¨#¨s°ZÑ/?Ð)@À"ñ	
ô 	
ð 	
õ !)Ô 6Ñ 8Ô 8ÐÝ)1Ô):ÐÔ&Ý'.Ô'8ØÐ$ dÔ&;ñ(
ô (
ð 	
ˆŒ˜*õ !)Ô 6Ñ 8Ô 8ÐÝ)IÐÔ&Ý7<´~Ñ7GÔ7GÐÔ4ÝÔØØ×ÒÑ Ô Ô%Ø!ØÔ!ñ		
ô 	
ð 	
ð %Ô;×GÒGØAÐAÐAÐAñ
ô 
ð 	
r   c                 óº  ‡‡— t          t          j        ¦  «         G d„ dt          j        ¦  «        ¦   «         }d}|                      ||dz   fi ||dz   fi ¦  «          |¦   «         Št          j        ¦   «         }ˆfd„|_        t          j        d|| j	        ¦  «        }|  
                    |j        ¦  «          |¦   «         Št          j        ¦   «         }ˆfd„|_        t          j        d	|                     ¦   «         j        || j        ¦  «         d
„ }t#          j        ‰j                             |¦  «        ‰j                             |¦  «        g¦  «        S )zµ
        Both sides of SSL connection close connection; the connections should
        close cleanly, and only after the underlying TCP connection has
        disconnected.
        c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )úMConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshakeFc                 ó6   — t          j        ¦   «         | _        d S r   )r   r   Údoner!   s    r   r#   zVConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.__init__  s   € Ý!œNÑ,Ô,�”	�	�	r   c                 ó8   — | j                              ¦   «          d S r   rf   r!   s    r   rg   z`ConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.handshakeCompleted
  s   € Ø”×-Ò-Ñ/Ô/Ð/Ð/Ð/r   c                 ó>   — | j                              |¦  «         | ` d S r   )r$  Úerrbackr7   s     r   r9   z\ConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.connectionLost  s!   € Ø”	×!Ò! &Ñ)Ô)Ð)Ø�I�I�Ir   N)r;   r<   r=   ÚgotDatar#   rg   r9   r   r   r   ÚCloseAfterHandshaker"    sF   € € € € € àˆGð-ð -ð -ð0ð 0ð 0ðð ð ð ð r   r)  r  r  r  c                  ó   •— ‰ S r   r   ©ÚserverProtocols   €r   rÜ   zBConnectionLostTests.test_bothSidesLoseConnection.<locals>.<lambda>  ó   ø€ °€ r   r   c                  ó   •— ‰ S r   r   ©ÚclientProtocols   €r   rÜ   zBConnectionLostTests.test_bothSidesLoseConnection.<locals>.<lambda>  r-  r   rà   c                 ó:   — |                       t          ¦  «         d S r   )Útrapr   )Úfailures    r   ÚcheckResultzEConnectionLostTests.test_bothSidesLoseConnection.<locals>.checkResult&  s   € Ø�LŠL�Ñ(Ô(Ð(Ð(Ð(r   )r   r   ÚIHandshakeListenerr   r  rª   rã   r   r»   r    ræ   rç   rá   rÂ   ré   rê   r¤   r   rë   r$  Ú
addErrback)	r"   r)  r›   r  r  r  r4  r0  r,  s	          @@r   Útest_bothSidesLoseConnectionz0ConnectionLostTests.test_bothSidesLoseConnectionü  s˜  øø€ õ 
•ZÔ2Ñ	3Ô	3ð	ð 	ð 	ð 	ð 	¥(Ô"3ñ 	ô 	ñ 
4Ô	3ð	ð &ˆØ×!Ò!Ø�#˜
Ñ"Ð# R¨#¨s°ZÑ/?Ð)@À"ñ	
ô 	
ð 	
ð -Ð,Ñ.Ô.ˆÝ (Ô 6Ñ 8Ô 8ÐØ)?Ð)?Ð)?Ð)?ÐÔ&ÝÔ& qÐ*?ÀÔAVÑWÔWˆ
Ø�Š˜
Ô0Ñ1Ô1Ð1à,Ð,Ñ.Ô.ˆÝ (Ô 6Ñ 8Ô 8ÐØ)?Ð)?Ð)?Ð)?ÐÔ&ÝÔØØ×ÒÑ Ô Ô%Ø!ØÔ!ñ		
ô 	
ð 	
ð	)ð 	)ð 	)õ Ô"àÔ#×.Ò.¨{Ñ;Ô;ØÔ#×.Ò.¨{Ñ;Ô;ðñ
ô 
ð 	
r   c                 ó  ‡	‡
— d}|                       ||dz   fi ||dz   fi ¦  «         d„ }| j                             ¦   «                              t          j        |¦  «         t          j        ¦   «         }t          j	        ¦   «         Š
|j
        ‰
_        t          j        ¦   «         }ˆ
fd„|_        t          j        d|| j        ¦  «        x| _        }t          j        ¦   «         }t          j	        ¦   «         Š	|j
        ‰	_        t          j        ¦   «         }ˆ	fd„|_        t          j        d|                     ¦   «         j        || j        ¦  «         t          j        ||gd	¬
¦  «        }|                     | j        ¦  «        S )Nr  r  r  c                  ó   — dS )NFr   )Úas    r   Úverifyz4ConnectionLostTests.testFailedVerify.<locals>.verify6  s   € Ø�5r   c                  ó   •— ‰ S r   r   r+  s   €r   rÜ   z6ConnectionLostTests.testFailedVerify.<locals>.<lambda>?  r-  r   r   c                  ó   •— ‰ S r   r   r/  s   €r   rÜ   z6ConnectionLostTests.testFailedVerify.<locals>.<lambda>H  r-  r   rà   T)ÚconsumeErrors)rª   r¤   Ú
getContextÚ
set_verifyr   ÚVERIFY_PEERr   r   r   r  r6   r9   rã   r   r»   r    r  rá   rÂ   ré   rê   ÚDeferredListr÷   Ú_cbLostConns)r"   r›   r;  ÚserverConnLostr  r  ÚclientConnLostr  Údlr0  r,  s            @@r   ÚtestFailedVerifyz$ConnectionLostTests.testFailedVerify0  s‘  øø€ Ø%ˆØ×!Ò!Ø�#˜
Ñ"Ð# R¨#¨s°ZÑ/?Ð)@À"ñ	
ô 	
ð 	
ð	ð 	ð 	ð 	Ô×(Ò(Ñ*Ô*×5Ò5µc´oÀvÑNÔNÐNåœÑ)Ô)ˆÝ!Ô*Ñ,Ô,ˆØ(6Ô(?ˆÔ%Ý (Ô 6Ñ 8Ô 8ÐØ)?Ð)?Ð)?Ð)?ÐÔ&Ý'.Ô'8ØÐ$ dÔ&;ñ(
ô (
ð 	
ˆŒ˜*õ œÑ)Ô)ˆÝ!Ô*Ñ,Ô,ˆØ(6Ô(?ˆÔ%Ý (Ô 6Ñ 8Ô 8ÐØ)?Ð)?Ð)?Ð)?ÐÔ&ÝÔØØ×ÒÑ Ô Ô%Ø!ØÔ!ñ		
ô 	
ð 	
õ Ô °Ð @ÐPTÐUÑUÔUˆØ�~Š~˜dÔ/Ñ0Ô0Ð0r   c                 ó<  — |\  \  }}\  }}|                       |¦  «         |                       |¦  «         t          j        g}t          j        ¦   «         rddlm} |                     |¦  «          |j        |Ž   |j        |Ž  | j	         
                    ¦   «         S )Nr   )ÚConnectionLost)ÚassertFalser   rÆ   r   Ú	isWindowsÚtwisted.internet.errorrI  rJ   r2  r  rç   )r"   ÚresultsÚsSuccessÚsResultÚcSuccessÚcResultÚacceptableErrorsrI  s           r   rC  z ConnectionLostTests._cbLostConnsS  sµ   € Ø3:Ñ0Ñˆ�7Ñ0˜h¨à×Ò˜Ñ"Ô"Ð"Ø×Ò˜Ñ"Ô"Ð"åœI˜;Ðõ ÔÑÔð 	4Ø=Ð=Ð=Ð=Ð=Ð=à×#Ò# NÑ3Ô3Ð3àˆŒÐ&Ð'Ð'ØˆŒÐ&Ð'Ð'àŒ×,Ò,Ñ.Ô.Ð.r   )r;   r<   r=   r>   r   rÑ   r   rÒ   r  r7  rG  rC  r   r   r   r  r  Ø  sx   € € € € € ðð ð €zÔ˜g tÑ,Ô,Ð4ØCˆð
ð 
ð 
ð82
ð 2
ð 2
ðh!1ð !1ð !1ðF/ð /ð /ð /ð /r   r  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚFakeContextzK
    L{OpenSSL.SSL.Context} double which can more easily be inspected.
    c                 ó"   — || _         d| _        d S )Nr   )Ú_methodÚ_options)r"   Úmethods     r   r#   zFakeContext.__init__s  s   € ØˆŒØˆŒˆˆr   c                 ó&   — | xj         |z  c_         d S r   )rW  )r"   rº   s     r   Úset_optionszFakeContext.set_optionsw  s   € ØˆŒ˜Ñ ˆŒˆˆr   c                 ó   — d S r   r   ©r"   ÚfileNames     r   Úuse_certificate_filez FakeContext.use_certificate_filez  ó   € Øˆr   c                 ó   — d S r   r   r\  s     r   Úuse_privatekey_filezFakeContext.use_privatekey_file}  r_  r   N)r;   r<   r=   r>   r#   rZ  r^  ra  r   r   r   rT  rT  n  sZ   € € € € € ðð ðð ð ð!ð !ð !ðð ð ðð ð ð ð r   rT  c                   óP   — e Zd ZdZ ej        ed¦  «        €dZd„ Zd„ Z	d„ Z
d„ ZdS )Ú!DefaultOpenSSLContextFactoryTestsz8
    Tests for L{ssl.DefaultOpenSSLContextFactory}.
    Nr³   c                 ó˜   — t          j        t          t          t          ¬¦  «        | _        | j                             ¦   «         | _        d S )N)Ú_contextFactory)r   rš   r   rT  r¾   r?  Úcontextr!   s    r   ÚsetUpz'DefaultOpenSSLContextFactoryTests.setUp‰  sA   € õ "Ô>Ý•hµð
ñ 
ô 
ˆÔð Ô*×5Ò5Ñ7Ô7ˆŒˆˆr   c                 ó   — |                       | j        j        t          j        ¦  «         |                       | j        j        t          j        z  t          j        ¦  «         |                      | j        j        t          j        z  ¦  «         dS )z‹
        L{ssl.DefaultOpenSSLContextFactory.getContext} returns an SSL context
        which can use SSLv3 or TLSv1 but not SSLv2.
        N)	rò   rf  rV  r   Ú
TLS_METHODrW  ÚOP_NO_SSLv2rJ  ÚOP_NO_TLSv1_2r!   s    r   Útest_methodz-DefaultOpenSSLContextFactoryTests.test_method‘  sp   € ð 	×Ò˜œÔ-­s¬~Ñ>Ô>Ð>ð 	×Ò˜œÔ.µ´Ñ@Å#Ä/ÑRÔRÐRð 	×Ò˜œÔ.µÔ1BÑBÑCÔCÐCÐCÐCr   c                 óŒ   — |                       t          j        t          j        t
          |                      ¦   «         ¦  «         dS )zÑ
        Instantiating L{ssl.DefaultOpenSSLContextFactory} with a certificate
        filename which does not identify an existing file results in the
        initializer raising L{OpenSSL.SSL.Error}.
        N)ÚassertRaisesr   rÆ   r   rš   r   r™   r!   s    r   Útest_missingCertificateFilez=DefaultOpenSSLContextFactoryTests.test_missingCertificateFileŸ  s<   € ð 	×ÒÝŒI•sÔ7½À4Ç;Â;Á=Ä=ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óŒ   — |                       t          j        t          j        |                      ¦   «         t          ¦  «         dS )zÑ
        Instantiating L{ssl.DefaultOpenSSLContextFactory} with a private key
        filename which does not identify an existing file results in the
        initializer raising L{OpenSSL.SSL.Error}.
        N)rn  r   rÆ   r   rš   r™   r   r!   s    r   Útest_missingPrivateKeyFilez<DefaultOpenSSLContextFactoryTests.test_missingPrivateKeyFile©  s<   € ð 	×ÒÝŒI•sÔ7¸¿º¹¼Íñ	
ô 	
ð 	
ð 	
ð 	
r   )r;   r<   r=   r>   r   rÑ   r   rÒ   rg  rl  ro  rq  r   r   r   rc  rc  �  sy   € € € € € ðð ð €zÔ˜g tÑ,Ô,Ð4ØCˆð8ð 8ð 8ðDð Dð Dð
ð 
ð 
ð
ð 
ð 
ð 
ð 
r   rc  c                   óD   — e Zd ZdZ ej        ed¦  «        €dZd„ Zd„ Z	dS )ÚClientContextFactoryTestsz0
    Tests for L{ssl.ClientContextFactory}.
    Nr³   c                 ó”   — t          j        ¦   «         | _        t          | j        _        | j                             ¦   «         | _        d S r   )r   r  r¾   rT  re  r?  rf  r!   s    r   rg  zClientContextFactoryTests.setUp¼  s8   € Ý!Ô6Ñ8Ô8ˆÔÝ.9ˆÔÔ+ØÔ*×5Ò5Ñ7Ô7ˆŒˆˆr   c                 óx  — |                       | j        j        t          j        ¦  «         |                       | j        j        t          j        z  t          j        ¦  «         |                      | j        j        t          j        z  ¦  «         |                      | j        j        t          j	        z  ¦  «         dS )z„
        L{ssl.ClientContextFactory.getContext} returns a context which can use
        TLSv1.2 or 1.3 but nothing earlier.
        N)
rò   rf  rV  r   ri  rW  rj  rý   ÚOP_NO_SSLv3ÚOP_NO_TLSv1r!   s    r   rl  z%ClientContextFactoryTests.test_methodÁ  s‡   € ð
 	×Ò˜œÔ-­s¬~Ñ>Ô>Ð>Ø×Ò˜œÔ.µ´Ñ@Å#Ä/ÑRÔRÐRØ�Š˜œÔ-µ´Ñ?Ñ@Ô@Ð@Ø�Š˜œÔ-µ´Ñ?Ñ@Ô@Ð@Ð@Ð@r   )
r;   r<   r=   r>   r   rÑ   r   rÒ   rg  rl  r   r   r   rs  rs  ´  s]   € € € € € ðð ð €zÔ˜g tÑ,Ô,Ð4ØCˆð8ð 8ð 8ð
Að Að Að Að Ar   rs  )6r>   rŠ   rÌ   Útwisted.internetr   r   r   r   rL  r   Útwisted.internet.testingr   Útwisted.protocolsr	   Útwisted.python.filepathr
   Útwisted.python.runtimer   Útwisted.test.test_tcpr   Útwisted.trial.unittestr   ÚOpenSSLr   r   r   Útwisted.test.ssl_helpersr   r   ÚImportErrorr   Úzope.interfacer   ÚLineReceiverr   r@   r  rX   r^   r5  rd   r„   r•   r—   rš   rL   r²   rÔ   r  r  r  rT  rc  rs  r   r   r   ú<module>r„     s^  ððð ð 
€	€	€	à €€€à AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø =Ð =Ð =Ð =Ð =Ð =Ø #Ð #Ð #Ð #Ð #Ð #Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø +Ð +Ð +Ð +Ð +Ð +ðØ#Ð#Ð#Ð#Ð#Ð#Ð#Ð#à$Ð$Ð$Ð$Ð$Ð$ØCÐCÐCÐCÐCÐCÐCÐCÐCøØð ð ð ðð ð ð €F�H„H€H€H€Hðøøøð 'Ð &Ð &Ð &Ð &Ð &ð%ð %ð %ð %ð %˜EÔ.ñ %ô %ð %ðD+%ð +%ð +%ð +%ð +%�EÔ&ñ +%ô +%ð +%ð\,ð ,ð ,ð ,ð ,˜xÔ0ñ ,ô ,ð ,ð%ð %ð %ð %ð %˜hÔ/ñ %ô %ð %ð  €ˆZÔ*Ñ+Ô+ð
;ð 
;ð 
;ð 
;ð 
; xÔ'8ñ 
;ô 
;ñ ,Ô+ð
;ðð ð ð8Gð Gð Gð &
ð &
ð &
ð &
ð &
ñ &
ô &
ð &
õR €?ð
Ið 
Ið 
Ið 
Ið 
I�3Ô;ñ 
Iô 
Ið 
Ið4
ð 4
ð 4
ð 4
ð 4
Ð,¨hñ 4
ô 4
ð 4
ðng$ð g$ð g$ð g$ð g$ˆxñ g$ô g$ð g$ðTð ð ð ð �Xñ ô ð ð&
ð &
ð &
ð &
ð &
�Xñ &
ô &
ð &
ðRS/ð S/ð S/ð S/ð S/˜(Ð$:ñ S/ô S/ð S/ðlð ð ð ð ñ ô ð ð&0
ð 0
ð 0
ð 0
ð 0
¨ñ 0
ô 0
ð 0
ðfAð Að Að Að A ñ Aô Að Að Að As   ÁA ÁA.Á-A.