§
    «eîi%ˆ  ã                   óh  — d Z ddlZddlZddlZddlmZ ddlZddlmZm	Z	 ddl
mZmZmZ ddl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  dd	l!m"Z" dd
l#m$Z$m%Z%  ej&        e'¦  «        Z(dZ)di iZ* G d„ d¦  «        Z+ G d„ de+¦  «        Z, G d„ de-e¦  «        Z. G d„ d¦  «        Z/dS )zÛResolves regions and endpoints.

This module implements endpoint resolution, including resolving endpoints for a
given service and region and resolving the available endpoints for a service
in a specific AWS partition.
é    N)ÚEnum)ÚUNSIGNEDÚ
xform_name)ÚAUTH_TYPE_MAPSÚHAS_CRTÚresolve_auth_scheme_preference©ÚCRT_SUPPORTED_AUTH_TYPES)ÚEndpointProvider)ÚEndpointProviderErrorÚEndpointVariantErrorÚ!InvalidEndpointConfigurationErrorÚInvalidHostLabelErrorÚMissingDependencyExceptionÚNoRegionErrorÚParamValidationErrorÚ$UnknownEndpointResolutionBuiltInNameÚUnknownRegionErrorÚUnknownSignatureVersionErrorÚ*UnsupportedS3AccesspointConfigurationErrorÚUnsupportedS3ConfigurationErrorÚUnsupportedS3ControlArnErrorÚ&UnsupportedS3ControlConfigurationError)Úregister_feature_id)Úensure_booleanÚinstance_cachez{service}.{region}.{dnsSuffix}Ú	endpointsc                   ó*   — e Zd ZdZdd„Zd„ Z	 d	d„ZdS )
ÚBaseEndpointResolverz3Resolves regions and endpoints. Must be subclassed.Nc                 ó   — t           ‚)a7  Resolves an endpoint for a service and region combination.

        :type service_name: string
        :param service_name: Name of the service to resolve an endpoint for
            (e.g., s3)

        :type region_name: string
        :param region_name: Region/endpoint name to resolve (e.g., us-east-1)
            if no region is provided, the first found partition-wide endpoint
            will be used if available.

        :rtype: dict
        :return: Returns a dict containing the following keys:
            - partition: (string, required) Resolved partition name
            - endpointName: (string, required) Resolved endpoint name
            - hostname: (string, required) Hostname to use for this endpoint
            - sslCommonName: (string) sslCommonName to use for this endpoint.
            - credentialScope: (dict) Signature version 4 credential scope
              - region: (string) region name override when signing.
              - service: (string) service name override when signing.
            - signatureVersions: (list<string>) A list of possible signature
              versions, including s3, v4, v2, and s3v4
            - protocols: (list<string>) A list of supported protocols
              (e.g., http, https)
            - ...: Other keys may be included as well based on the metadata
        ©ÚNotImplementedError)ÚselfÚservice_nameÚregion_names      úT/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/botocore/regions.pyÚconstruct_endpointz'BaseEndpointResolver.construct_endpoint>   s
   € õ6 "Ð!ó    c                 ó   — t           ‚)z�Lists the partitions available to the endpoint resolver.

        :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]).
        r!   ©r#   s    r&   Úget_available_partitionsz-BaseEndpointResolver.get_available_partitions[   s
   € õ
 "Ð!r(   ÚawsFc                 ó   — t           ‚)aÒ  Lists the endpoint names of a particular partition.

        :type service_name: string
        :param service_name: Name of a service to list endpoint for (e.g., s3)

        :type partition_name: string
        :param partition_name: Name of the partition to limit endpoints to.
            (e.g., aws for the public AWS endpoints, aws-cn for AWS China
            endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc.

        :type allow_non_regional: bool
        :param allow_non_regional: Set to True to include endpoints that are
             not regional endpoints (e.g., s3-external-1,
             fips-us-gov-west-1, etc).
        :return: Returns a list of endpoint names (e.g., ["us-east-1"]).
        r!   )r#   r$   Úpartition_nameÚallow_non_regionals       r&   Úget_available_endpointsz,BaseEndpointResolver.get_available_endpointsb   s
   € õ& "Ð!r(   ©N)r,   F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r+   r0   © r(   r&   r   r   ;   sX   € € € € € Ø=Ð=ð"ð "ð "ð "ð:"ð "ð "ð FKð"ð "ð "ð "ð "ð "r(   r   c                   ó’   — e Zd ZdZddgZdd„Zdd„Zd„ Z	 	 	 dd
„Z	 dd„Z		 	 	 	 dd„Z
d„ Z	 dd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd	S )ÚEndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz	aws-iso-bFc                 óH   — d|vrt          d¦  «        ‚|| _        || _        dS )a  
        :type endpoint_data: dict
        :param endpoint_data: A dict of partition data.

        :type uses_builtin_data: boolean
        :param uses_builtin_data: Whether the endpoint data originates in the
            package's data directory.
        Ú
