+
    i                        ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHt ^ RIHt ^ RIHtHtHtHtHtHtHtHtHtHtHt ^ RIHtHtH t H!t! ^ RI"H#t#H$t$H%t% ]PL                  ! ]'4      t(R	t)RIt*R
t+Rt,. RJOt-Rt.Rt/R t0R t1 ! R R4      t2 ! R R]24      t3 ! R R]24      t4 ! R R]24      t5 ! R R]24      t6 ! R R]64      t7 ! R R]74      t8 ! R R]84      t9 ! R  R!]84      t: ! R" R#]64      t; ! R$ R%];4      t< ! R& R']64      t= ! R( R)]24      t> ! R* R+]>4      t? ! R, R-]>4      t@ ! R. R/]34      tAR0 tBR1 tCR2]4R3]5R4]5R5]>R6]?R7]@R8]=R9]8R:]:R;]9R<]A/tD]'       d   ^ R=IEHFtF ]DP                  ]F4       M]DP                  R>]6R?];R@]7RA]</4       RBR>RCRDRER<RFRG/tH]HP                  4        U Uu/ uF  w  rV P                  RH4      RK,          VbK   	  upp tKR# u upp i )L    N)Mapping
formatdate)sha1sha256)
itemgetter)HAS_CRTMD5_AVAILABLEHTTPHeadersencodebytesensure_unicodeget_current_datetimeparse_qsquoteunquoteurlsplit
urlunsplit)NoAuthTokenErrorNoCredentialsErrorUnknownSignatureVersionError UnsupportedSignatureVersionError)is_valid_ipv6_endpoint_urlnormalize_url_pathpercent_encode_sequence@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                     \        V 4      pVP                  p\        V 4      '       d   R V R2pR^PRR/pVP                  e<   VP                  VP	                  VP
                  4      8w  d   V RVP                   2pV# )[]httphttpsi  :)r   hostnamer   portgetscheme)url	url_partshostdefault_portss   &   //usr/lib/python3/dist-packages/botocore/auth.py_host_from_urlr+   J   s    
 ID!#&&4&{M ~~!>>]..y/?/?@@V1Y^^,-DK    c                     V P                   p\        V\        4      '       d(   \        P                  ! VP                  R 4      4      pV# \        V\        4      '       d   \        P                  ! V4      pV# utf-8)data
isinstancebytesjsonloadsdecodestr)requestr0   s   & r*   _get_body_as_dictr8   ]   sZ    
 <<D$zz$++g./ K 
D#		zz$Kr,   c                   .   a  ] tR t^jt o RtRtR tRtV tR# )
BaseSignerFc                    \        R 4      h)add_auth)NotImplementedErrorselfr7   s   &&r*   r<   BaseSigner.add_authn   s    !*--r,    N)	__name__
__module____qualname____firstlineno__REQUIRES_REGIONREQUIRES_TOKENr<   __static_attributes____classdictcell____classdict__s   @r*   r:   r:   j   s     ON. .r,   r:   c                   ,   a  ] tR t^rt o Rt R tRtV tR# )TokenSignerTc                    Wn         R # N
auth_token)r?   rQ   s   &&r*   __init__TokenSigner.__init__x   s    $r,   rP   N)rB   rC   rD   rE   rG   rR   rH   rI   rJ   s   @r*   rM   rM   r   s     N% %r,   rM   c                   6   a  ] tR t^|t o RtR tR tR tRtV t	R# )	SigV2Authz#
Sign a request with Signature V2.
c                    Wn         R # rO   credentialsr?   rX   s   &&r*   rR   SigV2Auth.__init__       &r,   c                l   \         P                  R 4       \        VP                  4      pVP                  p\        V4      ^ 8X  d   RpVP                   RVP                   RV R2p\        P                  ! V P                  P                  P                  R4      \        R7      p. p\        V4       Fk  pVR8X  d   K  \        W(,          4      p	\!        VP                  R4      RR7      p
\!        V	P                  R4      RR7      pVP#                  V
 R	V 24       Km  	  R
P%                  V4      pW\,          p\         P                  RV4       VP'                  VP                  R4      4       \(        P*                  ! VP-                  4       4      P/                  4       P1                  R4      pW3# )z$Calculating signature using v2 auth./
r/   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r&   pathlenmethodnetlochmacnewrX   
secret_keyencoder   sortedr6   r   appendjoinupdatebase64	b64encodedigeststripr5   )r?   r7   paramssplitri   string_to_signlhmacpairskeyvalue
quoted_keyquoted_valueqsb64s   &&&           r*   calc_signatureSigV2Auth.calc_signature   s_   ;<%zzt9>D#NN+2ell^2dV2F''..w76
 &>C k!$Eszz'2<J g!6UCLLLJ<q78 " XXe_)>:^**734u||~.446==gFyr,   c                   V P                   f   \        4       hVP                  '       d   VP                  pMVP                  pV P                   P                  VR&   RVR&   RVR&   \
        P                  ! \        \
        P                  ! 4       4      VR&   V P                   P                  '       d   V P                   P                  VR&   V P                  W4      w  r4WBR&   V# )	NAWSAccessKeyId2SignatureVersion
