
    hծ                     H   d Z ddlmZ ddlmZmZmZ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mZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0 dd	l1m2Z2  G d
 de          Z3 G d de          Z4 G d de          Z5 G d de          Z6 G d de          Z7 G d de          Z8 G d de          Z9 G d de          Z: G d de          Z; G d de          Z< G d de          Z= G d  d!e          Z> G d" d#e          Z? G d$ d%e          Z@ G d& d'e          ZA G d( d)e          ZB G d* d+e          ZC G d, d-e          ZD G d. d/e          ZE G d0 d1e          ZF G d2 d3e          ZG G d4 d5e          ZH G d6 d7e!          ZI G d8 d9e          ZJ G d: d;e          ZK G d< d=e          ZL eG             eG eF ed>           ed?          @          gA           eG eF edB           edC          @          gA          gZM G dD dEe          ZN G dF dGe          ZO G dH dIe          ZP G dJ dKe          ZQ G dL dMe          ZR G dN dOe          ZS G dP dQe          ZT G dR dSe          ZU G dT dUe          ZV G dV dWe          ZW G dX dYe          ZX G dZ d[e          ZYg d\ZZ G d] d^e          Z[g d_Z\ G d` dae          Z] G db dce          Z^ G dd dee          Z_ G df dge          Z` G dh die          Za G dj dke          Zbg dlZc G dm dne          Zd G do dpe          Ze G dq dre          Zf G ds dte          Zg G du dve          Zh G dw dxe          Zi G dy dze          Zj G d{ d|e          Zk G d} d~e          Zl G d de          Zm G d de          Zn G d de          Zo G d de          Zp G d de          Zq G d de          Zr G d de          Zs G d de          Zt G d de          Zu G d de          Zv G d de          Zw G d de          Zx G d de          Zy G d de          Zz G d de          Z{ G d de          Z| G d de          Z} G d de          Z~ G d de          Zi deUdeVde]de^deidejdeadebdeddehdeedefdegdeldetdesde`eTemeneveue|e}e~eexeze{dZ G d de#          Z G d de!          Z G d de          Z G d de          Z G d de          Z G d de!          Z G dÄ de          Z G dń de          Z G dǄ de,          Z G dɄ de*          Z eG             eG eF ed>           ed?          @          gA           eG eF edB           ed˦          @          gA          gZ eG             eG eF ed>           ed?          @          gA           eG eF edB           ed̦          @          gA          gZ G d̈́ de          Zg dϢZdЄ eD             Z G dф de          Z G dӄ de!          Z G dՄ de          Z G dׄ de          Z G dل de          Z G dۄ de!          Z G d݄ de          Z G d߄ de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de!          Z G d de          Zg dZ G d de          ZdS )z
X.509 certificates.
    )conf)ASN1_CodecsASN1_OIDASN1_IA5_STRING	ASN1_NULLASN1_PRINTABLE_STRINGASN1_UTC_TIMEASN1_UTF8_STRING)ASN1_Packet)ASN1F_BIT_STRING_ENCAPSASN1F_BIT_STRINGASN1F_BMP_STRINGASN1F_BOOLEANASN1F_CHOICEASN1F_enum_INTEGERASN1F_ENUMERATEDASN1F_fieldASN1F_FLAGSASN1F_GENERALIZED_TIMEASN1F_IA5_STRINGASN1F_INTEGERASN1F_ISO646_STRING
ASN1F_NULL	ASN1F_OIDASN1F_optionalASN1F_PACKETASN1F_PRINTABLE_STRINGASN1F_SEQUENCE_OFASN1F_SEQUENCEASN1F_SET_OFASN1F_STRING_PacketFieldASN1F_STRINGASN1F_T61_STRINGASN1F_UNIVERSAL_STRINGASN1F_UTC_TIMEASN1F_UTF8_STRING)Packet)PacketFieldMultipleTypeField)ZuluTimeGeneralizedTime)	plain_strc                   4    e Zd Zej        Z edd          ZdS )	ASN1P_OIDoid0N__name__
__module____qualname__r   BER
ASN1_codecr   	ASN1_root     U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/x509.pyr.   r.   5   s&        J	%%%IIIr9   r.   c                   4    e Zd Zej        Z edd          ZdS )ASN1P_INTEGERnumberr   Nr2   r3   r4   r   r5   r6   r   r7   r8   r9   r:   r<   r<   :   s&        Jh**IIIr9   r<   c                   b    e Zd Zej        Z e edd           edd          dd          Z	dS )ASN1P_PRIVSEQstr intr   T)explicit_tagflexible_tagN)
r2   r3   r4   r   r5   r6   r   r   r"   r7   r8   r9   r:   r@   r@   ?   sR         J##UA	  IIIr9   r@   c                   \    e Zd Zej        Z e edd           edd                    ZdS )RSAPublicKeymodulus
   publicExponent   N	r2   r3   r4   r   r5   r6   r   r   r7   r8   r9   r:   rG   rG   S   sE        Ji$$&**, ,IIIr9   rG   c                   r    e Zd Zej        Z e edd           edd           edd                    ZdS )RSAOtherPrimeInfoprimer   exponentcoefficientNrL   r8   r9   r:   rN   rN   Z   sS        Jgq!!j!$$mQ'') )IIIr9   rN   c                   &   e Zd Zej        Z e eddddg           edd           edd           ed	d           ed
d           edd           edd           edd           edd           e	 e
dde                    
  
        ZdS )RSAPrivateKeyversionr   z	two-primemultirH   rI   rJ   rK   privateExponentprime1   prime2   	exponent1	exponent2rQ      otherPrimeInfosN)r2   r3   r4   r   r5   r6   r   r   r   r   r   rN   r7   r8   r9   r:   rS   rS   b   s        J9a+w)?@@i$$&**'++h""h""k1%%k1%%mQ''//1 1	2 	23 3IIIr9   rS   c                   \    e Zd Zej        Z e edd           edd                    Z	dS )	ECFieldID	fieldTypezprime-fieldrO   r   N)
r2   r3   r4   r   r5   r6   r   r   r   r7   r8   r9   r:   r`   r`   x   sD        J	+}--gq!!# #IIIr9   r`   c            
           e Zd Zej        Z e edd           edd           e e	dd                              Z
dS )ECCurvearB   bseedN)r2   r3   r4   r   r5   r6   r   r"   r   r   r7   r8   r9   r:   rc   rc      sc        JS"S"VT**	, 	,- -IIIr9   rc   c                       e Zd Zej        Z e eddddi           ed e	            e	           ed e
            e
           edd           edd	           e ed