partitionsz%Missing "partitions" in endpoint dataN)Ú
ValueErrorÚ_endpoint_dataÚuses_builtin_data)r#   Úendpoint_datar=   s      r&   Ú__init__zEndpointResolver.__init__}   s4   € ð ˜}Ð,Ð,ÝÐDÑEÔEÐEØ+ˆÔØ!2ˆÔÐÐr(   r,   c                 óx   — | j         d         D ]+}|d         |k    rŒ|d         }||vrŒ||         d         c S d S )Nr:   Ú	partitionÚservicesr   )r<   )r#   r$   r.   rA   rB   s        r&   Úget_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data‹   sd   € ØÔ,¨\Ô:ð 	7ð 	7ˆIØ˜Ô%¨Ò7Ð7ØØ  Ô,ˆHØ 8Ð+Ð+ØØ˜LÔ)¨+Ô6Ð6Ð6Ð6ð	7ð 	7r(   c                 ó`   — g }| j         d         D ]}|                     |d         ¦  «         Œ|S )Nr:   rA   )r<   Úappend)r#   ÚresultrA   s      r&   r+   z)EndpointResolver.get_available_partitions”   s=   € ØˆØÔ,¨\Ô:ð 	2ð 	2ˆIØ�MŠM˜) KÔ0Ñ1Ô1Ð1Ð1Øˆr(   Nc                 ó:  — g }| j         d         D ]Š}|d         |k    rŒ|d         }||vrŒ||         d         }|D ]]}	|	|d         v }
|r6|
r4|                      ||	         |¦  «        }|r|                     |	¦  «         ŒD|s|
r|                     |	¦  «         Œ^Œ‹|S )Nr:   rA   rB   r   Úregions)r<   Ú_retrieve_variant_datarE   )r#   r$   r.   r/   Úendpoint_variant_tagsrF   rA   rB   Úservice_endpointsÚendpoint_nameÚis_regional_endpointÚvariant_datas               r&   r0   z(EndpointResolver.get_available_endpointsš   sö   € ð ˆØÔ,¨\Ô:ð 	1ð 	1ˆIØ˜Ô%¨Ò7Ð7ØØ  Ô,ˆHØ 8Ð+Ð+ØØ (¨Ô 6°{Ô CÐØ!2ð 
1ð 
1�Ø'4¸	À)Ô8LÐ'LÐ$à(ð 1Ð-Að 1Ø#'×#>Ò#>Ø)¨-Ô8Ð:Oñ$ô $�Lð $ð 5ØŸš mÑ4Ô4Ð4øØ'ð 1Ð+?ð 1Ø—M’M -Ñ0Ô0Ð0øð
1ð ˆr(   c                 óÊ   — | j         d         D ]T}|d         |k    rF|r:|                      |                     d¦  «        |¦  «        }|rd|v r
|d         c S ŒJ|d         c S ŒUd S )Nr:   rA   ÚdefaultsÚ	dnsSuffix)r<   rI   Úget)r#   r.   rJ   rA   Úvariants        r&   Úget_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix¶   s�   € ð Ô,¨\Ô:ð 		2ð 		2ˆIØ˜Ô%¨Ò7Ð7Ø(ð 2Ø"×9Ò9Ø!Ÿš jÑ1Ô1Ð3Hñô �Gð ð 4 ;°'Ð#9Ð#9Ø& {Ô3Ð3Ð3Ð3øà$ [Ô1Ð1Ð1Ð1ð 8ð ˆtr(   c                 ó$  — |dk    r|r|€d}|�@d }| j         d         D ]}|d         |k    r|}Œ|�|                      |||||d¦  «        }|S d S | j         d         D ]3}|r|d         | j        v rŒ|                      |||||¦  «        }|r|c S Œ4d S )NÚs3z	us-east-1r:   rA   T)r<   Ú_endpoint_for_partitionÚ!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r#   r$   r%   r.   Úuse_dualstack_endpointÚuse_fips_endpointÚvalid_partitionrA   rF   s	            r&   r'   z#EndpointResolver.construct_endpointÅ   s  € ð ˜DÒ Ð Ø&ð !àÐ#à%ˆKàÐ%Ø"ˆOØ!Ô0°Ô>ð 0ð 0�	Ø˜[Ô)¨^Ò;Ð;Ø&/�OøàÐ*Ø×5Ò5Ø#Ø ØØ*Ø%Øñô �ð �Ø�4ð Ô,¨\Ô:ð 	ð 	ˆIØ%ð Ø˜+Ô&ØÔ9ð:ð :ð Ø×1Ò1ØØØØ&Ø!ñô ˆFð ð Ø���ðð	ð 	r(   c                 ó„   — | j         d         D ]"}|                      ||¦  «        r
|d         c S Œ#t          |d¬¦  «        ‚)Nr:   rA   z,No partition found for provided region_name.)r%   Ú	error_msg)r<   Ú_region_matchr   )r#   r%   rA   s      r&   Úget_partition_for_regionz)EndpointResolver.get_partition_for_region÷   sd   € ØÔ,¨\Ô:ð 	.ð 	.ˆIØ×!Ò! )¨[Ñ9Ô9ð .Ø  Ô-Ð-Ð-Ð-ð.å Ø#ØDð
ñ 
ô 
ð 	
r(   c                 óV  — |d         }|r!|| j         v rd|› d�}t          dg|¬¦  «        ‚|d                              |t          ¦  «        }	|€d|	v r	|	d         }nt	          ¦   «         ‚|||	|||dœ}
||	d	         v r | j        di |
¤ŽS |                      ||¦  «        s|r‡|	                     d¦  «        }|	                     d
d¦  «        }|r1|s/t                               d|||¦  «         ||
d<    | j        di |
¤ŽS t                               d||¦  «          | j        di |
¤ŽS d S )NrA   z4Dualstack endpoints are currently not supported for z
 partitionÚ	dualstack©Útagsr]   rB   ÚpartitionEndpoint)rA   r$   Úservice_datarL   rY   rZ   r   ÚisRegionalizedTz'Using partition endpoint for %s, %s: %srL   z*Creating a regex based endpoint for %s, %sr6   )	rX   r   rR   ÚDEFAULT_SERVICE_DATAr   Ú_resolver^   ÚLOGÚdebug)r#   rA   r$   r%   rY   rZ   Úforce_partitionr.   r]   re   Úresolve_kwargsÚpartition_endpointÚis_regionalizeds                r&   rW   z(EndpointResolver._endpoint_for_partition   sÓ  € ð # ;Ô/ˆà"ð	Pà $Ô"HÐHÐHð3Ø&ð3ð 3ð 3ð õ '¨[¨MÀYÐOÑOÔOÐOð ! Ô,×0Ò0ØÕ.ñ
ô 
ˆð ÐØ" lÐ2Ð2Ø*Ð+>Ô?��å#‘o”oÐ%ð #Ø(Ø(Ø(Ø&<Ø!2ð
ð 
ˆð ˜, {Ô3Ð3Ð3Ø �4”=Ð2Ð2 >Ð2Ð2Ð2ð ×Ò˜i¨Ñ5Ô5ð 	3¸ð 	3à!-×!1Ò!1Ð2EÑ!FÔ!FÐØ*×.Ò.Ð/?ÀÑFÔFˆOØ!ð 7¨/ð 7Ý—	’	Ø=Ø ØØ&ñ	ô ð ð 3E�˜Ñ/Ø$�t”}Ð6Ð6 ~Ð6Ð6Ð6Ý�IŠIØ<ØØñô ð ð
 !�4”=Ð2Ð2 >Ð2Ð2Ð2ð%	3ð 	3r(   c                 ó€   — ||d         v rdS d|v r-t          j        |d         ¦  «                             |¦  «        S dS )NrH   TÚregionRegexF)ÚreÚcompileÚmatch)r#   rA   r%   s      r&   r^   zEndpointResolver._region_matchA  sJ   € Ø˜) IÔ.Ð.Ð.Ø�4Ø˜IÐ%Ð%Ý”:˜i¨Ô6Ñ7Ô7×=Ò=¸kÑJÔJÐJØˆur(   c                 ó¸   — |                      dg ¦  «        }|D ]@}t          |d         ¦  «        t          |¦  «        k    r|                     ¦   «         }|c S ŒAd S )NÚvariantsrc   )rR   ÚsetÚcopy)r#   r>   rc   ru   rS   rF   s         r&   rI   z'EndpointResolver._retrieve_variant_dataH  sh   € Ø ×$Ò$ Z°Ñ4Ô4ˆØð 	ð 	ˆGÝ�7˜6”?Ñ#Ô#¥s¨4¡y¤yÒ0Ð0Ø Ÿš™œ�Ø���ð 1ð	ð 	r(   c                 óf   — g }|r|                      d¦  «         |r|                      d¦  «         |S )Nra   Úfips)rE   )r#   rY   rZ   rc   s       r&   Ú_create_tag_listz!EndpointResolver._create_tag_listO  s@   € ØˆØ!ð 	%Ø�KŠK˜Ñ$Ô$Ð$Øð 	 Ø�KŠK˜ÑÔÐØˆr(   c                 óv   — i }|||fD ]0}|                       ||¦  «        }|r|                      ||¦  «         Œ1|S r1   )rI   Ú_merge_keys)r#   rc   r>   Úservice_defaultsÚpartition_defaultsrF   ru   rS   s           r&   Ú_resolve_variantz!EndpointResolver._resolve_variantW  sZ   € ð ˆØ&Ð(8Ð:LÐMð 	2ð 	2ˆHØ×1Ò1°(¸DÑAÔAˆGØð 2Ø× Ò  ¨&Ñ1Ô1Ð1øØˆr(   c                 ó   — |                      di ¦  «                              |i ¦  «        }|                      d¦  «        rt                               d|¦  «         |                      di ¦  «        }|                      di ¦  «        }	|                      ||¦  «        }
