
    tni׆                     4   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dlmZmZmZmZ d dlmZ d dlmZmZmZ  G d d          Z G d	 d
          Zd Zd ZddZ	 ddZ	 ddZ	 ddZ G d d          Zd Z 	 ddZ!d Z"	 ddZ#d Z$dS )    N)create_request_objectprepare_request_dict)OrderedDictget_current_datetime)ParamValidationErrorUnknownClientMethodErrorUnknownSignatureVersionError UnsupportedSignatureVersionError)FrozenAuthToken)	ArnParserdatetime2timestampfix_s3_hostc                       e Zd ZdZ	 ddZed             Zed             Zed             ZddZ		 	 	 	 dd	Z
d
 Zd Z	 	 ddZeZ	 	 	 ddZdS )RequestSignera0  
    An object to sign requests before they go out over the wire using
    one of the authentication mechanisms defined in ``auth.py``. This
    class fires two events scoped to a service and operation name:

    * choose-signer: Allows overriding the auth signer name.
    * before-sign: Allows mutating the request before signing.

    Together these events allow for customization of the request
    signing pipeline, including overrides, request path manipulation,
    and disabling signing per operation.


    :type service_id: botocore.model.ServiceId
    :param service_id: The service id for the service, e.g. ``S3``

    :type region_name: string
    :param region_name: Name of the service region, e.g. ``us-east-1``

    :type signing_name: string
    :param signing_name: Service signing name. This is usually the
                         same as the service name, but can differ. E.g.
                         ``emr`` vs. ``elasticmapreduce``.

    :type signature_version: string
    :param signature_version: Signature name like ``v4``.

    :type credentials: :py:class:`~botocore.credentials.Credentials`
    :param credentials: User credentials with which to sign requests.

    :type event_emitter: :py:class:`~botocore.hooks.BaseEventHooks`
    :param event_emitter: Extension mechanism to fire events.
    Nc                     || _         || _        || _        || _        || _        || _        t          j        |          | _        d S N)	_region_name_signing_name_signature_version_credentials_auth_token_service_idweakrefproxy_event_emitter)self
service_idregion_namesigning_namesignature_versioncredentialsevent_emitter
auth_tokens           M/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/botocore/signers.py__init__zRequestSigner.__init__G   sN     ()"3'%% &mM::    c                     | j         S r   )r   r   s    r$   r   zRequestSigner.region_name[   s      r&   c                     | j         S r   )r   r(   s    r$   r    zRequestSigner.signature_version_   s    &&r&   c                     | j         S r   )r   r(   s    r$   r   zRequestSigner.signing_namec   s    !!r&   c                 .    |                      ||          S r   )sign)r   operation_namerequestkwargss       r$   handlerzRequestSigner.handlerg   s    
 yy111r&   standardc           	      2   |}|| j         }|| j        }|                     |||j                  }| j                            d| j                                         d| ||| j         || |           |t          j	        k    r|||d}	|||	d<   |j        
                    di           }
|s |

                    d          r|
d         |	d	<   |

                    d
          r|
d
         |	d
<   |

                    d          r|
d         |	d<   |

                    d          #|                     |	|
d         |
d                    	  | j        di |	}n*# t          $ r}|dk    rt          |          |d}~ww xY w|                    |           dS dS )a<  Sign a request before it goes out over the wire.

        :type operation_name: string
        :param operation_name: The name of the current operation, e.g.
                               ``ListBuckets``.
        :type request: AWSRequest
        :param request: The request object to be sent over the wire.

        :type region_name: str
        :param region_name: The region to sign the request for.

        :type signing_type: str
        :param signing_type: The type of signing to perform. This can be one of
            three possible values:

            * 'standard'     - This should be used for most requests.
            * 'presign-url'  - This should be used when pre-signing a request.
            * 'presign-post' - This should be used when pre-signing an S3 post.

        :type expires_in: int
        :param expires_in: The number of seconds the presigned url is valid
            for. This parameter is only valid for signing type 'presign-url'.

        :type signing_name: str
        :param signing_name: The name to use for the service when signing.
        Nzbefore-sign..)r.   r   r   r    request_signerr-   )r   r   r    expiressigningregionr   r   request_credentialsidentity_cache	cache_keyr1   r     )r   r   _choose_signercontextr   emitr   	hyphenizebotocoreUNSIGNEDget_resolve_identity_cacheget_auth_instancer	   r
   add_auth)r   r-   r.   r   signing_type