d                              ZdS )ECSpecifiedDomainrT   r]   ecpVer1fieldIDcurvebaserB   orderr   cofactorN)r2   r3   r4   r   r5   r6   r   r   r   r`   rc   r"   r   r   r7   r8   r9   r:   rh   rh      s        J9a!Y88Y		Y77Wggii11VR  gq!!M*d++	- 	-. .IIIr9   rh   c                   L    e Zd Zej        Z ed ed          ee	e
          ZdS )ECParametersrk   
ansip384r1N)r2   r3   r4   r   r5   r6   r   r   r   r   rh   r7   r8   r9   r:   rp   rp      s=        JWhh|&<&<&'.0 0IIIr9   rp   c                   4    e Zd Zej        Z edd          ZdS )ECDSAPublicKeyecPointrB   Nr2   r3   r4   r   r5   r6   r   r7   r8   r9   r:   rs   rs      '        J  B//IIIr9   rs   c                       e Zd Zej        Z e eddddi           edd           e	 e
dded	                     e	 e
d
ded	                              ZdS )ECDSAPrivateKeyrT   r]   ecPrivkeyVer1
privateKeyrB   
parametersN   rD   	publicKey   )r2   r3   r4   r   r5   r6   r   r   r"   r   r   rp   rs   r7   r8   r9   r:   rx   rx      s        J9a!_)=>>\2&&Lt\&*, , ,	- 	- 	Ld'&*, , ,	- 	-	. 	.IIIr9   rx   c                   \    e Zd Zej        Z e edd           edd                    ZdS )ECDSASignaturerr   sNrL   r8   r9   r:   r   r      sD        Jc1c1 IIIr9   r   c                   4    e Zd Zej        Z edd          ZdS )EdDSAPublicKeyrt   rB   Nru   r8   r9   r:   r   r      rv   r9   r   c                   F    e Zd Zej        Z e edd                    ZdS )AlgorithmIdentifier	algorithmN	r2   r3   r4   r   r5   r6   r   r   r7   r8   r9   r:   r   r      s5        J	+t$$ IIIr9   r   c                       e Zd Zej        Z e eddddi           ed e	            e	           e
dd           e edded	
                              ZdS )EdDSAPrivateKeyrT   r]   ry   privateKeyAlgorithmrz   rB   r~   Nr   r}   )r2   r3   r4   r   r5   r6   r   r   r   r   r"   r   rs   r7   r8   r9   r:   r   r      s        J9a!_)=>>*,?,?,A,ACVWW\2&&Ld'&*, , ,	- 	-	. .IIIr9   r   c                       e Zd Zd ZdS )ASN1F_X509_DirectoryStringc                 v    t          j        | ||t          t          t          t
          t          t          f	i | d S N)r   __init__r   r&   r   r#   r$   r   )selfnamedefaultkwargss       r:   r   z#ASN1F_X509_DirectoryString.__init__   sH    dD'46G.0@46F	( 	( !'		( 	( 	( 	( 	(r9   Nr2   r3   r4   r   r8   r9   r:   r   r      s#        ( ( ( ( (r9   r   c            	       P    e Zd Zej        Z ed ed          ee	e
ee          ZdS )X509_AttributeValuevalueFRN)r2   r3   r4   r   r5   r6   r   r   r   r&   r   r#   r$   r7   r8   r9   r:   r   r      sE        JW&;&;D&A&A35F-/?35 5IIIr9   r   c                   p    e Zd Zej        Z e edd           ed e	            ge	                    Z
dS )X509_Attributetype2.5.4.6valuesN)r2   r3   r4   r   r5   r6   r   r   r    r   r7   r8   r9   r:   r   r      sX        J	&)$$X))++,(	* 	*+ +IIIr9   r   c            	       n    e Zd Zej        Z e edd           ed e	d                              Z
dS )X509_AttributeTypeAndValuer   r   r   r   N)r2   r3   r4   r   r5   r6   r   r   r   r   r7   r8   r9   r:   r   r      sY        J	&)$$""7#8#8#>#>	@ 	@A AIIIr9   r   c                   H    e Zd Zej        Z ed e            ge          ZdS )X509_RDNrdnN)	r2   r3   r4   r   r5   r6   r    r   r7   r8   r9   r:   r   r      s:        JU%?%?%A%A$B79 9IIIr9   r   c                   j    e Zd Zej        Z e edd           edde	e
eeed                    ZdS )X509_OtherNametype_idr0   r   Nr|   r}   )r2   r3   r4   r   r5   r6   r   r   r   r   r   r   r&   r"   r7   r8   r9   r:   r   r     s_        J	)S!!Wd%':%'8!"&		( 	( 	() )IIIr9   r   c                       e Zd Zd ZdS )ASN1F_X509_otherNamec                 h    t          t          j        j        ddig}t          j        | g|R i | d S )Nimplicit_tagr|   )r   r   r7   seqr   r   kargsr   s      r:   r   zASN1F_X509_otherName.__init__  sM    ~7; 1+/1 1 24s444e44444r9   Nr   r8   r9   r:   r   r     s#        5 5 5 5 5r9   r   c                   4    e Zd Zej        Z edd          ZdS )X509_RFC822Name
rfc822NamerB   Nr2   r3   r4   r   r5   r6   r   r7   r8   r9   r:   r   r     s'        J  r22IIIr9   r   c                   4    e Zd Zej        Z edd          ZdS )X509_DNSNamedNSNamerB   Nr   r8   r9   r:   r   r     rv   r9   r   c                   4    e Zd Zej        Z edd          ZdS )X509_X400Addressx400AddressrB   N)r2   r3   r4   r   r5   r6   r   r7   r8   r9   r:   r   r   $  s&        JM2..IIIr9   r   z2.5.4.10zScapy, Inc.)r   r   )r   z2.5.4.3zScapy Default Namec                   6    e Zd Zej        Z edee          Z	dS )X509_DirectoryNamedirectoryNameN)
r2   r3   r4   r   r5   r6   r   _default_directoryNamer   r7   r8   r9   r:   r   r   6  s/        J!!/3I"*, ,IIIr9   r   c            	       v    e Zd Zej        Z e e eddd                     eddd                    Z	dS )X509_EDIPartyNamenameAssignerNr|   r}   	partyNamer   )
r2   r3   r4   r   r5   r6   r   r   r   r7   r8   r9   r:   r   r   <  so        J&&~t48: : :	; 	; 	#";04	6 	6 	6	7 7IIIr9   r   c                   4    e Zd Zej        Z edd          ZdS )X509_URIuniformResourceIdentifierrB   Nr   r8   r9   r:   r   r   F  s(        J  !<bAAIIIr9   r   c                   4    e Zd Zej        Z edd          ZdS )X509_IPAddress	iPAddressrB   Nr2   r3   r4   r   r5   r6   r"   r7   r8   r9   r:   r   r   K  s&        J["--IIIr9   r   c                   4    e Zd Zej        Z edd          ZdS )X509_RegisteredIDregisteredIDrB   Nr1   r8   r9   r:   r   r   P  s&        J	."--IIIr9   r   c                   @   e Zd Zej        Z ed e             edde	d           edde
d           edded	           ed
ded           edded           edded           edded           edded           edded                    ZdS )X509_GeneralNamegeneralName	otherNameNr|   r   r      r      r      r}   r      ediPartyName   r      	ipAddress   r      )r2   r3   r4   r   r5   r6   r   r   r   r   r   r   r   r   r   r   r   r7   r8   r9   r:   r   r   U  s>       J],>,>,@,@)\+t^7;= = =)\,o7;= = =)\)T<7;= = =)\-?O7;= = =)\/4AS7;= = =)\.$@Q7;= = =)\*EtX7;= = =)\+t^7;= = =)\.$@Q7;= = =#> >IIIr9   r   c                       e Zd Zej        Z e e eddd                     e e	dde
d                     e eddd	                              ZdS )
X509_ExtAuthorityKeyIdentifierkeyIdentifiers      r   authorityCertIssuerNr   authorityCertSerialNumberr   )r2   r3   r4   r   r5   r6   r   r   r"   r   r   r   r7   r8   r9   r:   r   r   n  s        JL,&*, , ,	- 	- 	3T.+/1 1 1	2 	2 	M5t'+- - -	. 	.
/ 
/IIIr9   r   c                   H    e Zd Zej        Z ed e            ge          ZdS )"X509_ExtSubjectDirectoryAttributessubjectDirectoryAttributesN)	r2   r3   r4   r   r5   r6   r   r   r7   r8   r9   r:   r   r   }  s;        J!!">#1>#3#3"4"02 2IIIr9   r   c                   4    e Zd Zej        Z edd          ZdS )X509_ExtSubjectKeyIdentifierr   <xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxffNr   r8   r9   r:   r   r     s&        J_j99IIIr9   r   c                   L    e Zd Zej        Z ed e            ged          ZdS )X509_ExtFullNamefullNamer|   r   N	r2   r3   r4   r   r5   r6   r   r   r7   r8   r9   r:   r   r     sE        J!!*/?/?/A/A.B"2G G GIIIr9   r   c                   J    e Zd Zej        Z ed e            ed          ZdS )X509_ExtNameRelativeToCRLIssuernameRelativeToCRLIssuerr   r   N)	r2   r3   r4   r   r5   r6   r   r   r7   r8   r9   r:   r   r     s;        J6

H*.0 0 0IIIr9   r   c                   8    e Zd Zej        Z eddee          Z	dS )X509_ExtDistributionPointNamedistributionPointNameN)
r2   r3   r4   r   r5   r6   r   r   r   r7   r8   r9   r:   r   r     s3        J4d-/NP PIIIr9   r   )	unusedkeyCompromisecACompromiseaffiliationChanged
supersededcessationOfOperationcertificateHoldprivilegeWithdrawnaACompromisec                       e Zd Zej        Z e e ed e	            e	d                     e e
dded                     e edded	                              ZdS )
X509_ExtDistributionPointdistributionPointr|   r}   reasonsNr   r   	cRLIssuer   )r2   r3   r4   r   r5   r6   r   r   r   r   r   _reasons_mappingr   r   r7   r8   r9   r:   r   r     s        JL,66886&*, , ,	- 	-
 	K	4)9%)+ + +	, 	, 	k4.+/1 1 1	2 	23 3IIIr9   r   )	digitalSignaturenonRepudiationkeyEnciphermentdataEnciphermentkeyAgreementkeyCertSigncRLSignencipherOnlydecipherOnlyc                   <    e Zd Zej        Z edde          Zd Z	dS )X509_ExtKeyUsagekeyUsage101c                 6    | j                             |           S r   )r7   	get_flags)r   s    r:   get_keyUsagezX509_ExtKeyUsage.get_keyUsage  s    ~''---r9   N)
r2   r3   r4   r   r5   r6   r   _ku_mappingr7   r  r8   r9   r:   r
  r
    s=        JJ{;;I. . . . .r9   r
  c                       e Zd Zej        Z e e ed e	 e
d                    d                     e ed e	 e
d                    d                              ZdS )	X509_ExtPrivateKeyUsagePeriod	notBeforer   r   notAfterQ r   N)r2   r3   r4   r   r5   r6   r   r   r   rA   r+   r7   r8   r9   r:   r  r    s        J"";#&3t'<'<#=#=046 6 6	7 	7 	"":#&3v'>'>#?#?046 6 6	7 	78 8IIIr9   r  c                   \    e Zd Zej        Z e edd           edd                    ZdS )X509_PolicyMappingissuerDomainPolicyNsubjectDomainPolicyr   r8   r9   r:   r  r    sF        J	&--	'..0 0IIIr9   r  c                   6    e Zd Zej        Z edg e          ZdS )X509_ExtPolicyMappingspolicyMappingsN)	r2   r3   r4   r   r5   r6   r   r  r7   r8   r9   r:   r  r    s+        J!!"2B8JKKIIIr9   r  c            	           e Zd Zej        Z e e edd                     e e	dd                              Z
dS )X509_ExtBasicConstraintscAFpathLenConstraintN)r2   r3   r4   r   r5   r6   r   r   r   r   r7   r8   r9   r:   r  r    sc        JM$&&	( 	(M-t44	6 	67 7IIIr9   r  c                   4    e Zd Zej        Z edd          ZdS )X509_ExtCRLNumber	cRLNumberr   Nr>   r8   r9   r:   r#  r#    &        Jk1--IIIr9   r#  )unspecifiedr   r   r   r   r   r   unused_reasonCoderemoveFromCRLr   r   c                   6    e Zd Zej        Z edde          ZdS )X509_ExtReasonCode	cRLReasonr   N)	r2   r3   r4   r   r5   r6   r   _cRL_reasonsr7   r8   r9   r:   r*  r*    s)        J  a>>IIIr9   r*  c                   4    e Zd Zej        Z edd          ZdS )X509_ExtDeltaCRLIndicatordeltaCRLIndicatorr   Nr>   r8   r9   r:   r.  r.    s'        J1155IIIr9   r.  c                      e Zd Zej        Z e e ed e	            e	d                     e
ddd           e
ddd	           e ed
ded                     e
ddd           e
ddd                    ZdS ) X509_ExtIssuingDistributionPointr   r|   r}   onlyContainsUserCertsFr   r   onlyContainsCACertsr   onlySomeReasonsN   indirectCRL   onlyContainsAttributeCerts   )r2   r3   r4   r   r5   r6   r   r   r   r   r   r   r   r7   r8   r9   r:   r1  r1  	  s        JL,66886&*, , ,	- 	-
 	-u#'	) 	) 	)+U#'	) 	) 	)K)4(%)+ + +	, 	, 	mU#'	) 	) 	)2E#'	) 	) 	)!* *IIIr9   r1  c                   6    e Zd Zej        Z edg e          ZdS )X509_ExtCertificateIssuercertificateIssuerNr   r8   r9   r:   r;  r;    s+        J!!"5r;KLLIIIr9   r;  c                   X    e Zd Zej        Z ed e ed                              Z	dS )X509_ExtInvalidityDateinvalidityDater  N)
r2   r3   r4   r   r5   r6   r   rA   r*   r7   r8   r9   r:   r>  r>  $  s<        J&&'7XXf=M=M9N9NOOIIIr9   r>  c                   6    e Zd Zej        Z edg e          ZdS )X509_ExtSubjectAltNamesubjectAltNameNr   r8   r9   r:   rA  rA  )  s+        J!!"2B8HIIIIIr9   rA  c                   6    e Zd Zej        Z edg e          ZdS )X509_ExtIssuerAltNameissuerAltNameNr   r8   r9   r:   rD  rD  .  s*        J!!/27GHHIIIr9   rD  c                       e Zd Zej        Z e ed e            e           e	 e
ddd                     e	 e
ddd                              ZdS )X509_ExtGeneralSubtreerl   minimumNr   r   maximumr   )r2   r3   r4   r   r5   r6   r   r   r   r   r   r7   r8   r9   r:   rG  rG  3  s        JV--//1ABBM)T===	? 	?M)T===	? 	?	@ @IIIr9   rG  c                       e Zd Zej        Z e e edde	d                     e edde	d                              Z
dS )X509_ExtNameConstraintspermittedSubtreesNr|   r   excludedSubtreesr   )r2   r3   r4   r   r5   r6   r   r   r   rG  r7   r8   r9   r:   rK  rK  >  s        J144+/1 1 1	2 	2 	0$4+/1 1 1	2 	23 3IIIr9   rK  c            
           e Zd Zej        Z e e eddd                     e eddd                              Z	dS )X509_ExtPolicyConstraintsrequireExplicitPolicyNr   r   inhibitPolicyMappingr   )
r2   r3   r4   r   r5   r6   r   r   r   r7   r8   r9   r:   rO  rO  K  s~        JM14'+- - -	. 	. 	M0$'+- - -	. 	.	/ /IIIr9   rO  c                   <    e Zd Zej        Z edg e          Zd Z	dS )X509_ExtExtendedKeyUsageextendedKeyUsagec                 (    | j         }d |D             S )Nc                 &    g | ]}|j         j        S r8   )r/   oidname).0ekus     r:   
<listcomp>zAX509_ExtExtendedKeyUsage.get_extendedKeyUsage.<locals>.<listcomp>\  s    555C555r9   )rT  )r   	eku_arrays     r:   get_extendedKeyUsagez-X509_ExtExtendedKeyUsage.get_extendedKeyUsageZ  s    )	5595555r9   N)
r2   r3   r4   r   r5   r6   r   r.   r7   r\  r8   r9   r:   rS  rS  V  s?        J!!"4b)DDI6 6 6 6 6r9   rS  c            
       x    e Zd Zej        Z e ed ed          e	e
ee           edg e                    ZdS )X509_ExtNoticeReferenceorganizationzDummy OrganizationnoticeNumbersN)r2   r3   r4   r   r5   r6   r   r   r
   r   r   r   r&   r   r<   r7   r8   r9   r:   r^  r^  _  sf        J^%%&:;;%':%'8	: 	: 	/2}==? ?IIIr9   r^  c                       e Zd Zej        Z e e edde	                     e e
d ed          eeee                              ZdS )X509_ExtUserNotice	noticeRefNexplicitTextzDummy ExplicitText)r2   r3   r4   r   r5   r6   r   r   r   r^  r   r
   r   r   r   r&   r7   r8   r9   r:   rb  rb  i  s        JLd02 2	3 	3 	L))*>??)+>)+<> >	? 	?	@ @IIIr9   rb  c            	       r    e Zd Zej        Z e edd           ed e	d          e
e                    ZdS )X509_ExtPolicyQualifierInfopolicyQualifierIdz1.3.6.1.5.5.7.2.1	qualifiercps_strN)r2   r3   r4   r   r5   r6   r   r   r   r   r   rb  r7   r8   r9   r:   rf  rf  v  sZ        J	%':;;[//)"<"<%'9	; 	;< <IIIr9   rf  c            
       p    e Zd Zej        Z e edd           e e	dde
                              ZdS )X509_ExtPolicyInformationpolicyIdentifierz2.5.29.32.0policyQualifiersN)r2   r3   r4   r   r5   r6   r   r   r   r   rf  r7   r8   r9   r:   rk  rk  ~  s]        J	$m440$9; ;	< 	<= =IIIr9   rk  c                   H    e Zd Zej        Z ed e            ge          ZdS )X509_ExtCertificatePoliciescertificatePoliciesN)	r2   r3   r4   r   r5   r6   r   rk  r7   r8   r9   r:   ro  ro    s<        J!!"7#<#<#>#>"?";= =IIIr9   ro  c                   H    e Zd Zej        Z ed e            ge          ZdS )X509_ExtCRLDistributionPointscRLDistributionPointsN	r2   r3   r4   r   r5   r6   r   r   r7   r8   r9   r:   rr  rr    <        J!!"9#<#<#>#>"?";= =IIIr9   rr  c                   4    e Zd Zej        Z edd          ZdS )X509_ExtInhibitAnyPolicy	skipCertsr   Nr>   r8   r9   r:   rw  rw    r%  r9   rw  c                   H    e Zd Zej        Z ed e            ge          ZdS )X509_ExtFreshestCRLrs  Nrt  r8   r9   r:   rz  rz    ru  r9   rz  c                   n    e Zd Zej        Z e edd           ed e	            e	                    Z
dS )X509_AccessDescriptionaccessMethodr0   accessLocationN)r2   r3   r4   r   r5   r6   r   r   r   r   r7   r8   r9   r:   r|  r|    sV        J	.#&&%'7'7'9'9%	' 	'( (IIIr9   r|  c                   H    e Zd Zej        Z ed e            ge          ZdS )X509_ExtAuthInfoAccessauthorityInfoAccessN	r2   r3   r4   r   r5   r6   r   r|  r7   r8   r9   r:   r  r    s<        J!!"7#9#9#;#;"<"8: :IIIr9   r  c            	       n    e Zd Zej        Z e edd           e e	dd                              Z
dS )X509_ExtQcStatementstatementIdz0.4.0.1862.1.1statementInfoN)r2   r3   r4   r   r5   r6   r   r   r   r   r7   r8   r9   r:   r  r    sT        J	-!122K..	0 	01 1IIIr9   r  c                   H    e Zd Zej        Z ed e            ge          ZdS )X509_ExtQcStatementsqcStatementsN)	r2   r3   r4   r   r5   r6   r   r  r7   r8   r9   r:   r  r    s;        J!!.#6#6#8#8"9"57 7IIIr9   r  c                   H    e Zd Zej        Z ed e            ge          ZdS )X509_ExtSubjInfoAccesssubjectInfoAccessNr  r8   r9   r:   r  r    s<        J!!"5#9#9#;#;"<"8: :IIIr9   r  c                   4    e Zd Zej        Z edd          ZdS )X509_ExtNetscapeCertTypenetscapeCertTyperB   Nru   r8   r9   r:   r  r    s(        J  !3R88IIIr9   r  c                   N    e Zd Zej        Z ed ed          ee	e
e          ZdS )X509_ExtCommentcommentzDummy comment.N)r2   r3   r4   r   r5   r6   r   r
   r   r   r   r&   r7   r8   r9   r:   r  r    sE        JY--.>??-/B-/@B BIIIr9   r  c                   4    e Zd Zej        Z edd          ZdS )X509_ExtCertificateTemplateNameNamer9   N)r2   r3   r4   r   r5   r6   r   r7   r8   r9   r:   r  r    s'        J  --IIIr9   r  c                   \    e Zd Zej        Z e            Z ed          Z	 e
d          ZdS )X509_ExtOidNTDSCaSecurityz1.3.6.1.4.1.311.25.2.1rB   N)r2   r3   r4   r   r5   r6   r   r7   r   r   r
   r   r8   r9   r:   r  r    sC        J$$&&Ih/00GR  EEEr9   r  z2.5.29.9z	2.5.29.14z	2.5.29.15z	2.5.29.16z	2.5.29.17z	2.5.29.18	2.5.29.19z	2.5.29.20z	2.5.29.21z	2.5.29.24z	2.5.29.27z	2.5.29.28z	2.5.29.29z	2.5.29.30z	2.5.29.31z	2.5.29.32z	2.5.29.33)z	2.5.29.35z	2.5.29.36z	2.5.29.37z	2.5.29.46z	2.5.29.54z2.16.840.1.113730.1.1z2.16.840.1.113730.1.13z1.3.6.1.4.1.311.20.2z1.3.6.1.4.1.311.25.2z1.3.6.1.5.5.7.1.1z1.3.6.1.5.5.7.1.3z1.3.6.1.5.5.7.1.11c                        e Zd Z fdZ xZS )_X509_ExtFieldc                    t          t          |                               ||          }|d         j        s|S |j        j        t
          v r4t          |j        j                 |d         j        |          |d         fS |S )Nr   )_underlayerr]   )superr  m2ivalextnID_ext_mapping)r   pktr   r  	__class__s       r:   r  z_X509_ExtField.m2i  s{    ND))--c1551vz 	J:>\))SZ^,SVZSIIIA  
r9   )r2   r3   r4   r  __classcell__)r  s   @r:   r  r    s8        	 	 	 	 	 	 	 	 	r9   r  c                       e Zd Zd ZdS )ASN1F_EXT_SEQUENCEc                     t          dd          t          t          dd                    t          dt	                                g}t          j        | g|R i | d S )Nr  r  criticalF	extnValue)r   r   r   r  r  r   r   r   s      r:   r   zASN1F_EXT_SEQUENCE.__init__  sn    ;// U335 5k+C+E+EFFH 	4s444e44444r9   Nr   r8   r9   r:   r  r    s#        5 5 5 5 5r9   r  c                   0    e Zd Zej        Z e            ZdS )X509_ExtensionN)r2   r3   r4   r   r5   r6   r  r7   r8   r9   r:   r  r    s#        J""$$IIIr9   r  c                   H    e Zd Zej        Z e edde                    Z	dS )X509_Extensions
extensionsN)
r2   r3   r4   r   r5   r6   r   r   r  r7   r8   r9   r:   r  r    s=        J,	0 	01 1IIIr9   r  c                       e Zd Zej        Z e edd           e e	d e
d          ee                              ZdS )X509_AlgorithmIdentifierr   z1.2.840.113549.1.1.11r{   r   N)r2   r3   r4   r   r5   r6   r   r   r   r   r   r   rp   r7   r8   r9   r:   r  r  '  se        J	+677Lyy||#\3 3	4 	45 5IIIr9   r  c                       e Zd Zd ZdS )ASN1F_X509_SubjectPublicKeyInfoc           
         t          dt                      t                    t          t          dt	                      t                    d ft          dt                      t
                    d ft          dt                      t                    d fgt          dd                    g}t          j	        | g|R i | d S )NsignatureAlgorithmsubjectPublicKeyc                 L    d| j         j        j                                        v S )Nrsar  r   rW  lowerr  s    r:   <lambda>z:ASN1F_X509_SubjectPublicKeyInfo.__init__.<locals>.<lambda>:  s     ES-C-M-U-[-[-]-]$] r9   c                 ,    d| j         j        j        k    S )NecPublicKeyr  r   rW  r  s    r:   r  z:ASN1F_X509_SubjectPublicKeyInfo.__init__.<locals>.<lambda>>  s    MS5K5U5]$] r9   c                 (    | j         j        j        dv S )N)Ed25519Ed448r  r  s    r:   r  z:ASN1F_X509_SubjectPublicKeyInfo.__init__.<locals>.<lambda>B  s    C$:$D$LPd$d r9   rB   )
r   r  r)   r   rG   rs   r   r   r   r   r   s      r:   r   z(ASN1F_X509_SubjectPublicKeyInfo.__init__1  s    046646 6 !/0B0<0<> > ^]_ %%7%3%5%5%35 5 ^]_ %%7%3%5%5%35 5 edf $$6;;= =>& 	4s444e44444r9   Nr   r8   r9   r:   r  r  0  s#        5 5 5 5 5r9   r  c                   0    e Zd Zej        Z e            ZdS )X509_SubjectPublicKeyInfoN)r2   r3   r4   r   r5   r6   r  r7   r8   r9   r:   r  r  H  s#        J//11IIIr9   r  c                       e Zd Zej        Z e eddddg           ed e	            e	           ed e
            e
d           e ed	d
ed                     e edd
ed                              Zd
S )RSAPrivateKey_OpenSSLrT   r   v1v2r   rz      r}   r{   Nr|   r~   r   )r2   r3   r4   r   r5   r6   r   r   r   r  rS   r   rp   rs   r7   r8   r9   r:   r  r  S  s        J9a$66*--//-	/ 	/ 	\"]__""&	( 	( 	( 	Lt\&*, , ,	- 	- 	Ld'&*, , ,	- 	-. .IIIr9   r  c                       e Zd Zd ZdS )_PacketFieldRawc                     |                      ||          }d}t          j        |v r |t          j                 }|j        `|j        }||fS )NrB   )r  r   	raw_layer
underlayerpayloadload)r   r  r   iremainr   s         r:   getfieldz_PacketFieldRaw.getfieldl  sL    HHS!>Q$.!A$VFqyr9   N)r2   r3   r4   r  r8   r9   r:   r  r  k  s#            r9   r  c                   f    e Zd ZdZ ed e            e           ed e            e          gZdS )ECDSAPrivateKey_OpenSSLzECDSA Params + Private Keyecparamrz   N)	r2   r3   r4   r   r  rp   r(   rx   fields_descr8   r9   r:   r  r  v  sX        'D"?9#/<>>#/1 1 ;|.00.0 01KKKr9   r  zScapy Default IssuerzScapy Default Subjectc                       e Zd Zej        Z e ed e e	 e
d                              ee           ed e e	 e
d                              ee                    ZdS )X509_Validity
not_beforer  	not_afterr  N)r2   r3   r4   r   r5   r6   r   r   r	   rA   r*   r%   r   r7   r8   r9   r:   r  r    s        J\"]33xx~~#6#677#%;	= 	= 	["]33xx'7'7#8#899#%;	= 	=	> >IIIr9   r  ))countryNameC)stateOrProvinceNameST)localityNameL)organizationNameO)organizationUnitNameOU)
commonNameCNc                     g | ]\  }}|S r8   r8   )rX  r   symbols      r:   rZ  rZ    s    AAA|tVdAAAr9   c                      e Zd Zej        Z e e eddg dd                     e	dd           e
d e            e           ed	ee           e
d
 e            e           edee           e