|
rN|                      |
|||	¦  «        }|i k    rd|› d|› �}t          |
|¬¦  «        ‚|                      ||¦  «         n|}d|vr|d         |d<   |d	         |d	<   ||d
<   |                      ||¦  «         |                      |	|¦  «         |                      ||d         |||d         ¦  «        |d<   d|v r(|                      ||d         |||d         ¦  «        |d<   |S )Nr   Ú
deprecatedz5Client is configured with the deprecated endpoint: %srP   zEndpoint does not exist for z in region rb   rQ   rA   ÚendpointNameÚhostnameÚsslCommonName)rR   ri   Úwarningrz   r   r   r|   Ú_expand_template)r#   rA   r$   re   rL   rY   rZ   r>   r}   r~   rc   rF   r]   s                r&   rh   zEndpointResolver._resolvea  s  € ð %×(Ò(¨°bÑ9Ô9×=Ò=Ø˜2ñ
ô 
ˆð ×Ò˜\Ñ*Ô*ð 	Ý�KŠKØGØñô ð ð
 (×+Ò+¨J¸Ñ;Ô;ÐØ&Ÿ]š]¨:°rÑ:Ô:ÐØ×$Ò$Ð%;Ð=NÑOÔOˆàð 	#Ø×*Ò*Ø�mÐ%5Ð7Iñô ˆFð ˜Š|ˆ|ð1°<ð 1ð 1Ø!.ð1ð 1ð õ +°À	ÐJÑJÔJÐJØ×Ò˜]¨FÑ3Ô3Ð3Ð3à"ˆFð ˜fÐ$Ð$Ø"+¨KÔ"8ˆF�;Ñà'¨Ô4ˆˆ{ÑØ!.ˆˆ~Ñð 	×ÒÐ)¨6Ñ2Ô2Ð2Ø×ÒÐ+¨VÑ4Ô4Ð4à!×2Ò2ØØ�:ÔØØØ�;Ôñ