expires_inr   explicit_region_namer    r/   signing_contextauthes                r$   r,   zRequestSigner.signn   s;   F  ++K-L //L'/
 

 	  J4+5577JJ.JJ%)/) 	! 	
 	
 	
  111 ,*%6 F
 %$.y!%o11)R@@O' BO,?,?,I,I B(7(A}%"">22 I)8)H~&""#899 0?)1,- ""#344@,,#$45#K0  
-t-7777/   :--:*;    G MM'"""""C 21s   E 
E= E88E=c                     ||d<   ||d<   d S )Nr9   r:   r<   )r   r/   cacher:   s       r$   rD   z%RequestSigner._resolve_identity_cache   s    #( '{r&   c                 2   ddd}|                     |d          }|                     d          p| j        }|                     di           }|                     d| j                  }|                     d| j                  }	|t          j        ur|                    |          s||z  }| j                            d	| j	        
                                 d
| ||	||          \  }
}|*|}|t          j        ur|                    |          s||z  }|S )ai  
        Allow setting the signature version via the choose-signer event.
        A value of `botocore.UNSIGNED` means no signing will be performed.

        :param operation_name: The operation to sign.
        :param signing_type: The type of signing that the signer is to be used
            for.
        :return: The signature version to sign with.
        z-presign-postz-query)presign-postpresign-url 	auth_typer6   r   r7   zchoose-signer.r3   )r   r   r    r>   )rC   r   r   r   rA   rB   endswithr   emit_until_responser   r@   )r   r-   rG   r>   signing_type_suffix_mapsuffixr    r6   r   r   r0   responses               r$   r=   zRequestSigner._choose_signer   sR    ,##
 #
 ),,\2>> $KK44O8O++i,,{{>43EFFkk(D,=>>X%666%..v66 7 ' /CCLT-7799LLNLL%#/ D 
 
  ( "):::)226:: ; "V+!  r&   c                 r   || j         }t          j        j                            |          }|t          |          |j        du rO| j        r4t          | j        t                    s| j        
                                }n| j        } ||          }|S |p| j        }	t          |dd          du r(|d         }
|d         }|
                    |          }	|d= d}|	|	                                }||d<   |j        r/| j        t          j                                        ||d<   ||d	<    |d
i |}|S )a  
        Get an auth instance which can be used to sign a request
        using the given signature version.

        :type signing_name: string
        :param signing_name: Service signing name. This is usually the
                             same as the service name, but can differ. E.g.
                             ``emr`` vs. ``elasticmapreduce``.

        :type region_name: string
        :param region_name: Name of the service region, e.g. ``us-east-1``

        :type signature_version: string
        :param signature_version: Signature name like ``v4``.

        :rtype: :py:class:`~botocore.auth.BaseSigner`
        :return: Auth instance to sign a request.
        Nr;   TREQUIRES_IDENTITY_CACHEr9   r:   r!   r   service_namer<   )r   rA   rK   AUTH_TYPE_MAPSrC   r	   REQUIRES_TOKENr   
isinstancer   get_frozen_tokenr   getattrget_credentialsget_frozen_credentialsREQUIRES_REGIONr   
exceptionsNoRegionError)r   r   r   r    r8   r/   clsfrozen_tokenrK   r!   rN   keyfrozen_credentialss                r$   rE   zRequestSigner.get_auth_instance   s   4 $ $ 7m*../@AA;."3    %% 0
 /) ) 0  $/@@BB#/3|$$DK)>T->31488D@@+,E%C//44K{# ""!,!C!C!E!E 2} 	2 ()77999$/F=!%1F>"s}}V}}r&     c                     t          |          }|                     |||d||           |                                 |j        S )a  Generates a presigned url

        :type request_dict: dict
        :param request_dict: The prepared request dictionary returned by
            ``botocore.awsrequest.prepare_request_dict()``

        :type operation_name: str
        :param operation_name: The operation being signed.

        :type expires_in: int
        :param expires_in: The number of seconds the presigned url is valid
            for. By default it expires in an hour (3600 seconds)

        :type region_name: string
        :param region_name: The region name to sign the presigned url.

        :type signing_name: str
        :param signing_name: The name to use for the service when signing.

        :returns: The presigned url
        rQ   )r   r,   prepareurl)r   request_dictr-   rH   r   r   r.   s          r$   generate_presigned_urlz$RequestSigner.generate_presigned_urlE  sS    : (55			
 	
 	
 	{r&   r   NN)Nr1   NN)rj   NN)__name__