d e            e           e eddd                     e eddd                     e ed e            ged                    
  
        Zd Zd Zd Zd ZdS )X509_TBSCertificaterT   rX   )r  r  v3r|   r}   serialNumberr]   	signatureissuervaliditysubjectsubjectPublicKeyInfoissuerUniqueIDNr   r   subjectUniqueIDr   r  r   c                     | j         }i }|D ]>}t          |j        d         j        j                  ||j        d         j        j        <   ?|S Nr   r  r,   r   r   r  r   rW  r   attrs	attrsDictattrs       r:   
get_issuerzX509_TBSCertificate.get_issuer  R    	 	S 	SD2;DHQK<M<Q2R2RIdhqk&.//r9   c                     d}|                                  }t          D ]\  }}||v r|d|z   dz   z  }|||         z  } t          |          D ]!}|t          vr|d|z   dz   z  }|||         z  }"|S z
        Returns a one-line string containing every type/value
        in a rather specific order. sorted() built-in ensures unicity.
        rB   /=r  _attrName_mappingsorted_attrName_specialsr   name_strr  attrType
attrSymbols        r:   get_issuer_strz"X509_TBSCertificate.get_issuer_str      
 OO%%	$5 	0 	0 Hj9$$C*,s22Ih//y)) 	0 	0H111C(NS00Ih//r9   c                     | j         }i }|D ]>}t          |j        d         j        j                  ||j        d         j        j        <   ?|S r  )r  r,   r   r   r  r   rW  r  s       r:   get_subjectzX509_TBSCertificate.get_subject  sR    	 	S 	SD2;DHQK<M<Q2R2RIdhqk&.//r9   c                     d}|                                  }t          D ]\  }}||v r|d|z   dz   z  }|||         z  } t          |          D ]!}|t          vr|d|z   dz   z  }|||         z  }"|S )NrB   r  r   )r  r  r  r  r  s        r:   get_subject_strz#X509_TBSCertificate.get_subject_str  s    $$&&	$5 	0 	0 Hj9$$C*,s22Ih//y)) 	0 	0H111C(NS00Ih//r9   )r2   r3   r4   r   r5   r6   r   r   r   r   r   r  r   _default_issuerr   r  _default_subjectr  r   r  r7   r  r	  r  r  r8   r9   r:   r  r    s       Jy#/A/A/A,02 2 2	3 	3 	na(([--//-	/ 	/ 	(OX>>Z"]__"	$ 	$ 	)%5x@@+..00.	0 	0 	-t*.0 0 0	1 	1 	.*.0 0 0	1 	1 	l-~//0,+/1 1 1	2 	2-3 3I8    "      r9   r  c                       e Zd Zd ZdS )ASN1F_X509_Certc           	      :   t          dt                      t                    t          dt                      t                    t          t	          dt                      t
                    d fgt          dd                    g}t          j        | g|R i | d S )NtbsCertificater  signatureValuec                 L    d| j         j        j                                        v S Necdsar  r  s    r:   r  z*ASN1F_X509_Cert.__init__.<locals>.<lambda>       Gs/E/O/W/]/]/_/_$_ r9    defaultsignaturedefaultsignature)	r   r  r  r)   r   r   r   r   r   r   s      r:   r   zASN1F_X509_Cert.__init__  s    ,/11/1 1 046646 6 !/0@0>0@0@0>@ @ `_a $$4$:< <= => 	4s444e44444r9   Nr   r8   r9   r:   r  r    #        5 5 5 5 5r9   r  c                   0    e Zd Zej        Z e            ZdS )	X509_CertN)r2   r3   r4   r   r5   r6   r  r7   r8   r9   r:   r  r    s"        J!!IIIr9   r  c                       e Zd Zej        Z e edd           ed e	 e
d                               e edde                              ZdS )X509_RevokedCertificater  r]   revocationDater  crlEntryExtensionsN)r2   r3   r4   r   r5   r6   r   r   r%   rA   r*   r   r   r  r7   r8   r9   r:   r  r    s        J}}^Q??-~.>.1c((62B2B.C.C E  E-~#4#45I59>$K $K L  LM MIIIr9   r  c                   d   e Zd Zej        Z e e eddddg                     e	d e
            e
           edee           ed e ed                               e ed	d
                     e edd
e                     e edd
ed                              Zd Zd Zd
S )X509_TBSCertListrT   r]   r  r  r  r  this_updatenext_updateNrevokedCertificatescrlExtensionsr|   r}   c                     | j         }i }|D ]>}t          |j        d         j        j                  ||j        d         j        j        <   ?|S r  r  r  s       r:   r  zX509_TBSCertList.get_issuer7  r  r9   c                     d}|                                  }t          D ]\  }}||v r|d|z   dz   z  }|||         z  } t          |          D ]!}|t          vr|d|z   dz   z  }|||         z  }"|S r  r  r  s        r:   r	  zX509_TBSCertList.get_issuer_str?  r
  r9   )r2   r3   r4   r   r5   r6   r   r   r   r   r  r   r  r   r%   rA   r*   r  r  r7   r  r	  r8   r9   r:   r#  r#  #  s9       Jy!dD\::	< 	<[--//-	/ 	/ 	(OX>>}cc((2,,&7&788N=$//	1 	13T57 7	8 	8 	ot,+/1 1 1	2 	23 3I$      r9   r#  c                       e Zd Zd ZdS )ASN1F_X509_CRLc           	      :   t          dt                      t                    t          dt                      t                    t          t	          dt                      t
                    d fgt          dd                    g}t          j        | g|R i | d S )NtbsCertListr  r  c                 L    d| j         j        j                                        v S r  r  r  s    r:   r  z)ASN1F_X509_CRL.__init__.<locals>.<lambda>^  r  r9   r  )	r   r#  r  r)   r   r   r   r   r   r   s      r:   r   zASN1F_X509_CRL.__init__R  s    M,..,. . 046646 6 !/0@0>0@0@0>@ @ `_a $$4$:< <= => 	4s444e44444r9   Nr   r8   r9   r:   r,  r,  Q  r  r9   r,  c                   0    e Zd Zej        Z e            ZdS )X509_CRLN)r2   r3   r4   r   r5   r6   r,  r7   r8   r9   r:   r1  r1  e  s"        J  IIIr9   r1  c            	           e Zd Zej        Z e ed e            e           e	dd           e	dd           e