HmacSHA256SignatureMethod	TimestampSecurityTokenra   )rX   r   r0   ry   
access_keytimestrftimeISO8601gmtimetokenr   )r?   r7   ry   r   	signatures   &&   r*   r<   SigV2Auth.add_auth   s     #$&&<<<\\F ^^F#'#3#3#>#> %(!"$0 !"mmGT[[]C{!!!&*&6&6&<&<F?#++G<'{r,   rW   N)
rB   rC   rD   rE   __doc__rR   r   r<   rH   rI   rJ   s   @r*   rU   rU   |   s     '8 r,   rU   c                   ,   a  ] tR t^t o R tR tRtV tR# )	SigV3Authc                    Wn         R # rO   rW   rY   s   &&r*   rR   SigV3Auth.__init__   r[   r,   c                :   V P                   f   \        4       hRVP                  9   d   VP                  R \        RR7      VP                  R&   V P                   P                  '       dB   RVP                  9   d   VP                  R V P                   P                  VP                  R&   \
        P                  ! V P                   P                  P                  R4      \        R7      pVP                  VP                  R,          P                  R4      4       \        VP                  4       4      P                  4       pRV P                   P                   RVP                  R4       2pR	VP                  9   d   VP                  R	 WAP                  R	&   R # )
NDateTusegmtX-Amz-Security-Tokenr/   r_   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rX   r   headersr   r   rm   rn   ro   rp   r   rt   r   rw   rx   r   r5   )r?   r7   new_hmacencoded_signaturer   s   &&   r*   r<   SigV3Auth.add_auth   sM   #$&&W__$'",D"9!!!%8OO$:;6:6F6F6L6LGOO2388''..w76
 	/66w?@'(9:@@B()9)9)D)D(E F..?.F.Fw.O-PR 	 "W__4 672;./r,   rW   N)rB   rC   rD   rE   rR   r<   rH   rI   rJ   s   @r*   r   r      s     '< <r,   r   c                      a  ] tR t^t o RtRtR tRR ltR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )	SigV4Authz#
Sign a request with Signature V4.
Tc                *    Wn         W0n        W n        R # rO   )rX   _region_name_service_namer?   rX   service_nameregion_names   &&&&r*   rR   SigV4Auth.__init__   s    & ()r,   c                    V'       d;   \         P                  ! WP                  R 4      \        4      P	                  4       pV# \         P                  ! WP                  R 4      \        4      P                  4       pV# r.   )rm   rn   rp   r   	hexdigestrw   )r?   r~   msghexsigs   &&&& r*   _signSigV4Auth._sign   sW    ((3

7 3V<FFHC 
 ((3

7 3V<CCEC
r,   c                    \        4       pVP                  P                  4        F&  w  r4VP                  4       pV\        9  g   K"  WBV&   K(  	  RV9  d   \        VP                  4      VR&   V# )zS
Select the headers from the request that need to be included
in the StringToSign.
r(   )r   r   itemslowerSIGNED_HEADERS_BLACKLISTr+   r&   )r?   r7   
header_mapnamer   lnames   &&    r*   headers_to_signSigV4Auth.headers_to_sign   se    
 !]