ô 
ˆˆzÑð ˜fÐ$Ð$Ø&*×&;Ò&;ØØ�Ô'ØØØ�{Ô#ñ'ô 'ˆF�?Ñ#ð ˆr(   c                 ó.   — |D ]}||vr||         ||<   Œd S r1   r6   )r#   Ú	from_datarF   Úkeys       r&   r|   zEndpointResolver._merge_keys£  s4   € Øð 	-ð 	-ˆCØ˜&Ð Ð Ø'¨œn��s‘øð	-ð 	-r(   c                 ó2   — |                      |||¬¦  «        S )N)ÚserviceÚregionrQ   )Úformat)r#   rA   Útemplater$   rL   rQ   s         r&   r†   z!EndpointResolver._expand_template¨  s&   € ð �ŠØ ¨À)ð ñ 
ô 
ð 	
r(   )F)r,   )r,   FNr1   )NNFF)r2   r3   r4   r5   rX   r?   rC   r+   r0   rT   r'   r_   rW   r^   rI   rz   r   rh   r|   r†   r6   r(   r&   r8   r8   x   sM  € € € € € ØAÐAà)2°KÐ(@Ð%ð3ð 3ð 3ð 3ð7ð 7ð 7ð 7ðð ð ð Ø Ø"ðð ð ð ð: 59ðð ð ð ð$ ØØ$Øð0ð 0ð 0ð 0ðd
ð 
ð 
ð  ð?3ð ?3ð ?3ð ?3ðBð ð ðð ð ðð ð ðð ð ð@ð @ð @ðD-ð -ð -ð

ð 
ð 
ð 
ð 
r(   r8   c                   óF   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdS )ÚEndpointResolverBuiltinszAWS::RegionzAWS::UseFIPSzAWS::UseDualStackzAWS::STS::UseGlobalEndpointzAWS::S3::UseGlobalEndpointzAWS::S3::AcceleratezAWS::S3::ForcePathStylezAWS::S3::UseArnRegionz$AWS::S3::DisableS3ExpressSessionAuthzAWS::S3Control::UseArnRegionz'AWS::S3::DisableMultiRegionAccessPointszSDK::EndpointzAWS::Auth::AccountIdz AWS::Auth::AccountIdEndpointModeN)r2   r3   r4   Ú
AWS_REGIONÚAWS_USE_FIPSÚAWS_USE_DUALSTACKÚAWS_STS_USE_GLOBAL_ENDPOINTÚAWS_S3_USE_GLOBAL_ENDPOINTÚAWS_S3_ACCELERATEÚAWS_S3_FORCE_PATH_STYLEÚAWS_S3_USE_ARN_REGIONÚ#AWS_S3_DISABLE_EXPRESS_SESSION_AUTHÚAWS_S3CONTROL_USE_ARN_REGIONÚAWS_S3_DISABLE_MRAPÚSDK_ENDPOINTÚ
ACCOUNT_IDÚACCOUNT_ID_ENDPOINT_MODEr6   r(   r&   r�   r�   °  sr   € € € € € à€Jð "€Lð ,Ðð #@Ðð ">Ðà-Ðà7Ðð 4Ðð 	/ð (ð
 $BÐ àCÐà"€Là'€JàAÐÐÐr(   r�   c                   ó¶   — e Zd ZdZ	 	 	 dd„Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚEndpointRulesetResolverz5Resolves endpoints using a service's endpoint rulesetTNc
                 óÎ   — t          ||¬¦  «        | _        | j        j        j        | _        || _        || _        || _        || _        || _	        || _
        |	| _        i | _        d S )N)Úruleset_dataÚpartition_data)r   Ú	_providerÚrulesetÚ
parametersÚ_param_definitionsÚ_service_modelÚ	_builtinsÚ_client_contextÚ_event_emitterÚ_use_sslÚ_requested_auth_schemeÚ_auth_scheme_preferenceÚ_instance_cache)
r#   Úendpoint_ruleset_datar£   Úservice_modelÚbuiltinsÚclient_contextÚevent_emitterÚuse_sslÚrequested_auth_schemeÚauth_scheme_preferences
             r&   r?   z EndpointRulesetResolver.__init__Û  sv   € õ *Ø.Ø)ð
ñ 
ô 
ˆŒð #'¤.Ô"8Ô"CˆÔØ+ˆÔØ!ˆŒØ-ˆÔØ+ˆÔØˆŒØ&;ˆÔ#Ø'=ˆÔ$Ø!ˆÔÐÐr(   c                 óB  — |€i }|€i }|                       |||¦  «        }t                               d|¦  «         	  | j        j        di |¤Ž}n.# t
          $ r!}|                      ||¦  «        }|€‚ ||‚d}~ww xY wt                               d|j        ¦  «         | j        sD|j         	                    d¦  «        r*d|vr&| 
                    d|j        dd…         › �¬¦  «        }| 
                    d	„ |j                             ¦   «         D ¦   «         ¬
¦  «        }|S )zAInvokes the provider with params defined in the service's rulesetNz-Calling endpoint provider with parameters: %szEndpoint provider result: %szhttps://ÚEndpointzhttp://é   )Úurlc                 ó&   — i | ]\  }}||d          “ŒS )r   r6   )Ú.0r‰   Úvals      r&   ú
<dictcomp>z>EndpointRulesetResolver.construct_endpoint.<locals>.<dictcomp>$  s/   € ð ð ð Ù (  S��S˜”Vðð ð r(   )Úheadersr6   )Ú_get_provider_paramsri   rj   r¤   Úresolve_endpointr   Ú#ruleset_error_to_botocore_exceptionr»   r¬   Ú
startswithÚ_replacerÀ   Úitems)r#   Úoperation_modelÚ	call_argsÚrequest_contextÚprovider_paramsÚprovider_resultÚexÚbotocore_exceptions           r&   r'   z*EndpointRulesetResolver.construct_endpointõ  s˜  € ð ÐØˆIàÐ"Ø ˆOà×3Ò3Ø˜Y¨ñ
ô 
ˆõ 	�	Š	Ø;¸_ñ	
ô 	
ð 	
ð	1Ø=˜dœnÔ=ð ð Ø!ðð ˆOˆOøõ %ð 	1ð 	1ð 	1Ø!%×!IÒ!IØ�Oñ"ô "Ðð "Ð)Øà(¨bÐ0øøøøð	1øøøõ 	�	Š	Ð0°/Ô2EÑFÔFÐFð ”ð	àÔ#×.Ò.¨zÑ:Ô:ð	ð  /Ð1Ð1à-×6Ò6Ø7˜oÔ1°!°"°"Ô5Ð7Ð7ð 7ñ ô ˆOð *×2Ò2ðð Ø,;Ô,C×,IÒ,IÑ,KÔ,Kðñ ô ð 3ñ 
ô 
ˆð Ðs   ¼A Á
A:ÁA5Á5A:c                 ó*  — i }|                       |||¦  «        }| j                             ¦   «         D ]_\  }}|                      |||¬¦  «        }|€#|j        �|                      |j        |¬¦  «        }|�|||<   |                      ||¦  «         Œ`|S )a…  Resolve a value for each parameter defined in the service's ruleset

        The resolution order for parameter values is:
        1. Operation-specific static context values from the service definition
        2. Operation-specific dynamic context values from API parameters
        3. Client-specific context parameters
        4. Built-in values such as region, FIPS usage, ...
        )Ú