dd                    ZdS )OCSP_CertIDhashAlgorithmissuerNameHashrB   issuerKeyHashr  r   N)r2   r3   r4   r   r5   r6   r   r   r  r"   r   r7   r8   r9   r:   r3  r3  o  sv        J_--//-	/ 	/ 	%r**_b))na((* *IIIr9   r3  c                   4    e Zd Zej        Z edd          ZdS )OCSP_GoodInfoinfor   Nr2   r3   r4   r   r5   r6   r   r7   r8   r9   r:   r8  r8  z  &        J
61%%IIIr9   r8  c                   t    e Zd Zej        Z e edd           e e	dde
d                              ZdS )OCSP_RevokedInforevocationTimerB   revocationReasonNr|   r}   )r2   r3   r4   r   r5   r6   r   r   r   r   r*  r7   r8   r9   r:   r=  r=    se        J/44L+T+&*, , ,	- 	-. .IIIr9   r=  c                   4    e Zd Zej        Z edd          ZdS )OCSP_UnknownInfor9  r   Nr:  r8   r9   r:   rA  rA    r;  r9   rA  c                       e Zd Zej        Z edd ed e            ed           ed e	            e	d           ed e
            e
d	                    ZdS )
OCSP_CertStatus
certStatusNgoodr   r   revokedr   unknownr   )r2   r3   r4   r   r5   r6   r   r   r8  r=  rA  r7   r8   r9   r:   rC  rC    s        J\4)\&--//*7dL L L)\)5E5E5G5G*:O O O)\)5E5E5G5G*:O O OP PIIIr9   rC  c                      e Zd Zej        Z e ed e            e           ed e	 e
                      e	           edd           e eddd                     e ed	d