"??002KDJJLE44$)5! 3 # "0!<Jvr,   c                    VP                   '       d   V P                  VP                   4      # V P                  \        VP                  4      4      # rO   )ry   _canonical_query_string_params_canonical_query_string_urlr   r&   r>   s   &&r*   canonical_query_string SigV4Auth.canonical_query_string   s<    
 >>>66w~~FF33HW[[4IJJr,   c           	     J   . p\        V\        4      '       d   VP                  4       pV F7  w  r4VP                  \	        VR R7      \	        \        V4      R R7      34       K9  	  . p\        V4       F  w  r4VP                  V RV 24       K  	  RP                  V4      pV# )z-_.~rc   re   rf   )r1   r   r   rr   r   r6   rq   rs   )r?   ry   key_val_pairsr~   r   sorted_key_valsr   s   &&     r*   r   (SigV4Auth._canonical_query_string_params  s    fg&&\\^F JC  s(%E
*HI !  !/JC""cU!E7#34 0!$/!:%%r,   c                <   R pVP                   '       d   . pVP                   P                  R4       F)  pVP                  R4      w  rVpVP                  WW34       K+  	  . p\	        V4       F  w  rWVP                  V RV 24       K  	  RP                  V4      pV# )rb   rf   re   )queryrz   	partitionrr   rq   rs   )	r?   partsr   r   pairr~   _r   r   s	   &&       r*   r   %SigV4Auth._canonical_query_string_url  s    !#;;;M))#. $s 3$$c\2 / !O %]3
&&#aw'78 4%(XXo%>"%%r,   c                   a  . p\        \        V4      4      pV FL  pRP                  V 3R lVP                  V4       4       4      pVP	                  V R\        V4       24       KN  	  RP                  V4      # )z
Return the headers that need to be included in the StringToSign
in their canonical form by converting all header keys to lower
case, sorting them in alphabetical order and then joining
them into a string, separated by newlines.
,c              3   F   <"   T F  pSP                  V4      x  K  	  R # 5irO   )_header_value).0vr?   s   & r*   	<genexpr>.SigV4Auth.canonical_headers.<locals>.<genexpr>0  s#      /K!""1%%/Ks   !r!   r^   )rq   setrs   get_allrr   r   )r?   r   r   sorted_header_namesr~   r   s   f&    r*   canonical_headersSigV4Auth.canonical_headers&  sz     $S%9:&CHH />/F/Fs/K E NNcU!N5$9#:;<	 '
 yy!!r,   c                @    R P                  VP                  4       4      # ) )rs   rz   )r?   r   s   &&r*   r   SigV4Auth._header_value6  s     xx&&r,   c                Z    \        R  \        V4       4       4      pRP                  V4      # )c              3   \   "   T F"  qP                  4       P                  4       x  K$  	  R # 5irO   )r   rx   )r   ns   & r*   r   +SigV4Auth.signed_headers.<locals>.<genexpr>?  s      I4Hq**4Hs   *,;)rq   r   rs   )r?   r   r   s   && r*   signed_headersSigV4Auth.signed_headers>  s&    IC4HIIxx  r,   c                    VP                   P                  R / 4      pVP                  R4      p\        V\        4      ;'       d    VP                  R4      R8H  # )checksumrequest_algorithmintrailer)contextr$   r1   dict)r?   r7   checksum_context	algorithms   &&  r*   _is_streaming_checksum_payload(SigV4Auth._is_streaming_checksum_payloadB  sM    "??..z2>$(()<=	)T*OOy}}T/Bi/OOr,   c                   V P                  V4      '       d   \        # V P                  V4      '       g   \        # VP                  pV'       d   \        VR 4      '       d   VP                  4       p\        P                  ! VP                  \        4      p\        4       p\        VR4       F  pVP                  V4       K  	  VP                  4       pVP                  V4       V# V'       d   \        V4      P                  4       # \         # )seekr,   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterrt   r   r   EMPTY_SHA256_HASH)r?   r7   request_bodypositionread_chunksizer   chunkhex_checksums   &&      r*   payloadSigV4Auth.payloadG  s    ..w775511':: $#||GL&99#((*H&..!!>N xHnc2& 3#--/Lh' ,'1133$$r,   c                    VP                   P                  R 4      '       g   R# VP                  P                  RR4      # )r    Tpayload_signing_enabled)r&   
startswithr   r$   r>   s   &&r*   r   %SigV4Auth._should_sha256_sign_payloada  s4    {{%%g..
 ""#<dCCr,   c                V   VP                   P                  4       .pV P                  \        VP                  4      P
                  4      pVP                  V4       VP                  V P                  V4      4       V P                  V4      pVP                  V P                  V4      R ,           4       VP                  V P                  V4      4       RVP                  9   d   VP                  R,          pMV P                  V4      pVP                  V4       R P                  V4      # )r^   X-Amz-Content-SHA256)rk   upper_normalize_url_pathr   r&   ri   rr   r   r   r   r   r   r  rs   )r?   r7   crri   r   body_checksums   &&    r*   canonical_requestSigV4Auth.canonical_requestk  s    nn""$%''(=(B(BC
		$
		$--g67..w7
		$((9D@A
		$%%o67!W__4#OO,BCM LL1M
		- yy}r,   c                2    \        \        V4      R R7      pV# )z/~rc   )r   r   )r?   ri   normalized_paths   && r*   r  SigV4Auth._normalize_url_pathz  s     24 8tDr,   c                2   V P                   P                  .pVP                  VP                  R ,          R,          4       VP                  V P                  4       VP                  V P
                  4       VP                  R4       RP                  V4      # 	timestampr      Naws4_requestr]   )rX   r   rr   r   r   r   rs   r?   r7   scopes   && r*   r  SigV4Auth.scope~  sn    !!,,-W__[1#67T&&'T''(^$xxr,   c                   . pVP                  VP                  R ,          R,          4       VP                  V P                  4       VP                  V P                  4       VP                  R4       RP	                  V4      # r  )rr   r   r   r   rs   r  s   && r*   credential_scopeSigV4Auth.credential_scope  s_    W__[1#67T&&'T''(^$xxr,   c                   R.pVP                  VP                  R,          4       VP                  V P                  V4      4       VP                  \        VP	                  R4      4      P                  4       4       RP                  V4      # )z
Return the canonical StringToSign as well as a dict
containing the original version of all headers that
were included in the StringToSign.
AWS4-HMAC-SHA256r  r/   r^   )rr   r   r  r   rp   r   rs   )r?   r7   r  stss   &&& r*   r{   SigV4Auth.string_to_sign  sl     ""

7??;/0

4((12

6+227;<FFHIyy~r,   c                Z   V P                   P                  pV P                  R V 2P                  4       VP                  R,          R,          4      pV P                  W@P
                  4      pV P                  WPP                  4      pV P                  VR4      pV P                  WqRR7      # )AWS4r  r  r  T)r   )rX   ro   r   rp   r   r   r   )r?   r{   r7   r~   k_datek_region	k_service	k_signings   &&&     r*   r   SigV4Auth.signature  s    ))C5\!!#W__[%A#%F
 ::f&7&78JJx););<	JJy.9	zz)z>>r,   c                   V P                   f   \        4       h\        4       pVP                  \        4      VP
                  R&   V P                  V4       V P                  V4      p\        P                  R4       \        P                  RV4       V P                  W4      p\        P                  RV4       V P                  WA4      p\        P                  RV4       V P                  W4       R # )Nr  z$Calculating signature using v4 auth.zCanonicalRequest:
%sStringToSign:
%szSignature:
%s)rX   r   r   r   SIGV4_TIMESTAMPr   _modify_request_before_signingr  rg   rh   r{   r   _inject_signature_to_request)r?   r7   datetime_nowr  r{   r   s   &&    r*   r<   SigV4Auth.add_auth  s    #$&&+-'3'<'<_'M$ 	++G4 227;;<,.?@,,WH(.9NN>;	%y1))'=r,   c                    R V P                  V4       2.pV P                  V4      pVP                  RV P                  V4       24       VP                  RV 24       RP	                  V4      VP
                  R&   V# )zAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=, Authorization)r  r   rr   r   rs   r   )r?   r7   r   auth_strr   s   &&&  r*   r.  &SigV4Auth._inject_signature_to_request  s~    24::g3F2GHI..w7T00ABC	
 	*YK01+/99X+>(r,   c                   R VP                   9   d   VP                   R  V P                  V4       V P                  P                  '       dB   RVP                   9   d   VP                   R V P                  P                  VP                   R&   VP                  P                  RR4      '       g4   RVP                   9   d   VP                   R \        VP                   R&   R# R# )r3  r   r  Tr	  N)r   _set_necessary_date_headersrX   r   r   r$   r   r>   s   &&r*   r-  (SigV4Auth._modify_request_before_signing  s    goo-0((1!!!%8OO$:;6:6F6F6L6LGOO23""#<dCC%8OO$:;6FGOO23 Dr,   c                   R VP                   9   d   VP                   R  \        P                  P                  VP                  R,          \        4      p\        \        \        P                  ! VP                  4       4      4      4      VP                   R &   RVP                   9   d   VP                   R R# R# RVP                   9   d   VP                   R VP                  R,          VP                   R&   R# )r   r  
X-Amz-DateN)
r   datetimestrptimer   r,  r   intcalendartimegm	timetuple)r?   r7   datetime_timestamps   && r*   r7  %SigV4Auth._set_necessary_date_headers  s     W__$'!)!2!2!;!;,o" '1HOO$6$@$@$BCD'GOOF# w.OOL1 / w.OOL1,3OOK,HGOOL)r,   )r   r   rX   N)F)rB   rC   rD   rE   r   rF   rR   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r  r{   r   r<   r.  r-  r7  rH   rI   rJ   s   @r*   r   r      s      O* K&"& " '!P
%4D
?>$GI Ir,   r   c                   D   a a ] tR tRt oV 3R ltV 3R ltR tRtVtV ;t	# )S3SigV4Authi  c                   < \         SV `  V4       R VP                  9   d   VP                  R  V P                  V4      VP                  R &   R# )r	  N)superr-  r   r  r?   r7   	__class__s   &&r*   r-  *S3SigV4Auth._modify_request_before_signing  sA    .w7!W__4 6726,,w2G./r,   c                $  < VP                   P                  R 4      p\        VRR4      pVf   / pVP                  RR4      pVe   V# RpVP                   P                  R/ 4      pVP                  R4      p\        V\        4      '       d    VP                  R4      R8X  d
   VR	,          pVP
                  P                  R
4      '       d   WQP                  9  d   R# VP                   P                  RR4      '       d   R# \        SV `%  V4      # )client_configs3Nr  zContent-MD5r   r   r   headerr   r    Thas_streaming_inputF)
r   r$   getattrr1   r   r&   r  r   rF  r   )	r?   r7   rK  	s3_configsign_payloadchecksum_headerr   r   rH  s	   &&      r*   r   'S3SigV4Auth._should_sha256_sign_payload  s      ++O<M46	 I !}}%>E# ("??..z2>$(()<=	i&&9==+>(+J'/O&&w//oo5 ??4e<< w27;;r,   c                    V# rO   rA   r?   ri   s   &&r*   r  S3SigV4Auth._normalize_url_path      r,   rA   )
rB   rC   rD   rE   r-  r   r  rH   rI   __classcell__rH  rK   s   @@r*   rD  rD    s     H'<R r,   rD  c                   N   a a ] tR tRt oRtV 3R ltV 3R ltV 3R ltRtVt	V ;t
# )S3ExpressAuthi  Tc               4   < \         SV `  WV4       W@n        R # rO   )rF  rR   _identity_cache)r?   rX   r   r   identity_cacherH  s   &&&&$r*   rR   S3ExpressAuth.__init__  s     	K@-r,   c                &   < \         SV `  V4       R # rO   )rF  r<   rG  s   &&r*   r<   S3ExpressAuth.add_auth!  s    !r,   c                   < \         SV `  V4       R VP                  9  d$   V P                  P                  VP                  R &   RVP                  9   d   VP                  R R# R# )zx-amz-s3session-tokenr   N)rF  r-  r   rX   r   rG  s   &&r*   r-  ,S3ExpressAuth._modify_request_before_signing$  sU    .w7"'//97;7G7G7M7MGOO34!W__4 67 5r,   )r]  )rB   rC   rD   rE   REQUIRES_IDENTITY_CACHErR   r<   r-  rH   rI   rX  rY  s   @@r*   r[  r[    s     "."8 8r,   r[  c                   *   a  ] tR tRt o RtR tRtV tR# )S3ExpressPostAuthi-  Tc                6   \        4       pVP                  \        4      VP                  R &   / pVP                  P	                  RR4      e   VP                  R,          p/ p. pVP                  P	                  RR4      e1   VP                  R,          pVP	                  RR4      e
   VR,          pWTR&   RVR&   V P                  V4      VR&   VP                  R ,          VR&   VP                  RR/4       VP                  RV P                  V4      /4       VP                  RVP                  R ,          /4       V P                  P                  eA   V P                  P                  VR	&   VP                  R	V P                  P                  /4       \        P                  ! \        P                  ! V4      P                  R