param_namerÇ   rÈ   N)Úbuiltin_namer²   )Ú_get_customized_builtinsr§   rÆ   Ú_resolve_param_from_contextÚbuiltinÚ_resolve_param_as_builtinÚ_register_endpoint_feature_ids)	r#   rÇ   rÈ   rÉ   rÊ   Úcustomized_builtinsrÏ   Ú	param_defÚ	param_vals	            r&   rÁ   z,EndpointRulesetResolver._get_provider_params+  sÔ   € ð ˆð #×;Ò;Ø˜Y¨ñ
ô 
Ðð &*Ô%<×%BÒ%BÑ%DÔ%Dð 	Kð 	KÑ!ˆJ˜	Ø×8Ò8Ø%Ø /Ø#ð 9ñ ô ˆIð
 Ð  YÔ%6Ð%BØ ×:Ò:Ø!*Ô!2Ø0ð ;ñ ô �	ð Ð$Ø.7� 
Ñ+Ø×3Ò3°JÀ	ÑJÔJÐJøàÐr(   c                 óÌ   — |                       ||¦  «        }|�|S |                      |||¦  «        }|�|S |                      |||¦  «        }|�|S |                      |¦  «        S r1   )Ú&_resolve_param_as_static_context_paramÚ'_resolve_param_as_dynamic_context_paramÚ)_resolve_param_as_operation_context_paramÚ&_resolve_param_as_client_context_param)r#   rÏ   rÇ   rÈ   ÚstaticÚdynamicÚoperation_context_paramss          r&   rÒ   z3EndpointRulesetResolver._resolve_param_from_contextM  s•   € ð ×<Ò<Ø˜ñ
ô 
ˆð ÐØˆMØ×>Ò>Ø˜¨ñ
ô 
ˆð ÐØˆNà×:Ò:Ø˜O¨Yñô ð 	!ð
 $Ð/Ø+Ð+Ø×:Ò:¸:ÑFÔFÐFr(   c                 óV   — |                       |¦  «        }|                     |¦  «        S r1   )Ú_get_static_context_paramsrR   )r#   rÏ   rÇ   Ústatic_ctx_paramss       r&   rÚ   z>EndpointRulesetResolver._resolve_param_as_static_context_paramc  s,   € ð !×;Ò;¸OÑLÔLÐØ ×$Ò$ ZÑ0Ô0Ð0r(   c                 ór   — |                       |¦  «        }||v r||         }|                     |¦  «        S d S r1   )Ú_get_dynamic_context_paramsrR   )r#   rÏ   rÇ   rÈ   Údynamic_ctx_paramsÚmember_names         r&   rÛ   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_parami  sH   € ð "×=Ò=¸oÑNÔNÐØÐ+Ð+Ð+Ø,¨ZÔ8ˆKØ—=’= Ñ-Ô-Ð-ð ,Ð+r(   c                 óz   — |                       ¦   «         }||v r"||         }| j                             |¦  «        S d S r1   )Ú_get_client_context_paramsrª   rR   )r#   rÏ   Úclient_ctx_paramsÚclient_ctx_varnames       r&   rÝ   z>EndpointRulesetResolver._resolve_param_as_client_context_paramq  sK   € Ø ×;Ò;Ñ=Ô=ÐØÐ*Ð*Ð*Ø!2°:Ô!>ÐØÔ'×+Ò+Ð,>Ñ?Ô?Ð?ð +Ð*r(   c                 ób   — |j         }||v r#||         d         }t          j        ||¦  «        S d S )NÚpath)Úoperation_context_parametersÚjmespathÚsearch)r#   rÏ   rÇ   rÈ   Úoperation_ctx_paramsrí   s         r&   rÜ   zAEndpointRulesetResolver._resolve_param_as_operation_context_paramw  sB   € ð  /ÔKÐØÐ-Ð-Ð-Ø'¨
Ô3°FÔ;ˆDÝ”? 4¨Ñ3Ô3Ð3ð .Ð-r(   c                 óÂ   — |t           j                             ¦   «         vrt          |¬¦  «        ‚|                     |¦  «        }t          |¦  «        r
 |¦   «         S |S )N©Úname)r�   Ú__members__Úvaluesr   rR   Úcallable)r#   rÐ   r²   rÓ   s       r&   rÔ   z1EndpointRulesetResolver._resolve_param_as_builtin  s`   € ØÕ7ÔC×JÒJÑLÔLÐLÐLÝ6¸LÐIÑIÔIÐIØ—,’,˜|Ñ,Ô,ˆÝ�GÑÔð 	Ø�7‘9”9ÐØˆr(   c                 ó$   — d„ |j         D ¦   «         S )z=Mapping of param names to static param value for an operationc                 ó(   — i | ]}|j         |j        “ŒS r6   )rô   Úvalue©r½   Úparams     r&   r¿   zFEndpointRulesetResolver._get_static_context_params.<locals>.<dictcomp>Š  s.   € ð 