ed                              Zd
S )OCSP_SingleResponsecertIDrD  )rD  
thisUpdaterB   
nextUpdater|   r}   singleExtensionsNr   )r2   r3   r4   r   r5   r6   r   r   r3  rC  r8  r   r   r   r  r7   r8   r9   r:   rI  rI    s        JX{{}}k::\??mmoo#N#N#N$	& 	&|R00""<046 6 6	7 	7 	0$,+/1 1 1	2 	23 3IIIr9   rI  c                   6    e Zd Zej        Z edg e          ZdS )OCSP_ByNamebyNameN)	r2   r3   r4   r   r5   r6   r   r   r7   r8   r9   r:   rO  rO    s)        J!!(B99IIIr9   rO  c                   4    e Zd Zej        Z edd          ZdS )
OCSP_ByKeybyKeyrB   Nr   r8   r9   r:   rR  rR    s&        JWb))IIIr9   rR  c                       e Zd Zej        Z edd ed e            ed           ed e	            e	d                    Z
dS )OCSP_ResponderIDresponderIDNrP  r   r}   rS  r   )r2   r3   r4   r   r5   r6   r   r   rO  rR  r7   r8   r9   r:   rU  rU    sp        J]D)\(KKMM;7;= = =)\'::<<7;= = => >IIIr9   rU  c                      e Zd Zej        Z e e eddddid                     e	d e
 e                      e
           ed e e                                 ed	g e           e ed