4      4      P                  R
4      VR&   V P                  VR,          V4      VR&   W1P                  R&   WAP                  R&   R# )r  s3-presign-post-fieldsNs3-presign-post-policy
conditionsr   x-amz-algorithmx-amz-credential
x-amz-dateX-Amz-S3session-Tokenr/   policyx-amz-signaturer   r   r,  r   r$   r  rr   rX   r   ru   rv   r3   dumpsrp   r5   r   r?   r7   r/  fieldsro  rj  s   &&    r*   r<   S3ExpressPostAuth.add_auth0  s   +-'3'<'<_'M$??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|$6 !%)ZZ%8!"&{;|,.@AB-tzz'/BCD<)EFG!!-.2.>.>.D.DF*+($*:*:*@*@A
 "++JJv%%g.

&/ 	x %)NN6(3CW$M !4:014:01r,   rA   N)rB   rC   rD   rE   rd  r<   rH   rI   rJ   s   @r*   rf  rf  -  s     "'; ';r,   rf  c                   Z   a a ] tR tRt oRtRtR]/V 3R lltR tR tR t	R	 t
R
tVtV ;t# )S3ExpressQueryAuthiZ  i,  Texpiresc               :   < \         SV `  VVVVR 7       WPn        R# ))r^  NrF  rR   _expires)r?   rX   r   r   r^  rx  rH  s   &&&&$$r*   rR   S3ExpressQueryAuth.__init__^  s*     	)	 	 	
  r,   c           
        VP                   P                  R 4      pRpW#8X  d   VP                   R  V P                  V P                  V4      4      pRRRV P	                  V4      RVP
                  R,          RV P                  RV/pV P                  P                  e   V P                  P                  VR