ð 
ð 
àð ŒJ˜œð
ð 
ð 
r(   )Ústatic_context_parameters©r#   rÇ   s     r&   râ   z2EndpointRulesetResolver._get_static_context_params‡  s&   € ð
ð 
à(ÔBð
ñ 
ô 
ð 	
r(   c                 ó$   — d„ |j         D ¦   «         S )z7Mapping of param names to member names for an operationc                 ó(   — i | ]}|j         |j        “ŒS r6   )rô   rç   rû   s     r&   r¿   zGEndpointRulesetResolver._get_dynamic_context_params.<locals>.<dictcomp>’  s/   € ð 
ð 
ð 
àð ŒJ˜Ô)ð
ð 
ð 
r(   )Úcontext_parametersrþ   s     r&   rå   z3EndpointRulesetResolver._get_dynamic_context_params�  s&   € ð
ð 
à(Ô;ð
ñ 
ô 
ð 	
r(   c                 ó.   — d„ | j         j        D ¦   «         S )z7Mapping of param names to client configuration variablec                 óB   — i | ]}|j         t          |j         ¦  «        “ŒS r6   )rô   r   rû   s     r&   r¿   zFEndpointRulesetResolver._get_client_context_params.<locals>.<dictcomp>š  s6   € ð 
ð 
ð 
àð ŒJ�
 5¤:Ñ.Ô.ð
ð 
ð 
r(   )r¨   Úclient_context_parametersr*   s    r&   ré   z2EndpointRulesetResolver._get_client_context_params—  s)   € ð
ð 
àÔ,ÔFð
ñ 
ô 
ð 	
r(   c                 ó¸   — | j         j                             ¦   «         }t          j        | j        ¦  «        }| j                             d|› �||||¬¦  «         |S )Nzbefore-endpoint-resolution.)r²   ÚmodelÚparamsÚcontext)r¨   Ú
service_idÚ	hyphenizerw   r©   r«   Úemit)r#   rÇ   rÈ   rÉ   r	  rÖ   s         r&   rÑ   z0EndpointRulesetResolver._get_customized_builtinsŸ  sl   € ð Ô(Ô3×=Ò=Ñ?Ô?ˆ
Ý"œi¨¬Ñ7Ô7ÐàÔ× Ò Ø6¨*Ð6Ð6Ø(Ø!ØØ#ð 	!ñ 	
ô 	
ð 	
ð #Ð"r(   c                 óÎ  ‡ — t          |t          ¦  «        rt          |¦  «        dk    rt          d¦  «        ‚t                               dd                     d„ |D ¦   «         ¦  «        ‰ j        ¦  «         ‰ j        t          k    rdi fS d„ |D ¦   «         }ˆ fd„|D ¦   «         }‰ j        �4	 t          ˆ fd
„|D ¦   «         ¦  «        \  }}në# t          $ r d	i fcY S w xY w‰ j        �A‰ j                             d¦  «        }ˆ fd„|D ¦   «         }t          ||¦  «        }||         }n�	 t          d„ |D ¦   «         ¦  «        \  }}nq# t          $ rd d}d„ |D ¦   «         }t          st          d„ |D ¦   «         ¦  «        }|rt!          d¬¦  «        ‚t#          d                     |¦  «        ¬¦  «        ‚w xY wi }	d|v r|d         |	d<   n;d|v r7t          |d         ¦  «        dk    rd                     |d         ¦  «        |	d<   d|v r|	                     |d         ¬¦  «         d|v rt'          |d         ¦  «        |	d<   t                               d|d         ||	¦  «         ||	fS )að  Convert an Endpoint's authSchemes property to a signing_context dict

        :type auth_schemes: list
        :param auth_schemes: A list of dictionaries taken from the
            ``authSchemes`` property of an Endpoint object returned by
            ``EndpointProvider``.

        :rtype: str, dict
        :return: Tuple of auth type string (to be used in
            ``request_context['auth_type']``) and signing context dict (for use
            in ``request_context['signing']``).
        r   z&auth_schemes must be a non-empty list.z_Selecting from endpoint provider's list of auth schemes: %s. User selected auth scheme is: "%s"z, c                 ó@   — g | ]}d |                      d¦  «        › d �‘ŒS )ú"rô   )rR   ©r½   Úss     r&   ú