ded                              ZdS )OCSP_ResponseDatarT   r   r  r   r}   rV  )rV  
producedAt	responsesresponseExtensionsNr   )r2   r3   r4   r   r5   r6   r   r   r   r   rU  rO  r   rA   r+   r   rI  r  r7   r8   r9   r:   rX  rX    s        Jy!aY,02 2 2	3 	3 	]$4$4$O$O$O%	' 	'|"s??#4#455	7 	7+r+>??2D,+/1 1 1	2 	23 3IIIr9   rX  c                       e Zd Zd ZdS )ASN1F_OCSP_BasicResponsec                    t          dt                      t                    t          dt                      t                    t          t	          dt                      t
                    d fgt          dd                    t          t          dd t          d                    g}t          j        | g|R i | d S )	NtbsResponseDatar  r  c                 L    d| j         j        j                                        v S r  r  r  s    r:   r  z3ASN1F_OCSP_BasicResponse.__init__.<locals>.<lambda>  r  r9   r  certsr|   r}   )r   rX  r  r)   r   r   r   r   r   r  r   r   r   s      r:   r   z!ASN1F_OCSP_BasicResponse.__init__  s    --//-/ / 046646 6 !/0>0@0@0>@ @ `_a $K$:< <= = $WdI268 8 89 9:$ 	4s444e44444r9   Nr   r8   r9   r:   r]  r]    s#        5 5 5 5 5r9   r]  c                   \    e Zd Zej        Z e edd           ed                    Z	dS )OCSP_ResponseBytesresponseTypez1.3.6.1.5.5.7.48.1.1r  r}   N)