__module____qualname____doc__r%   propertyr   r    r   r0   r,   rD   r=   rE   get_authro   r<   r&   r$   r   r   $   s*          T ; ; ; ;( ! ! X! ' ' X' " " X"2 2 2 2 Z# Z# Z# Z#x( ( (.! .! .!h  B B B BJ !H ( ( ( ( ( (r&   r   c                   6    e Zd ZdZd ZddZd Z	 ddZd ZdS )	CloudFrontSignera  A signer to create a signed CloudFront URL.

    First you create a cloudfront signer based on a normalized RSA signer::

        import rsa
        def rsa_signer(message):
            private_key = open('private_key.pem', 'r').read()
            return rsa.sign(
                message,
                rsa.PrivateKey.load_pkcs1(private_key.encode('utf8')),
                'SHA-1')  # CloudFront requires SHA-1 hash
        cf_signer = CloudFrontSigner(key_id, rsa_signer)

    To sign with a canned policy::

        signed_url = cf_signer.generate_signed_url(
            url, date_less_than=datetime(2015, 12, 1))

    To sign with a custom policy::

        signed_url = cf_signer.generate_signed_url(url, policy=my_policy)
    c                 "    || _         || _        dS )a  Create a CloudFrontSigner.

        :type key_id: str
        :param key_id: The CloudFront Key Pair ID

        :type rsa_signer: callable
        :param rsa_signer: An RSA signer.
               Its only input parameter will be the message to be signed,
               and its output will be the signed content as a binary string.
               The hash algorithm needed by CloudFront is SHA-1.
        N)key_id
rsa_signer)r   rz   r{   s      r$   r%   zCloudFrontSigner.__init__  s     $r&   Nc                 T   |duo|du}|du o|du }|s|rd}t          |          ||                     ||          }t          |t                    r|                    d          }|!dt          t          |                     g}n,d|                     |                              d           g}| 	                    |          }|
                    d|                     |                              d           d| j         g           |                     ||          S )a  Creates a signed CloudFront URL based on given parameters.

        :type url: str
        :param url: The URL of the protected object

        :type date_less_than: datetime
        :param date_less_than: The URL will expire after that date and time

        :type policy: str
        :param policy: The custom policy, possibly built by self.build_policy()

        :rtype: str
        :return: The signed URL.
        Nz=Need to provide either date_less_than or policy, but not bothutf8zExpires=zPolicy=z
Signature=zKey-Pair-Id=)
ValueErrorbuild_policyr^   strencodeintr   _url_b64encodedecoder{   extendrz   
_build_url)	r   rm   date_less_thanpolicyboth_args_suppliedneither_arg_suppliedrL   params	signatures	            r$   ro   z'CloudFrontSigner.generate_presigned_url  sW    ,47NF$<N-5H&D. 	 !5 	 OAQ--%&&sN;;Ffc"" 	+]]6**F%J%7%G%G!H!HJJKFFL 3 3F ; ; B B6 J JLLMFOOF++	LT00;;BB6JJLL,t{,,	
 	
 	
 sF+++r&   c                 H    d|v rdnd}||z   d                     |          z   S )N?&)join)r   base_urlextra_params	separators       r$   r   zCloudFrontSigner._build_url  s/    (??CC	)#chh|&<&<<<r&   c                 .   t          t          |                    }t          dd|ii          }|rd|vr|dz  }d|i|d<   |r#t          t          |                    }d|i|d<   d|fd	|fg}d
t          |          gi}t          j        |d          S )a0  A helper to build policy.

        :type resource: str
        :param resource: The URL or the stream filename of the protected object

        :type date_less_than: datetime
        :param date_less_than: The URL will expire after the time has passed

        :type date_greater_than: datetime
        :param date_greater_than: The URL will not be valid until this time

        :type ip_address: str
        :param ip_address: Use 'x.x.x.x' for an IP, or 'x.x.x.x/x' for a subnet

        :rtype: str
        :return: The policy in a compact string.
        DateLessThanzAWS:EpochTime/z/32zAWS:SourceIp	IpAddressDateGreaterThanResource	Condition	Statement),:)