<listcomp>zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>Á  s.   € ÐBÐBÐB°Ð+˜1Ÿ5š5 ™=œ=Ð+Ð+Ð+ÐBÐBÐBr(   Únonec                 óP   — g | ]#}|d                                d¦  «        d         ‘Œ$S ©rô   ú#éÿÿÿÿ)Úsplitr  s     r&   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>È  s:   € ð #
ð #
ð #
Ø)*ˆAˆfŒI�OŠO˜CÑ Ô  Ô$ð#
ð #
ð #
r(   c                 óR   •— g | ]#}i |¥d ‰                      |d          ¦  «        i¥‘Œ$S ró   )Ú_strip_sig_prefix)r½   Úschemer#   s     €r&   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>Ë  sK   ø€ ð 
ð 
ð 
àð GˆvÐF�v˜t×5Ò5°f¸V´nÑEÔEÐFÐFð
ð 
ð 
r(   Nc              3   ól   •K  — | ].}‰                      ‰j        |d          ¦  «        ¯#‰j        |fV — Œ/dS ©rô   N)Ú._does_botocore_authname_match_ruleset_authnamer­   ©r½   r  r#   s     €r&   ú	<genexpr>zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>Ô  sa   øè è € ð $ð $àØ×JÒJØÔ3°Q°v´Yñô ð$ØÔ0°!Ð4ð$ð $ð $ð $ð $ð $r(   ú,c                 óz   •— i | ]7}‰                      |d                               d¦  «        d         ¦  «        |“Œ8S r  )r  r  r  s     €r&   r¿   zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<dictcomp>â  sN   ø€ ð )ð )ð )àð ×&Ò& q¨¤y§¢°sÑ';Ô';¸BÔ'?Ñ@Ô@À!ð)ð )ð )r(   c              3   óH   K  — | ]}|d          t           v ¯|d          |fV — ŒdS r  )r   r  s     r&   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>ì  sE   è è € ð $ð $àØ˜”y¥NÐ2Ð2ð �v”Y �Nà2Ð2Ð2Ð2ð$ð $r(   Fc                 ó   — g | ]
}|d          ‘ŒS ró   r6   r  s     r&   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>ö  s   € Ð$EÐ$EÐ$E°1 Q v¤YÐ$EÐ$EÐ$Er(   c              3   ó(   K  — | ]}|t           v V — Œd S r1   r	   )r½   r  s     r&   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>ø  s<   è è € ð +ð +à"ð Õ":Ð:ð+ð +ð +ð +ð +ð +r(   zbThis operation requires an additional dependency. Use pip install botocore[crt] before proceeding.©Úmsg)Úsignature_versionÚsigningRegionrŒ   ÚsigningRegionSetÚsigningName)Úsigning_nameÚdisableDoubleEncodingz?Selected auth type "%s" as "%s" with signing context params: %srô   )Ú
isinstanceÚlistÚlenÚ	TypeErrorri   rj   Újoinr­   r   ÚnextÚStopIterationr®   r  r   r   Úanyr   r   Úupdater   )
r#   Úauth_schemesÚavailable_ruleset_namesrô   r  ÚprefsÚauth_schemes_by_auth_typeÚfixable_with_crtÚauth_type_optionsÚsigning_contexts
   `         r&   Úauth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx®  s¤  ø€ õ ˜,­Ñ-Ô-ð 	Fµ°\Ñ1BÔ1BÀaÒ1GÐ1GÝÐDÑEÔEÐEå�	Š	ð1à�IŠIÐBÐB°\ÐBÑBÔBÑCÔCØÔ'ñ		
ô 	
ð 	
ð Ô&­(Ò2Ð2Ø˜2�:Ðð#
ð #
Ø.:ð#
ñ #
ô #
Ðð
ð 
ð 
ð 
à&ð
ñ 
ô 
ˆð Ô&Ð2ð õ  $ð $ð $ð $ð $à)ð$ñ $ô $ñ  ô  ‘��f�føõ !ð  ð  ð  ð ˜R�x���ð	 øøøð
 Ô)Ð5ØÔ0×6Ò6°sÑ;Ô;ˆEð)ð )ð )ð )à%ð)ñ )ô )Ð%õ 2ØÐ.ñô ˆDð /¨tÔ4ˆFˆFðÝ#ð $ð $à)ð$ñ $ô $ñ  ô  ‘��f�føõ
 !ð ð ð ð $)Ð Ø$EÐ$E¸Ð$EÑ$EÔ$EÐ!Ýð Ý'*ð +ð +à&7ð+ñ +ô +ñ (ô (Ð$ð
 $ð Ý4ðLðñ ô ð õ
 7Ø*.¯)ª)Ð4EÑ*FÔ*Fðñ ô ð ð%øøøð, ˆØ˜fÐ$Ð$Ø(.¨Ô(?ˆO˜HÑ%Ð%Ø 6Ð)Ð)Ý�6Ð,Ô-Ñ.Ô.°Ò2Ð2Ø,/¯HªHØÐ-Ô.ñ-ô -� Ñ)ð ˜FÐ"Ð"Ø×"Ò"°°}Ô0EÐ"ÑFÔFÐFØ" fÐ,Ð,Ý7EØÐ.Ô/ñ8ô 8ˆOÐ3Ñ4õ 	�	Š	ØMØ�6ŒNØØñ		
ô 	
ð 	
ð �_Ð$Ð$s   Â-C ÃCÃCÄ)E ÅA.F4c                 óD   — |                      d¦  «        r
|dd…         n|S )z6Normalize auth type names by removing any "sig" prefixÚsigé   N)rÄ   )r#   Ú	auth_names     r&   r  z)EndpointRulesetResolver._strip_sig_prefix  s'   € à )× 4Ò 4°UÑ ;Ô ;ÐJˆy˜˜˜Œ}ˆ}ÀÐJr(   c                 ó¸   — |                       |¦  «        }|                     d¦  «        d         }|dk    r|                     d¦  «        r
|dd…         }||k    S )a\  
        Whether a valid string provided as signature_version parameter for
        client construction refers to the same auth methods as a string
        returned by the endpoint ruleset provider. This accounts for:

        * The ruleset prefixes auth names with "sig"
        * The s3 and s3control rulesets don't distinguish between v4[a] and
          s3v4[a] signers
        * The v2, v3, and HMAC v1 based signers (s3, s3-*) are botocore legacy
          features and do not exist in the rulesets
        * Only characters up to the first dash are considered

        Example matches:
        * v4, sigv4
        * v4, v4
        * s3v4, sigv4
        * s3v7, sigv7 (hypothetical example)
        * s3v4a, sigv4a
        * s3v4-query, sigv4

        Example mismatches:
        * v4a, sigv4
        * s3, sigv4
        * s3-presign-post, sigv4
        Ú-r   rV   é   N)r  r  rÄ   )r#   ÚbotonameÚrsnames      r&   r  zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname"  sc   € ð4 ×'Ò'¨Ñ/Ô/ˆØ—>’> #Ñ&Ô& qÔ)ˆØ�tÒÐ × 3Ò 3°DÑ 9Ô 9ÐØ   ”|ˆHØ˜Ò!Ð!r(   c                 ót  — |j                              d¦  «        }|€dS |                     d¦  «        r?	 |                     d¦  «        d         }n# t          $ r |}Y nw xY wt          |¬¦  «        S | j        j        }|dk    rá|dk    s|d	k    rt          |¬
¦  «        S |                     d¦  «        si|                     d¦  «        sT|                     d¦  «        s?|                     d¦  «        s*|                     d¦  «        s|                     d¦  «        rt          |¬
¦  «        S | 
                    ¦   «                              d¦  «        rt          |¬¦  «        S |dk    r‹|                     d¦  «        r&|                     d¦  «        }t          ||¬¦  «        S |                     d¦  «        s|                     d¦  «        rt          |¬
¦  «        S |dk    rt          |¬¦  «        S |dk    r;|                     d¦  «        rt          |¬
¦  «        S |dk    rt          |¬
¦  «        S dS )z„Attempts to translate ruleset errors to pre-existing botocore
        exception types by string matching exception strings.
        r&  NzInvalid region in ARN: ú`é   )ÚlabelrV   z/S3 Object Lambda does not support S3 Acceleratez#Accelerate cannot be used with FIPSr%  zS3 Outposts does not supportzS3 MRAP does not supportz!S3 Object Lambda does not supportzAccess Points do not supportzInvalid configuration:z#Client was configured for partitionzinvalid arn:)ÚreportÚ	s3controlzInvalid ARN:ÚBucket)Úarnr&  z!AccountId is required but not setÚeventszUInvalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.z&EndpointId must be a valid host label.)ÚkwargsrR   rÄ   r  Ú