r2   r3   r4   r   r5   r6   r   r   r]  r7   r8   r9   r:   rc  rc    sG        J	."899  d3335 5IIIr9   rc  )
successfulmalformedRequestinternalErrortryLaternotUsedsigRequiredunauthorizedc                   v    e Zd Zej        Z e edde           e	 e
dded                              ZdS )OCSP_ResponseresponseStatusr   responseBytesNr|   r}   )r2   r3   r4   r   r5   r6   r   r   _responseStatus_mappingr   r   rc  r7   r8   r9   r:   rm  rm    sk        J)10	2 	2L$+&*, , ,	- 	-. .IIIr9   rm  N)__doc__scapy.asn1.mibr   scapy.asn1.asn1r   r   r   r   r   r	   r
   scapy.asn1packetr   scapy.asn1fieldsr   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&   scapy.packetr'   scapy.fieldsr(   r)   scapy.volatiler*   r+   scapy.compatr,   r.   r<   r@   rG   rN   rS   r`   rc   rh   rp   rs   rx   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,  r*  r.  r1  r;  r>  rA  rD  rG  rK  rO  rS  r^  rb  rf  rk  ro  rr  rw  rz  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,  r1  r3  r8  r=  rA  rC  rI  rO  rR  rU  rX  r]  rc  rp  rm  r8   r9   r:   <module>rz     s-          $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) ( ( ( ( (                                                         :        7 7 7 7 7 7 7 7 4 4 4 4 4 4 4 4 " " " " " "& & & & & & & &