&   \        VP                  4      p\        VP                  RR7      pVP                  4        UU	u/ uF  w  rW^ ,          bK  	  p
pp	VP                  '       d#   V
P                  VP                  4       / Vn        RpVP                   '       d"   V
P                  \#        V4      4       RVn        V
'       d   \%        V
4      R,           pV \%        V4       2pTpV^ ,          V^,          V^,          W^,          3p\'        V4      Vn
        R	# u up	pi )content-type0application/x-www-form-urlencoded; charset=utf-8X-Amz-Algorithmr   X-Amz-Credentialr:  r  X-Amz-ExpiresX-Amz-SignedHeadersNrn  Tkeep_blank_valuesrb   rf   r   r$   r   r   r  r   r{  rX   r   r   r&   r   r   r   ry   rt   r0   r8   r   r   )r?   r7   content_typeblocklisted_content_typer   auth_paramsr'   query_string_partskr   
query_dictoperation_paramsnew_query_stringpnew_url_partss   &&             r*   r-  1S3ExpressQueryAuth._modify_request_before_signingo  s    **>:> 	! 3/
 ,,T-A-A'-JK 1

7 3'//+6T]]!>
 !!-373C3C3I3IK/0 W[[)	 &iooN*<*B*B*DE*D$!a1g*D
E>>>gnn-GN <<< /89GL6zBSH !8!E FG 	 1qtQqT+;qTB /A F   7Gc                >    V;P                   R V 2,          un         R# z&X-Amz-Signature=Nr&   r?   r7   r   s   &&&r*   r.  /S3ExpressQueryAuth._inject_signature_to_request       	*9+66r,   c                    V# rO   rA   rU  s   &&r*   r  &S3ExpressQueryAuth._normalize_url_path  rW  r,   c                    \         # rO   r   r>   s   &&r*   r  S3ExpressQueryAuth.payload  
    
  r,   r{  )rB   rC   rD   rE   DEFAULT_EXPIRESrd  rR   r-  r.  r  r  rH   rI   rX  rY  s   @@r*   rw  rw  Z  s9     O"    "?0B7   r,   rw  c                   H   a a ] tR tRt oRt]3V 3R lltR tR tRtVt	V ;t
# )SigV4QueryAuthi    c                4   < \         SV `  WV4       W@n        R # rO   rz  )r?   rX   r   r   rx  rH  s   &&&&&r*   rR   SigV4QueryAuth.__init__  s     	K@r,   c           
        VP                   P                  R 4      pRpW#8X  d   VP                   R  V P                  V P                  V4      4      pRRRV P	                  V4      RVP
                  R,          RV P                  RV/pV P                  P                  e   V P                  P                  VR