separators)r   r   r   jsondumps)	r   resourcer   date_greater_than
ip_addressmoment	conditionordered_payloadcustom_policys	            r$   r   zCloudFrontSigner.build_policy  s    : '7788/61J KLL	 	B*$$e#
&4j%AIk" 	E+,=>>??F,;V+DI'(&1K3KL${?'C'C&DEz-J????r&   c                     t          j        |                              dd                              dd                              dd          S )N   +   -   =   _   /   ~)base64	b64encodereplace)r   datas     r$   r   zCloudFrontSigner._url_b64encode  sD     T""WT4  WT4  WT4  		
r&   rp   )	rq   rr   rs   rt   r%   ro   r   r   r   r<   r&   r$   rx   rx   p  s         .% % %$, $, $, $,L= = =
 LP(@ (@ (@ (@T
 
 
 
 
r&   rx   c                     t           | d<   d S )Ngenerate_db_auth_token)r   class_attributesr/   s     r$   add_generate_db_auth_tokenr         1G-...r&   c                 .    t           | d<   t          | d<   d S )Ngenerate_db_connect_auth_token$generate_db_connect_admin_auth_token)#dsql_generate_db_connect_auth_token)dsql_generate_db_connect_admin_auth_tokenr   s     r$   'add_dsql_generate_db_auth_token_methodsr     s&    + 56 	2 ;<<<r&   c                     |}|| j         j        }d|d}ddi |dd}d}| | d	| }	t          ||	           | j                            d||d
d          }
|
t          |          d         S )a  Generates an auth token used to connect to a db with IAM credentials.

    :type DBHostname: str
    :param DBHostname: The hostname of the database to connect to.

    :type Port: int
    :param Port: The port number the database is listening on.

    :type DBUsername: str
    :param DBUsername: The username to log in as.

    :type Region: str
    :param Region: The region the database is in. If None, the client
        region will be used.

    :return: A presigned url which can be used as an auth token.
    Nconnect)ActionDBUserr   rR   GETurl_pathquery_stringheadersbodymethodhttps://r     zrds-dbr-   rn   r   rH   r   )metar   r   _request_signerro   len)r   
DBHostnamePort
DBUsernameRegionr7   r   rn   schemeendpoint_urlpresigned_urls              r$   r   r     s    $ F~&  F  L F1j11411L|444(?? ! @  M V''r&   r   c                 ,   d}||vr)t          d| dd                    |                     || j        j        }ddi d	|id
d}d}| | }t	          ||           | j                            ||||d          }	|	t          |          d         S )a&  Generate a DSQL database token for an arbitrary action.

    :type Hostname: str
    :param Hostname: The DSQL endpoint host name.

    :type Action: str
    :param Action: Action to perform on the cluster (DbConnectAdmin or DbConnect).

    :type Region: str
    :param Region: The AWS region where the DSQL Cluster is hosted. If None, the client region will be used.

    :type ExpiresIn: int
    :param ExpiresIn: The token expiry duration in seconds (default is 900 seconds).

    :return: A presigned url which can be used as an auth token.
    )	DbConnectDbConnectAdminz	Received z! for action but expected one of: z, )reportNr   rR   r   r   r   r   dsqlr   )r   r   r   r   r   r   ro   r   )