IndexErrorr   r¨   r$   r   r   Úlowerr   r   r   r   )r#   Úruleset_exceptionr  r&  rJ  r$   rN  s          r&   rÃ   z;EndpointRulesetResolver.ruleset_error_to_botocore_exceptionB  s–  € ð  Ô&×*Ò*¨5Ñ1Ô1ˆØˆ;ØˆFà�>Š>Ð3Ñ4Ô4ð 	6ðØŸ	š	 #™œ qÔ)��øÝð ð ð Ø���ðøøøå(¨uÐ5Ñ5Ô5Ð5àÔ*Ô7ˆØ˜4ÒÐàÐHÒHÐHØÐ?Ò?Ð?å6¸3Ð?Ñ?Ô?Ð?à—’Ð=Ñ>Ô>ðKà—>’>Ð"<Ñ=Ô=ðKð —>’>Ð"EÑFÔFðKð —>’>Ð"@ÑAÔAð	Kð
 —>’>Ð":Ñ;Ô;ðKð —>’>Ð"GÑHÔHðKõ BÀcÐJÑJÔJÐJØ�yŠy‰{Œ{×%Ò% nÑ5Ô5ð 8Ý+°3Ð7Ñ7Ô7Ð7Ø˜;Ò&Ð&Ø�~Š~˜nÑ-Ô-ð FØ—j’j Ñ*Ô*�Ý3¸ÀÐEÑEÔEÐEØ�~Š~Ð6Ñ7Ô7ð G¸3¿>º>Ø5ñ<ô <ð Gõ >À#ÐFÑFÔFÐFØÐ9Ò9Ð9Ý+°3Ð7Ñ7Ô7Ð7Ø˜8Ò#Ð#Ø�~Š~ð6ñô ð Bõ 9¸SÐAÑAÔAÐAØÐ>Ò>Ð>Ý8¸SÐAÑAÔAÐAØˆts   µA ÁA ÁA c                 óŒ   — |dk    r&t          d|                     ¦   «         › �¦  «         d S |dk    rt          d¦  «         d S d S )NÚAccountIdEndpointModeÚACCOUNT_ID_MODE_Ú	AccountIdÚRESOLVED_ACCOUNT_ID)r   Úupper)r#   rÏ   rØ   s      r&   rÕ   z6EndpointRulesetResolver._register_endpoint_feature_idsy  s]   € ØÐ0Ò0Ð0ÝÐ F°9·?²?Ñ3DÔ3DÐ FÐ FÑGÔGÐGÐGÐGØ˜;Ò&Ð&ÝÐ 5Ñ6Ô6Ð6Ð6Ð6ð 'Ð&r(   )TNN)r2   r3   r4   r5   r?   r'   rÁ   rÒ   rÚ   rÛ   rÝ   rÜ   rÔ   r   râ   rå   ré   rÑ   r=  r  r  rÃ   rÕ   r6   r(   r&   r    r    Ø  sm  € € € € € Ø?Ð?ð Ø"Ø#ð"ð "ð "ð "ð44ð 4ð 4ðl ð  ð  ðDGð Gð Gð,1ð 1ð 1ð.ð .ð .ð@ð @ð @ð4ð 4ð 4ðð ð ð ð
ð 
ñ „^ð
ð ð
ð 
ñ „^ð
ð ð
ð 
ñ „^ð
ð#ð #ð #ðn%ð n%ð n%ð`Kð Kð Kð"ð "ð "ð@5ð 5ð 5ðn7ð 7ð 7ð 7ð 7r(   r    )0r5   rw   Úloggingrq   Úenumr   rï   Úbotocorer   r   Úbotocore.authr   r   r   Úbotocore.crtr
   Úbotocore.endpoint_providerr   Úbotocore.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   Úbotocore.useragentr   Úbotocore.utilsr   r   Ú	getLoggerr2   ri   ÚDEFAULT_URI_TEMPLATErg   r   r8   Ústrr�   r    r6   r(   r&   ú<module>rf     st  ððð ð €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à €€€à )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð
 2Ð 1Ð 1Ð 1Ð 1Ð 1Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  3Ð 2Ð 2Ð 2Ð 2Ð 2Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à€gÔ˜Ñ!Ô!€Ø7Ð Ø# RÐ(Ð ð:"ð :"ð :"ð :"ð :"ñ :"ô :"ð :"ðzu
ð u
ð u
ð u
ð u
Ð+ñ u
ô u
ð u
ðp	%Bð %Bð %Bð %Bð %B˜s Dñ %Bô %Bð %BðPe7ð e7ð e7ð e7ð e7ñ e7ô e7ð e7ð e7ð e7r(   