&   \        VP                  4      p\        VP                  RR7      pVP                  4        UU	u/ uF  w  rW^ ,          bK  	  p
pp	VP                  '       d#   V
P                  VP                  4       / Vn        RpVP                   '       d"   V
P                  \#        V4      4       RVn        V
'       d   \%        V
4      R,           pV \%        V4       2pTpV^ ,          V^,          V^,          W^,          3p\'        V4      Vn
        R	# u up	pi )r~  r  r  r   r  r:  r  r  r  Nr   Tr  rb   rf   r  )r?   r7   r  blacklisted_content_typer   r  r'   r  r  r   r  r  r  r  r  s   &&             r*   r-  -SigV4QueryAuth._modify_request_before_signing  s    **>:> 	! 3/
 ,,T-A-A'-JK 1

7 3'//+6T]]!>
 !!-262B2B2H2HK./ W[[)	 &iooN*<*B*B*DE*D$!a1g*D
E>>>gnn-GN <<< /89GL6zBSH !8!E FG 	 1qtQqT+;qTB /A Fr  c                >    V;P                   R V 2,          un         R# r  r  r  s   &&&r*   r.  +SigV4QueryAuth._inject_signature_to_request  r  r,   r  )rB   rC   rD   rE   r  rR   r-  r.  rH   rI   rX  rY  s   @@r*   r  r    s%     O ?N ?0B7 7r,   r  c                   0   a  ] tR tRt o RtR tR tRtV tR# )S3SigV4QueryAuthi  zS3 SigV4 auth using query parameters.

This signer will sign a request using query parameters and signature
version 4, i.e a "presigned url" signer.

Based off of:

http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

c                    V# rO   rA   rU  s   &&r*   r  $S3SigV4QueryAuth._normalize_url_path  rW  r,   c                    \         # rO   r  r>   s   &&r*   r  S3SigV4QueryAuth.payload#  r  r,   rA   N)	rB   rC   rD   rE   r   r  r  rH   rI   rJ   s   @r*   r  r    s     	   r,   r  c                   *   a  ] tR tRt o RtR tRtV tR# )S3SigV4PostAuthi+  zv
Presigns a s3 post

Implementation doc here:
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
c                6   \        4       pVP                  \        4      VP                  R &   / pVP                  P	                  RR4      e   VP                  R,          p/ p. pVP                  P	                  RR4      e1   VP                  R,          pVP	                  RR4      e
   VR,          pWTR&   RVR&   V P                  V4      VR&   VP                  R ,          VR&   VP                  RR/4       VP                  RV P                  V4      /4       VP                  RVP                  R ,          /4       V P                  P                  eA   V P                  P                  VR	&   VP                  R	V P                  P                  /4       \        P                  ! \        P                  ! V4      P                  R
4      4      P                  R
4      VR&   V P                  VR,          V4      VR&   W1P                  R&   WAP                  R&   R# )r  rh  Nri  rj  r   rk  rl  rm  x-amz-security-tokenr/   ro  rp  rq  rs  s   &&    r*   r<   S3SigV4PostAuth.add_auth3  s   +-'3'<'<_'M$??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|$6 !%)ZZ%8!"&{;|,.@AB-tzz'/BCD<)EFG!!--1-=-=-C-CF)*5t7G7G7M7MNO "++JJv%%g.

&/ 	x %)NN6(3CW$M !4:014:01r,   rA   NrB   rC   rD   rE   r   r<   rH   rI   rJ   s   @r*   r  r  +  s     %; %;r,   r  c                     a  ] tR tRt o . RNRNRNRNRNRNRNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR
NRNR NR!NR"NR#NR$NtR2R& ltR' tR( tR) tR* t	R3R+ lt
R2R, ltR2R- ltR. tR/ tR0 tR1tV tR%# )4
HmacV1Authi[  
accelerateaclcorsdefaultObjectAcllocationlogging
partNumberro  requestPaymenttorrent
versioning	versionIdversionswebsiteuploadsuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingdelete	lifecycletaggingrestorestorageClassnotificationreplication	analyticsmetrics	inventoryselectzselect-typezobject-lockNc                    Wn         R # rO   rW   r   s   &&&&r*   rR   HmacV1Auth.__init__  r[   r,   c                ,   \         P                  ! V P                  P                  P	                  R 4      \
        R7      pVP                  VP	                  R 4      4       \        VP                  4       4      P                  4       P                  R 4      # )r/   r_   )rm   rn   rX   ro   rp   r   rt   r   rw   rx   r5   )r?   r{   r   s   && r*   sign_stringHmacV1Auth.sign_string  sk    88''..w74
 	--g678??,-335<<WEEr,   c                ^   . ROp. pRV9   d   VR V P                  4       VR&   V Ft  pRpV FN  pVP                  4       pW,          f   K  Wt8X  g   K'  VP                  W,          P                  4       4       RpKP  	  V'       d   Kc  VP                  R4       Kv  	  RP	                  V4      # )content-md5r   FTrb   r^   )r  r~  date)	_get_dater   rr   rx   rs   )r?   r   interesting_headershoiihfoundr~   lks   &&      r*   canonical_standard_headers%HmacV1Auth.canonical_standard_headers  s    EW..*%BEYY[<+JJw|1134 E	 
 5

2 & yy~r,   c                v   . p/ pV Fa  pVP                  4       pW,          f   K  VP                  R4      '       g   K8  RP                  R VP                  V4       4       4      W5&   Kc  	  \	        VP                  4       4      pV F  pVP                  V RW4,           24       K!  	  RP                  V4      # )Nx-amz-r   c              3   @   "   T F  qP                  4       x  K  	  R # 5irO   )rx   )r   r   s   & r*   r   6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s      2+?a		+?s   r!   r^   )r   r  rs   r   rq   keysrr   )r?   r   r  custom_headersr~   r  sorted_header_keyss   &&     r*   canonical_custom_headers#HmacV1Auth.canonical_custom_headers  s    CB|'==**), 2+2??3+?2 *N&	  $N$7$7$9:%CJJ#a 3456 &yy~r,   c                \    \        V4      ^8X  d   V# V^ ,          \        V^,          4      3# )z
TODO: Do we need this?
)rj   r   )r?   nvs   &&r*   	unquote_vHmacV1Auth.unquote_v  s+     r7a<IqE72a5>**r,   c                .   Ve   TpMVP                   pVP                  '       d   VP                  P                  R4      pV Uu. uF  qUP                  R^4      NK  	  ppV Uu. uF-  qU^ ,          V P                  9   g   K  V P	                  V4      NK/  	  pp\        V4      ^ 8  d]   VP                  \        ^ 4      R7       V Uu. uF  pRP                  V4      NK  	  ppVR,          pVRP                  V4      ,          pV# u upi u upi u upi )Nrf   re   )r~   ?)	ri   r   rz   QSAOfInterestr  rj   sortr   rs   )r?   rz   	auth_pathbufqsaas   &&&   r*   canonical_resourceHmacV1Auth.canonical_resource  s      C**C;;;++##C(C,/0Cq773?CC0+.+.aA$$:L:L2L!q!3   3x!|Z]+,/0Cqsxx{C0s
sxx}$
 1
 1s   D%DD	Dc                    VP                  4       R ,           pW`P                  V4      R ,           ,          pV P                  V4      pV'       d   WgR ,           ,          pW`P                  W%R7      ,          pV# )r^   r  )r
  r  r  r  )r?   rk   rz   r   rx  r  csr  s   &&&&&&  r*   canonical_stringHmacV1Auth.canonical_string  sg     \\^d"