r   Hostnamer   r   	ExpiresInpossible_actionsrn   r   r   r   s
             r$   _dsql_generate_db_auth_tokenr   9  s    & 7%%%"evee		RbHcHcee
 
 
 	
 ~& f
  L F(h((L|444(??! @  M V''r&   c                 (    t          | |d||          S )a  Generate a DSQL database token for the "DbConnect" action.

    :type Hostname: str
    :param Hostname: The DSQL endpoint host name.

    :type Region: str
    :param Region: The AWS region where the DSQL Cluster is hosted. If None, the client region will be used.

    :type ExpiresIn: int
    :param ExpiresIn: The token expiry duration in seconds (default is 900 seconds).

    :return: A presigned url which can be used as an auth token.
    r   r   r   r   r   r   s       r$   r   r   l  s!      (hVY  r&   c                 (    t          | |d||          S )a  Generate a DSQL database token for the "DbConnectAdmin" action.

    :type Hostname: str
    :param Hostname: The DSQL endpoint host name.

    :type Region: str
    :param Region: The AWS region where the DSQL Cluster is hosted. If None, the client region will be used.

    :type ExpiresIn: int
    :param ExpiresIn: The token expiry duration in seconds (default is 900 seconds).

    :return: A presigned url which can be used as an auth token.
    r   r   r   s       r$   r   r     s"      (h(&)  r&   c                   $    e Zd Zd Z	 	 	 	 ddZdS )S3PostPresignerc                     || _         d S r   )r   )r   r4   s     r$   r%   zS3PostPresigner.__init__  s    -r&   Nrj   c                    |i }|g }i }t                      }|t          j        |          z   }|                    t          j        j                  |d<   g |d<   |D ]}	|d                             |	           t          |          }
||
j	        d<   ||
j	        d<   | j
                            d|
|d           |
j        |d	S )
a  Generates the url and the form fields used for a presigned s3 post

        :type request_dict: dict
        :param request_dict: The prepared request dictionary returned by
            ``botocore.awsrequest.prepare_request_dict()``

        :type fields: dict
        :param fields: A dictionary of prefilled form fields to build on top
            of.

        :type conditions: list
        :param conditions: A list of conditions to include in the policy. Each
            element can be either a list or a structure. For example:

            .. code:: python

                [
                    {"acl": "public-read"},
                    {"bucket": "amzn-s3-demo-bucket"},
                    ["starts-with", "$key", "mykey"]
                ]

        :type expires_in: int
        :param expires_in: The number of seconds the presigned post is valid
            for.

        :type region_name: string
        :param region_name: The region name to sign the presigned post to.

        :rtype: dict
        :returns: A dictionary with two elements: ``url`` and ``fields``.
            Url is the url to post to. Fields is a dictionary filled with
            the form fields and respective values to use when submitting the
            post. For example:

            .. code:: python

                {
                    'url': 'https://amzn-s3-demo-bucket.s3.amazonaws.com',
                    'fields': {
                        'acl': 'public-read',
                        'key': 'mykey',
                        'signature': 'mysignature',
                        'policy': 'mybase64 encoded policy'
                    }
                }
        N)seconds
expiration
conditionszs3-presign-post-fieldszs3-presign-post-policy	PutObjectrP   )rm   fields)r   datetime	timedeltastrftimerA   rK   ISO8601appendr   r>   r   r,   rm   )r   rn   r   r   rH   r   r   datetime_nowexpire_dater   r.   s              r$   generate_presigned_postz'S3PostPresigner.generate_presigned_post  s    n >FJ  ,--"X%7
%K%K%KK*33HM4IJJ|  "|# 	3 	3I< ''	2222 (554:014:01!!+~	
 	
 	
 {f555r&   )NNrj   N)rq   rr   rs   r%   r   r<   r&   r$   r   r     sK        . . . S6 S6 S6 S6 S6 S6r&   r   c                     t           | d<   d S )Nro   )ro   r   s     r$   add_generate_presigned_urlr     r   r&   rj   c                    |}|}|i }|}|}dt          |           d}	| j        }
	 | j        |         }n# t          $ r t	          |          w xY w| j        j                            |          }|                     |||	          }t          j
        |                    dd                    }|                     |||	|           \  }}}|                     ||||	|d	
          }|||d<   |
                    |||          S )ax  Generate a presigned url given a client, its method, and arguments

    :type ClientMethod: string
    :param ClientMethod: The client method to presign for

    :type Params: dict
    :param Params: The parameters normally passed to
        ``ClientMethod``.

    :type ExpiresIn: int
    :param ExpiresIn: The number of seconds the presigned url is valid
        for. By default it expires in an hour (3600 seconds)

    :type HttpMethod: string
    :param HttpMethod: The http method to use on the generated url. By
        default, the http method is whatever is used in the method's model.

    :returns: The presigned url
    NTis_presign_requestuse_global_endpoint)method_name
api_paramsoperation_modelr>   BucketrR   ignore_signing_regionFr   r   r   r>   r   set_user_agent_headerr   )rn   rH   r-   )_should_use_global_endpointr   _PY_TO_OP_NAMEKeyErrorr   r   service_modelr   _emit_api_paramsr   is_arnrC   _resolve_endpoint_ruleset_convert_to_request_dictro   )r   ClientMethodParamsr   
HttpMethodclient_methodr   rH   http_methodr>   r4   r-   r   bucket_is_arnr   additional_headers
propertiesrn   s                     r$   ro   ro     s   , !MF~JK":4@@ G
 )NB,]; B B B&=AAAAB i-==nMMO""' #  F
 $VZZ"%=%=>>M
 	&&#00	 	' 	 		 00'!"# 1  L !,X 00!% 1   s	   5 Ac                     t           | d<   d S )Nr   )r   r   s     r$   add_generate_presigned_postr  C  s    2I.///r&   c           	         |}|}|}|}	|}