+ + + + +K + + +
    K   (, , , , ,; , , ,) ) ) ) ) ) ) )3 3 3 3 3K 3 3 3,# # # # # # # #- - - - -k - - -	. 	. 	. 	. 	. 	. 	. 	.0 0 0 0 0; 0 0 00 0 0 0 0[ 0 0 0
. . . . .k . . .    [   0 0 0 0 0[ 0 0 0
    +   	. 	. 	. 	. 	.k 	. 	. 	.(( ( ( ( ( ( ( (5 5 5 5 5+ 5 5 5+ + + + +[ + + +A A A A A A A A9 9 9 9 9{ 9 9 9) ) ) ) )[ ) ) )5 5 5 5 5> 5 5 53 3 3 3 3k 3 3 3
0 0 0 0 0; 0 0 0/ / / / /{ / / / HJJH''*%%''668 8 8 9: : : H'')$$''(<==? ? ? @A A A
 , , , , , , , ,7 7 7 7 7 7 7 7B B B B B{ B B B
. . . . .[ . . .
. . . . . . . .
> > > > >{ > > >2/ / / / /[ / / /2 2 2 2 2 2 2 2: : : : :; : : :
G G G G G{ G G G0 0 0 0 0k 0 0 0P P P P PK P P P$ $ $ 3 3 3 3 3 3 3 3"  . . . . .{ . . .
8 
8 
8 
8 
8K 
8 
8 
80 0 0 0 0 0 0 0L L L L L[ L L L
7 7 7 7 7{ 7 7 7. . . . . . . .

  
  
 ? ? ? ? ? ? ? ?
6 6 6 6 6 6 6 6
* * * * *{ * * *,M M M M M M M M
P P P P P[ P P P
J J J J J[ J J J
I I I I IK I I I
@ @ @ @ @[ @ @ @
3 
3 
3 
3 
3k 
3 
3 
3/ / / / / / / /6 6 6 6 6{ 6 6 6? ? ? ? ?k ? ? ?
@ 
@ 
@ 
@ 
@ 
@ 
@ 
@< < < < <+ < < <= = = = = = = == = = = =+ = = == = = = =K = = =. . . . .{ . . .
= = = = =+ = = =( ( ( ( ([ ( ( (: : : : :[ : : :1 1 1 1 1+ 1 1 17 7 7 7 7; 7 7 7: : : : :[ : : :9 9 9 9 9{ 9 9 9
B B B B Bk B B B. . . . .k . . .
! ! ! ! ! ! ! !2- ! .	
 ' & ) " # ' * 1 * ( .  ,!" '#$ 0*)$)5-;5/-0;  B
 
 
 
 
- 
 
 
5 5 5 5 5 5 5 5% % % % %[ % % %
1 1 1 1 1k 1 1 15 5 5 5 5{ 5 5 55 5 5 5 5n 5 5 502 2 2 2 2 2 2 2. . . . .K . . .0    k   1 1 1 1 1f 1 1 1 HJJH''*%%''668 8 8 9: : : H'')$$''(>??A A A BC C C
 HJJH''*%%''668 8 8 9: : : H'')$$''(?@@B B B CD D D
 > > > > >K > > >    BA/@AAA J J J J J+ J J JZ5 5 5 5 5n 5 5 5(" " " " " " " "M M M M Mk M M M+ + + + +{ + + +\5 5 5 5 5^ 5 5 5(! ! ! ! !{ ! ! !* * * * *+ * * *& & & & &K & & &
. . . . .{ . . .& & & & &{ & & &
P P P P Pk P P P3 3 3 3 3+ 3 3 3 : : : : :+ : : :
* * * * * * * *
> > > > >{ > > >3 3 3 3 3 3 3 3"5 5 5 5 5~ 5 5 5.5 5 5 5 5 5 5 5+ + + . . . . .K . . . . .r9   