--g6==66w?4''B
%%e%AA	r,   c                    V P                   P                  '       d   VR  V P                   P                  VR &   V P                  WW5R7      p\        P	                  RV4       V P                  V4      # )r  r  r+  )rX   r   r  rg   rh   r  )r?   rk   rz   r   rx  r  r{   s   &&&&&& r*   get_signatureHmacV1Auth.get_signature  sr     !!!./.2.>.>.D.DG*+..7 / 
 	(.9//r,   c                H   V P                   f   \        h\        P                  R4       \	        VP
                  4      p\        P                  RVP                  4       V P                  VP                  W!P                  VP                  R7      pV P                  W4       R # )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %sr  )rX   r   rg   rh   r   r&   rk   r   r   r  _inject_signature)r?   r7   rz   r   s   &&  r*   r<   HmacV1Auth.add_auth  s|    #$$?@%.?&&NNE??g>O>O ' 
	 	w2r,   c                    \        R R7      # )Tr   r   r?   s   &r*   r  HmacV1Auth._get_date  s    &&r,   c                    R VP                   9   d   VP                   R  RV P                  P                   RV 2pW1P                   R &   R# )r3  zAWS r!   N)r   rX   r   )r?   r7   r   auth_headers   &&& r*   r  HmacV1Auth._inject_signature  sG    goo- 0T--8899+F+6(r,   rW   )NNrO   )rB   rC   rD   rE   r  rR   r  r  r  r  r  r  r   r<   r  r  rH   rI   rJ   s   @r*   r  r  [  s    %%% 	% 		%
 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%  	!%" 	 #%$ 	$%%& 	'%( 	!)%* 	'+%, 	$-%. 	/%0 	1%2 	3%4 	5%6 	7%8 	9%: 	;%< 	=%> 	?%@ 	A%B 	C%D 	E%F 	G%H 	I%MN'F"+4	
0	3'7 7r,   r  c                   @   a  ] tR tRt o RtRt]3R ltR tR tRt	V t
R# )	HmacV1QueryAuthi  z
Generates a presigned request for s3.

Spec from this document:

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
#RESTAuthenticationQueryStringAuth

r  c                    Wn         W n        R # rO   )rX   r{  )r?   rX   rx  s   &&&r*   rR   HmacV1QueryAuth.__init__  s    &r,   c                    \        \        \        P                  ! 4       \        V P                  4      ,           4      4      # rO   )r6   r=  r   r{  r  s   &r*   r  HmacV1QueryAuth._get_date  s&    3tyy{S%77899r,   c                   / pV P                   P                  VR &   W#R&   VP                   Fg  pVP                  4       pVR8X  d   VP                  R,          VR&   K2  VP	                  R4      '       g
   VR9   g   KR  VP                  V,          W5&   Ki  	  \        V4      p\        VP                  4      pV^,          '       d   V^,           RV 2pV^ ,          V^,          V^,          Wg^,          3p\        V4      Vn        R# )r   ra   r   Expiresr  rf   N)r  r~  )	rX   r   r   r   r  r   r   r&   r   )	r?   r7   r   r  
header_keyr  r  r  r  s	   &&&      r*   r  !HmacV1QueryAuth._inject_signature  s    
'+'7'7'B'B
#$"+;!//J!!#B V#(/(?
9% x((B 3 - ")!4
 *  3:> W[[!Q44 #$A$q)9(:;1qtQqT+;qTB /r,   )r{  rX   N)rB   rC   rD   rE   r   r  rR   r  r  rH   rI   rJ   s   @r*   r  r    s(      O,;  :0 0r,   r  c                   *   a  ] tR tRt o RtR tRtV tR# )HmacV1PostAuthi9  z
Generates a presigned post for s3.

Spec from this document:

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
c                   / pVP                   P                  R R4      e   VP                   R ,          p/ p. pVP                   P                  RR4      e1   VP                   R,          pVP                  RR4      e
   VR,          pWCR&   V P                  P                  VR&   V P                  P                  eA   V P                  P                  VR&   VP                  RV P                  P                  /4       \        P                  ! \        P                  ! V4      P                  R4      4      P                  R4      VR&   V P                  VR,          4      VR&   W!P                   R &   W1P                   R&   R# )	rh  Nri  rj  r   r  r/   ro  r   )r   r$   rX   r   r   rr   ru   rv   r3   rr  rp   r5   r  )r?   r7   rt  ro  rj  s   &&   r*   r<   HmacV1PostAuth.add_authB  sR   ??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|#'#3#3#>#> !!--1-=-=-C-CF)*5t7G7G7M7MNO "++JJv%%g.

&/ 	x #..vh/?@{4:014:01r,   rA   Nr  rJ   s   @r*   r  r  9  s     ; ;r,   r  c                   *   a  ] tR tRt o RtR tRtV tR# )
BearerAuthia  z
Performs bearer token authorization by placing the bearer token in the
Authorization header as specified by Section 2.1 of RFC 6750.

https://datatracker.ietf.org/doc/html/rfc6750#section-2.1
c                    V P                   f   \        4       hRV P                   P                   2pRVP                  9   d   VP                  R W!P                  R&   R # )NzBearer r3  )rQ   r   r   r   )r?   r7   r	  s   && r*   r<   BearerAuth.add_authi  sP    ??""$$ 5 567goo-0+6(r,   rA   Nr  rJ   s   @r*   r  r  a  s     7 7r,   r  c                     V  FL  pVR 8X  d   \         V,          u # V\         9   d   \         V,          pV\        9   d   Vu # KB  \        VR7      h	  \        V R7      h)smithy.api#noAuthsignature_version)AUTH_TYPE_TO_SIGNATURE_VERSIONAUTH_TYPE_MAPSr   r   )
auth_trait	auth_typer   s   &  r*   resolve_auth_typer%  s  sa    	++1)<<88 >y I N2(( 3 /KK   +Z
HHr,   c                    V Uu. uF  q"P                  R 4      R,          NK  	  ppV  Uu. uF  pV\        9  g   K  VNK  	  ppV'       d   \        P                  RV4       W,           p\        P                  V4       Uu. uF  pW#9   g   K  VNK  	  ppV F=  pVR8X  d   \        V,          u # \        P                  V4      pV\        9   g   K;  Vu # 	  \        RP                  \        V4      4      R7      hu upi u upi u upi )#z/Unsupported auth schemes in preference list: %rnoAuthr2  r  )rz   AUTH_PREF_TO_SIGNATURE_VERSIONrg   rh   r   fromkeysr$   r"  r   rs   rq   )preference_listauth_optionsr%   service_supportedunsupportedcombinedprioritized_schemessig_versions   &&      r*   resolve_auth_scheme_preferencer3    s   =IJ\6c*2..\J &%F77 	%  
 ={	
 2H mmH--F& 	-   &X1&99488@.( & +))F+<$=> 5 Ks    C>DDDDv2v3v3httpsrL  zs3-queryzs3-presign-postzs3v4-presign-postzv4-s3expresszv4-s3express-queryzv4-s3express-presign-postbearer)CRT_AUTH_TYPE_MAPSv4zv4-querys3v4z
s3v4-queryzaws.auth#sigv4zaws.auth#sigv4av4azsmithy.api#httpBearerAuthr  noner'  i   )expectztransfer-encodingz
user-agentzx-amzn-trace-idr)  )Lru   r>  r;  r   rm   r3   r  r   collections.abcr   email.utilsr   hashlibr   r   operatorr   botocore.compatr	   r
   r   r   r   r   r   r   r   r   r   botocore.exceptionsr   r   r   r   botocore.utilsr   r   r   	getLoggerrB   rg   r   r   r   r,  r   r   r   r+   r8   r:   rM   rU   r   r   rD  r[  rf  rw  r  r  r  r  r  r  r  r%  r3  r"  botocore.crt.authr8  rt   r!  r   rz   r*  )auth_schemer2  s   00r*   <module>rH     se           # "         
		8	$ G  
"  & %I "&
. .%* %:
 :z<
 <8JI
 JIZ3) 3l8K 8**; *;Ze  e PN7Y N7b ~  0-;i -;`f7 f7R20j 20j%;Z %;P7 7$
IB 	))y*~M,!2j 4,-)K*		
 du	"  %C$H$H$J"$J  c2+$J"  "s   6$G 