|i }n|                                 }|	g }	dt          |           d}t          | j                  }| j        j                            d          }|                     d|i||          }t          j	        |
                    dd                    }|                     ||||           \  }}}|                     |||||d	
          }|	                    d|i           |                    d          r/|	                    dd|dt          d                    g           n|	                    d|i           ||d<   |                    |||	|
          S )aw
  Builds the url and the form fields used for a presigned s3 post

    :type Bucket: string
    :param Bucket: The name of the bucket to presign the post to. Note that
        bucket related conditions should not be included in the
        ``conditions`` parameter.

    :type Key: string
    :param Key: Key name, optionally add ${filename} to the end to
        attach the submitted filename. Note that key related conditions and
        fields are filled out for you and should not be included in the
        ``Fields`` or ``Conditions`` parameter.

    :type Fields: dict
    :param Fields: A dictionary of prefilled form fields to build on top
        of. Elements that may be included are acl, Cache-Control,
        Content-Type, Content-Disposition, Content-Encoding, Expires,
        success_action_redirect, redirect, success_action_status,
        and x-amz-meta-.

        Note that if a particular element is included in the fields
        dictionary it will not be automatically added to the conditions
        list. You must specify a condition for the element as well.

    :type Conditions: list
    :param Conditions: A list of conditions to include in the policy. Each
        element can be either a list or a structure. For example:

        .. code:: python

            [
                {"acl": "public-read"},
                ["content-length-range", 2, 5],
                ["starts-with", "$success_action_redirect", ""]
            ]

        Conditions that are included may pertain to acl,
        content-length-range, Cache-Control, Content-Type,
        Content-Disposition, Content-Encoding, Expires,
        success_action_redirect, redirect, success_action_status,
        and/or x-amz-meta-.

        Note that if you include a condition, you must specify
        a valid value in the fields dictionary as well. A value will
        not be added automatically to the fields dictionary based on the
        conditions.

    :type ExpiresIn: int
    :param ExpiresIn: The number of seconds the presigned post
        is valid for.

    :rtype: dict
    :returns: A dictionary with two elements: ``url`` and ``fields``.
        Url is the url to post to. Fields is a dictionary filled with
        the form fields and respective values to use when submitting the
        post. For example:

        .. code:: python

            {
                'url': 'https://amzn-s3-demo-bucket.s3.amazonaws.com',
                'fields': {
                    'acl': 'public-read',
                    'key': 'mykey',
                    'signature': 'mysignature',
                    'policy': 'mybase64 encoded policy'
                }
            }
    NTr   CreateBucketr   r   rR   r   Fr  bucketz${filename}zstarts-withz$keyrh   )rn   r   r   rH   )copyr  r   r   r   r  r   r  r   r	  rC   r
  r  r   rT   r   r   )r   r   KeyFields
Conditionsr   r  rh   r   r   rH   r>   post_presignerr   r   r  r   r  r  rn   s                       r$   r   r   G  s   P F
CFJJ~
 #:4@@ G
 %T%9::N i-==nMMO""f%' #  F
 $VZZ"%=%=>>M
 	&&#00	 	' 	 		 00'!"# 1  L x())) ||M"" (=&#6K]9K9K8K6K2LMNNNN5#,''' F5M11!	 2   r&   c                    | j         j        dk    rdS | j         j        j        }|rc|                    dd          rdS |                    d          dk    r| j         j        j        dk    rdS |                    d          dk    rdS d	S )
NawsFuse_dualstack_endpointus_east_1_regional_endpointregionalz	us-east-1addressing_stylevirtualT)r   	partitionconfigs3rC   r   )client	s3_configs     r$   r  r    s    {%%u"%I 	==1599 	5MM788JFF".+==5==+,,	9954r&   r   )Nr   )Nrj   N)NNrj   )%r   r   r   r   rA   botocore.authbotocore.awsrequestr   r   botocore.compatr   r   botocore.exceptionsr   r   r	   r
   botocore.tokensr   botocore.utilsr   r   r   r   rx   r   r   r   r   r   r   r   r   ro   r  r   r  r<   r&   r$   <module>r0     s            K K K K K K K K = = = = = = = =            , + + + + +         I I I I I I I IX
C
 C
 C
 C
 C
 C
 C
 C
LH H H  3( 3( 3( 3(n 470( 0( 0( 0(h ,/   , ,/   *W6 W6 W6 W6 W6 W6 W6 W6tH H H
 AEL L L L^J J J
 @DL L L L^    r&   