
    Vh                    S   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
c mc mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z- ddl+m.Z/ ddl0m1Z2 dd l0m3Z3 dd!l4m5Z5 dd"l6m7Z7 dd#l6m8Z8 dd$l6m9Z9 dd%l6m:Z: dd&l;m<Z< dd'l;m=Z= 	 ddlZ G d( d)e(      Z?ee@ee@eee@e@f      f   f   ZA e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+eee@ee@eee@e@f      f   f      fd,       ZD e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+eee@e@f      fd-       ZE G d. d/e&      ZFeFj                  d0       e5j                         d1e@d+eCfd2              ZHeFj                  d3g        e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+eee@ef      fd4              ZJeFj                  d5       e5j                         d*ee@ee@eCeLeAf   f   d+ee@ef   fd6              ZMeFj                  d7       e5j                         d1e@d*ee@ee@eLee@eCf   f   f   d+eCfd8              ZNeFj                  d9       e5j                         d:e@d+ee@ee@ee@e@f   f   f   fd;              ZOeFj                  d<       e5j                         d1e@d*ee@ee@eLf   f   d+ee@ee@ee@e@f   f   f   fd=              ZP G d> d?e&      ZQeQj                  d@g        e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+eee@ef      fdA              ZReQj                  dB       e5j                         d:e@d+eCfdC              ZSeQj                  dD       e5j                         dEe@d*ee@e@f   d+ee@ee@ee@e@f   f   f   fdF              ZTeQj                  dG       e5j                         dHe@dEe@d+eCfdI              ZUeQj                  dJ       e5j                         dEe@d+eCfdK              ZVeQj                  dL       e5j                         dMe@dNeee@e@f      d+ee@ef   fdO              ZW G dP dQe&      ZXeXj                  dR       e5j                         dEe@d*ee@e@f   d+eCfdS              ZYeXj                  dT       e5j                         dEe@d*ee@ee@eCf   f   d+eCfdU              ZZeXj                  dV       e5j                         dEe@d*ee@e@f   d+eCfdW              Z[ G dX dYe&      Z\e\j                  dZg        e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+eee@ef      fd[              Z]e\j                  d\       e5j                         dMe@d+eCfd]              Z^e\j                  d^       e5j                         dMe@d_e@d+ee@ef   fd`              Z_e\j                  da       e5j                         dMe@d*ee@ee@ee@eCf   f   f   d+eCfdb              Z`e\j                  dc       e5j                         d*ee@ee@eCeLeAf   f   d+ee@ef   fdd              Zae\j                  de       e5j                         dMe@d*ee@ee@eCeLf   f   d+ee@ef   fdf              Zbe\j                  dg       e5j                         d:e@d+ee@ef   fdh              Zc G di dje&      Zdedj                  dkg        e5j                         d*ee@ef   d+eee@ef      fdl              ZeeFj                  dm       e5j                         d*ee@ee@eCeLeAf   f   d+ee@ef   fdn              ZfeFj                  do       e5j                         dpe@d+eCfdq              ZgeFj                  dr       e5j                         dpe@d+eCfds              ZheFj                  dt       e5j                         dpe@d+eCfdu              Zi G dv dwe&      Zje\j                  dxg        e5j                         d*ee@ef   d+eee@ef      fdy              Zke\j                  dz       e5j                         d{e@d|ee@ef   d+eCfd}              Zle\j                  d~       e5j                         d{e@d|ee@ef   d+eCfd              Zme\j                  d       e5j                         d*ee@ef   d+ee@ef   fd              Zne\j                  d       e5j                         d{e@d+ee@ef   fd              Zo G d de&      Zpepj                  d       e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zqepj                  d       e5j                         dNeeee@e@f         d+ee@ef   fd              Zrepj                  d       e5j                         de@dMe@d+eCfd              Zsepj                  d       e5j                         de@dMe@d+eCfd              Ztepj                  d       e5j                         de@d+eCfd              Zu G d de&      Zvevj                  dg        e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zwevj                  d       e5j                         de@d+eCfd              Zxevj                  d       e5j                  dg      d*ee@ee@eCeLeAee@   f   f   d+ee@ef   fd              Zy G d de&      Zzezj                  dg        e5j                         d*ee@eee@   eee@ee@ee@   f   f      f   f   d+eee@ee@eee@e@f      f   f      fd              Z{ezj                  d       e5j                         dde@dee@   d+eCfd              Z|ezj                  d       e5j                         d*ee@ee@eCf   f   d+ee@e@f   fd              Z}ezj                  d       e5j                         d:e@d+eCfd              Z~ezj                  d       e5j                         d*ee@ee@eAf   f   d+ee@e@f   fd              Z G d de&      Zej                  dg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+ee@ef   fd              Zej                  d       e5j                         de@d+eee@ee@ee@e@f   f   f      fd              Zezj                  d       e5j                         d*ee@ee@eCee@   ee@ee@eCf   f   eee@e@f      eAf   f   d+ee@ef   fd              Z G d de&      Zej                  di        e5j                         	 ddeeee@ef         deee@      d+ee@ef   fd              Z G d de&      Zej                  dg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zej                  d       e5j                         de@d+eCfd              Zej                  d       e5j                         de@dMe@d+eCfd              Zej                  dë       e5j                         d*ee@eee@ee@ee@   f   f   eAf   f   d+ee@ef   fdĄ              Z G dń de&      Zej                  dg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fdȄ              Zej                  dɫ       e5j                  dg      d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+ee@ef   fd˄              Zej                  d̫       e5j                         de@d+eCfd΄              Zej                  dϫ       e5j                         dMe@de@d+eCfdЄ              Zej                  dѫ       e5j                         dMe@de@d+eCfd҄              Z G dӄ de&      Zej                  dg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fdք              Zej                  d׫       e5j                         de@d+eCfdل              Zej                  dګ       e5j                         d*ee@ee@eCeLf   f   d+ee@ef   fdۄ              Zej                  dګ       e5j                         d*ee@ee@eCeLeAf   f   d+ee@ef   fd܄              Zej                  dݫ       e5j                         de@de@de@d+ee@ef   fd              Zej                  dݫ       e5j                         de@d*ee@ee@eCf   f   d+ee@ef   fd              Zg dZ G d de&      Zej                  dg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zej                  d       e5j                  e      de@d*ee@ee@ee@   ee@e@f   ee@eCf   ee@ef   ee@ee@ee@ee@eCf   f   f   f   f   f   d+eCfd              Zej                  dg        e5j                         dee@   d+eee@ef      fd              Zej                  dg        e5j                         dee@   d*ee@eeCee@   f   f   d+eee@ef      fd              Zej                  dg        e5j                         dee@   d*ee@ee@ee@   f   f   d+eee@ef      fd              Zej                  d       e5j                  e      d*ee@ef   d+ee@ef   fd              Zej                  d       e5j                  e      de@d_e@d+ee@ef   fd              Zej                  d       e5j                  e      d*ee@eee@   eCeLeee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zej                  d       e5j                  e      de@d*ee@ee@eLf   f   d+ee@eeLe@f   f   fd              Zej                  d       e5j                  e      d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+ee@ef   fd              Zej                  d       e5j                  e      dee@e@f   d:e@d+ee@eeLe@f   f   fd              Zej                  d       e5j                  e      dee@e@f   de@d+ee@ef   fd              Z G d d e&      Zej                  dg        e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zej                  d       e5j                         d*ee@ee@eeAf   f   d+ee@ee@eee@e@f      f   f   fd              Zej                  d       e5j                         d*ee@ee@eAf   f   d+ee@ee@eee@e@f      f   f   fd              Zej                  d       e5j                         dԐdee@   d	ee@   d+eCfd
              Z G d de&      Zej                  dg        e5j                         d*ee@eee@   eCeLeee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zej                  di        e5j                         de@d_e@d+eee@ef      fd              Zej                  d       e5j                         de@d+eCfd              Zej                  d       e5j                         de@d*ee@ef   d+eCfd              Zej                  d       e5j                         d*ee@ef   d+ee@e@f   fd              Zej                  d       e5j                         d*ee@ef   d+ee@e@f   fd              Z G d de&      Zej                  d       e5j                         de@d+eCfd              Zej                  dg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+ee@ef   fd               Zej                  d!       e5j                         de@d_e@d+ee@ee@eee@e@f      f   f   fd"              Zej                  d#       e5j                         de@d_e@d+eCfd$              Zej                  d%       e5j                         de@d*ee@ef   d+eCfd&              Zej                  d'       e5j                  d(gd)*      de@d*ee@ef   d+ee@ef   fd+              Z G d, d-e&      Zej                  d.g        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fd/              Zej                  d0       e5j                         d1e@d+eCfd2              Zej                  d3       e5j                         d*ee@ef   d+ee@e@f   fd4              Zej                  d5       e5j                         d*ee@ee@eLee@eeCee@eCf   f   f   f   f   d+ee@ee@eLf   f   fd6              Zej                  d7       e5j                         dӐd8e@d9eeC   d+eCfd:              Zej                  d;       e5j                         d*ee@eeCeLe@ee@   f   f   d+ee@ee@eee@e@f      f   f   fd<              Zej                  d=       e5j                         d*ee@ee@ee@   f   f   d+eCfd>              Zej                  d?       e5j                         d*ee@ef   d+eCfd@              Z G dA dBe&      Zej                  dCg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fdD              Zd*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fdEZej                  dF       e5j                         dӐdGe@dHee@   d+eCfdI              Zej                  dJ       e5j                         d*ee@ef   d+ee@ef   fdK              Z G dL dMe&      Zej                  dNg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fdO              Zej                  dP       e5j                         dQee@   d+eee@e@f      fdR              Zej                  dS       e5j                         d*ee@ef   d+eee@ef      fdT              Z G dU dVe&      Zej                  dWg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fdX              Zej                  dY       e5j                         dӐdZee@   d[ee@   d+eCfd\              Zej                  d]       e5j                         d*ee@ee@eAf   f   d+ee@ef   fd^              Zej                  d_       e5j                         d*ee@ef   d+eCfd`              Zej                  da       e5j                         d*ee@ef   d+eCfdb              Zej                  dc       e5j                         d*ee@ef   d+eCfdd              Zej                  de       e5j                         d*ee@ef   d+eCfdf              Zej                  dg       e5j                         d*ee@ef   d+eCfdh              Zej                  di       e5j                         d*ee@ef   d+eCfdj              Z G dk dle&      Zej                  dmg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fdn              Zej                  do       e5j                         dpe@d+eCfdq              Zej                  dr       e5j                         	 ddMe@dNeeA   d+ee@ef   fds              Z G dt due&      Zej                  dvg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fdw              Zej                  dx       e5j                         ddMe@dNeeA   d+ee@ef   fdy              Zej                  dz       e5j                         d{e@d|e@d}eCd~e@deLd*ee@ef   d+eCfd              Zej                  d       e5j                         d{e@d+eCfd              Zej                  d       e5j                         d{e@deLd}eCd+eCfd              Zej                  d       e5j                         d{e@d|e@d}eCd~e@deLd*ee@ef   d+ee@ef   fd              Zej                  d       e5j                         d{e@d:e@d+e@fd              Z G d de&      Zej                  dg        e5j                         d*ee@eee@   eLeee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zej                  d       e5j                         d[e@d+eCfd              Zej                  d       e5j                         d*ee@ee@eAf   f   d+ee@ef   fd              Z G d de&      Zej                  dg        e5j                         	 	 	 dՐdeee@      deee@      deeee@ee@   f         d+eee@ef      fd              Zej                  d       e5j                         d*ee@ef   d+eee@ef      fd              Zej                  d       e5j                         	 dԐdee@   dee@   dee@   d+ee@ef   fd              Zej                  d       e5j                         	 dԐdee@   dee@   d+ee@ef   fd              Zej                  d       e5j                         	 dӐde@dee@ef   dNeeA   dee@ef   d+ee@ef   f
d              Zej                  d       e5j                         dee@ef   d*ee@ef   d+ee@ef   fd              Zej                  d       e5j                         d*ee@ef   d+ee@ef   fd              ZdԐdZ G d de&      Zej                  d       e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+efd              Zej                  d       e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+ee@ef   fd              Zej                  d       e5j                         d*ee@eee@   eCeee@ee@ee@   f   f      f   f   d+ee@ef   fd              Zej                  d       e5j                         de@d+eCfd              ZdӐdZdӐdZdԐdZd֐dZdeee@ef      d+ee@ef   fdZde@d+e@fdZ G d de&      Zej                  dg        e5j                         d*ee@eee@   eee@ee@ee@   f   f      f   f   d+eee@ef      fd              Zej                  d       e5j                         d*ee@eee@   eee@ee@ee@   f   f      f   f   d+ee@ef   fd              Zej                  d«       e5j                         de@d+eCfdĄ              Z G dń de&      Zej                  dg        e5j                         d*ee@eee@   eee@ee@ee@   f   f      f   f   d+eee@ef      fdȄ              Zej                  dg        e5j                         d*ee@eee@   eee@ee@ee@   f   f      f   f   d+eee@ef      fdʄ              Z ej                  d˫       e5j                         dee@ee@   f   d+eCfd̈́              Zej                  dΫ       e5j                         de@d*ee@eee@   eee@ee@ee@   f   f      f   f   d+ee@   fdЄ              Zej                  dѫ       e5j                         deee@   e@f   d*ee@eee@   eee@ee@ee@   f   f      f   f   d+ee@ef   fd҄              Zy# e>$ r Y (w xY w(  a%  
This module adds helper functions for various EC2 specific services.

It also includes a large number of imports for functions which historically
lived here.  Most of these functions were not specific to EC2, they ended
up in this module because "that's where the AWS code was" (originally).
    N)Any)Dict)List)Optional)Union)__version__)_camel_to_snake)_snake_to_camel)camel_dict_to_snake_dict)snake_dict_to_camel_dict)integer_types)string_types   )is_outpost_arn)validate_aws_arn)	HAS_BOTO3)
boto3_conn)boto3_inventory_conn)boto_exception)get_aws_connection_info)get_aws_regionis_boto3_error_code)paginated_query_with_retries)AWSErrorHandler)AnsibleAWSError)list_iam_instance_profiles)_aws_common_argument_spec)aws_argument_spec)_py3cmp)compare_policies)AWSRetry)ansible_dict_to_boto3_tag_list)boto3_tag_list_to_ansible_dict)boto3_tag_specifications)compare_aws_tags)!ansible_dict_to_boto3_filter_list)map_complex_typec                       e Zd Zy)AnsibleEC2ErrorN)__name__
__module____qualname__     g/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/amazon/aws/plugins/module_utils/ec2.pyr*   r*   j   s    r/   r*   paramsreturnc                 ,     | j                   di |d   S )NAvailabilityZonesr.   )describe_availability_zonesclientr1   s     r0   r5   r5   q   s     
 .6--778KLLr/   c                 ,     | j                   di |d   S )NRegionsr.   )describe_regionsr6   s     r0   r:   r:   y   s    
 #6"",V,Y77r/   c                        e Zd ZeZed        Zy)EC2VpcSubnetErrorHandlerc                     t        d      S )NzInvalidSubnetID.NotFoundr   clss    r0   _is_missingz$EC2VpcSubnetErrorHandler._is_missing       "#=>>r/   Nr+   r,   r-   r*   _CUSTOM_EXCEPTIONclassmethodr@   r.   r/   r0   r<   r<          '? ?r/   r<   zdelete subnet	subnet_idc                 (    | j                  |       y)N)SubnetIdT)delete_subnet)r7   rF   s     r0   rI   rI           ),r/   zdescribe subnetsc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_subnetsSubnetsr.   get_paginatorpaginatebuild_full_resultr7   r1   	paginators      r0   rL   rL      9    
 $$%78I9''99;IFFr/   zcreate subnetc                 ,     | j                   di |d   S )NSubnetr.   )create_subnetr6   s     r0   rW   rW      s      6)&)(33r/   zmodify subnetc                 ,     | j                   dd|i| y)NrH   Tr.   )modify_subnet_attributer7   rF   r1   s      r0   rY   rY      s     #F""@I@@r/   zdisassociate subnet cidr blockassociation_idc                 ,    | j                  |      d   S )NAssociationIdIpv6CidrBlockAssociation)disassociate_subnet_cidr_blockr7   r[   s     r0   r`   r`      s     00~0NOijjr/   zassociate subnet cidr blockc                 0     | j                   dd|i|d   S )NrH   r_   r.   )associate_subnet_cidr_blockrZ   s      r0   rc   rc      s%    
 .6--KyKFKLfggr/   c                        e Zd ZeZed        Zy)EC2VpcRouteTableErrorHandlerc                     t        d      S )NzInvalidRouteTableID.NotFoundr   r>   s    r0   r@   z(EC2VpcRouteTableErrorHandler._is_missing       "#ABBr/   NrB   r.   r/   r0   re   re          'C Cr/   re   zdescribe route tablesc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_route_tablesRouteTablesr.   rN   rR   s      r0   rj   rj      9    
 $$%<=I9''99;MJJr/   zdisassociate route tablec                 (    | j                  |       yNr]   T)disassociate_route_tablera   s     r0   ro   ro      s     ##.#Ar/   zassociate route tableroute_table_idc                 *     | j                   dd|i|S )NRouteTableIdr.   )associate_route_tabler7   rp   r1   s      r0   rs   rs      s    
 (6''N^NvNNr/   zenable vgw route propagation
gateway_idc                 *    | j                  ||       y)N)rr   	GatewayIdT)enable_vgw_route_propagation)r7   ru   rp   s      r0   rx   rx      s     ''^z'Zr/   zdelete route tablec                 (    | j                  |       y)N)rr   T)delete_route_table)r7   rp   s     r0   rz   rz           >:r/   zcreate route tablevpc_idtagsc                 X    d|i}|rt        |d      |d<    | j                  di |d   S )NVpcIdzroute-tabletypesTagSpecifications
RouteTabler.   )r%   create_route_tabler7   r|   r}   r1   s       r0   r   r      >     vF&>t=&Y"#$6$$.v.|<<r/   c                        e Zd ZeZed        Zy)!EC2VpcRouteTableRouteErrorHandlerc                     t        d      S )NInvalidRoute.NotFoundr   r>   s    r0   r@   z-EC2VpcRouteTableRouteErrorHandler._is_missing       "#:;;r/   NrB   r.   r/   r0   r   r          '< <r/   r   zdelete routec                 ,     | j                   dd|i| yNrr   Tr.   )delete_routert   s      r0   r   r      s     F>^>v>r/   zreplace routec                 ,     | j                   dd|i| yr   )replace_routert   s      r0   r   r      s     F?n??r/   zcreate routec                 0     | j                   dd|i|d   S )Nrr   Returnr.   )create_routert   s      r0   r   r     s$     6ENEfEhOOr/   c                        e Zd ZeZed        Zy)EC2VpcErrorHandlerc                     t        d      S )NzInvalidVpcID.NotFoundr   r>   s    r0   r@   zEC2VpcErrorHandler._is_missing  r   r/   NrB   r.   r/   r0   r   r     r   r/   r   zdescribe vpcsc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_vpcsVpcsr.   rN   rR   s      r0   r   r     s8    
 $$_5I9''99;FCCr/   z
delete vpcc                 (    | j                  |       y)N)r   T)
delete_vpc)r7   r|   s     r0   r   r     s     F#r/   zdescribe vpc attribute	attributec                 (    | j                  ||      S )N)r   	Attribute)describe_vpc_attribute)r7   r|   r   s      r0   r   r   #  s     ((v(KKr/   zmodify vpc attributec                 ,     | j                   dd|i| y)Nr   Tr.   )modify_vpc_attributer7   r|   r1   s      r0   r   r   *  s      F7f77r/   z
create vpcc                 ,     | j                   di |d   S )NVpcr.   )
create_vpcr6   s     r0   r   r   1  s     6&v&u--r/   zassociate vpc cidr blockc                 *     | j                   dd|i|S )Nr   r.   )associate_vpc_cidr_blockr   s      r0   r   r   7  s     +6**BB6BBr/   zdisassociate vpc cidr blockc                 &    | j                  |      S )Nr]   )disassociate_vpc_cidr_blockra   s     r0   r   r   =  s     --N-KKr/   c                        e Zd ZeZed        Zy)EC2VpcPeeringErrorHandlerc                     t        d      S )Nz&InvalidVpcPeeringConnectionID.NotFoundr   r>   s    r0   r@   z%EC2VpcPeeringErrorHandler._is_missingG  s    "#KLLr/   NrB   r.   r/   r0   r   r   D  s    'M Mr/   r   zdescribe vpc peeringc                 j    | j                  d      } |j                  di |j                         d   S )N describe_vpc_peering_connectionsVpcPeeringConnectionsr.   rN   rR   s      r0   r   r   L  s:     $$%GHI9''99;<STTr/   zcreate vpc peeringc                 ,     | j                   di |d   S )NVpcPeeringConnectionr.   )create_vpc_peering_connectionr6   s     r0   r   r   S  s     
 06//9&9:PQQr/   zdelete vpc peering
peering_idc                 (    | j                  |       yN)VpcPeeringConnectionIdT)delete_vpc_peering_connectionr7   r   s     r0   r   r   [       ((
(Kr/   zaccept vpc peeringc                 (    | j                  |       yr   )accept_vpc_peering_connectionr   s     r0   r   r   b  r   r/   zreject vpc peeringc                 (    | j                  |       yr   )reject_vpc_peering_connectionr   s     r0   r   r   i  r   r/   c                        e Zd ZeZed        Zy)EC2VpnErrorHandlerc                     t        ddg      S )NzInvalidVpnConnectionID.NotFoundr   r   r>   s    r0   r@   zEC2VpnErrorHandler._is_missingt  s    "$EG^#_``r/   NrB   r.   r/   r0   r   r   q  s    'a ar/   r   zdescribe vpn connectionsc                 ,     | j                   di |d   S )NVpnConnectionsr.   )describe_vpn_connectionsr6   s     r0   r   r   y  s      +6**4V45EFFr/   zcreate vpn connection routevpn_connection_idroutec                 *    | j                  ||       yN)VpnConnectionIdDestinationCidrBlockT)create_vpn_connection_router7   r   r   s      r0   r   r          &&7H_d&er/   zdelete vpn connection routec                 *    | j                  ||       yr   )delete_vpn_connection_router   s      r0   r   r     r   r/   zcreate vpn connectionc                 ,     | j                   di |d   S )NVpnConnectionr.   )create_vpn_connectionr6   s     r0   r   r     s     (6''1&1/BBr/   zdelete vpn connectionc                 (    | j                  |       y)N)r   T)delete_vpn_connection)r7   r   s     r0   r   r     s       1B Cr/   c                        e Zd ZeZed        Zy)EC2InternetGatewayErrorHandlerc                     t        d      S )Nz!InvalidInternetGatewayID.NotFoundr   r>   s    r0   r@   z*EC2InternetGatewayErrorHandler._is_missing  s    "#FGGr/   NrB   r.   r/   r0   r   r     s    'H Hr/   r   zdescribe internet gatewaysc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_internet_gatewaysInternetGatewaysr.   rN   rR   s      r0   r   r     s:    
 $$%ABI9''99;<NOOr/   zcreate internet gatewayc                 T    i }|rt        |d      |d<    | j                  di |d   S )Nzinternet-gatewayr   r   InternetGatewayr.   )r%   create_internet_gateway)r7   r}   r1   s      r0   r   r     s;     F&>tK]&^"#)6))3F34EFFr/   zdetach internet gatewayinternet_gateway_idc                 *    | j                  ||       yN)InternetGatewayIdr   T)detach_internet_gatewayr7   r   r|   s      r0   r   r          ""5HPV"Wr/   zattach internet gatewayc                 *    | j                  ||       yr   )attach_internet_gatewayr   s      r0   r   r     r   r/   zdelete internet gatewayc                 (    | j                  |       y)N)r   T)delete_internet_gateway)r7   r   s     r0   r   r     s     ""5H"Ir/   c                        e Zd ZeZed        Zy)EC2NatGatewayErrorHandlerc                     t        d      S )NzInvalidNatGatewayID.NotFoundr   r>   s    r0   r@   z%EC2NatGatewayErrorHandler._is_missing  rg   r/   NrB   r.   r/   r0   r   r     rh   r/   r   zdescribe nat gatewaysc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_nat_gatewaysNatGatewaysr.   rN   rR   s      r0   r   r     rl   r/   zdelete nat gatewaynat_gateway_idc                 (    | j                  |       y)N)NatGatewayIdT)delete_nat_gateway)r7   r   s     r0   r   r     r{   r/   zcreate nat gatewayzInvalidElasticIpID.NotFound)catch_extra_error_codesc                 ,     | j                   di |d   S )N
NatGatewayr.   )create_nat_gatewayr6   s     r0   r   r         
 %6$$.v.|<<r/   c                        e Zd ZeZed        Zy)EC2ElasticIPErrorHandlerc                     t        d      S )NzInvalidAddress.NotFoundr   r>   s    r0   r@   z$EC2ElasticIPErrorHandler._is_missing      "#<==r/   NrB   r.   r/   r0   r   r         '> >r/   r   zdescribe addressesc                 ,     | j                   di |d   S )N	Addressesr.   )describe_addressesr6   s     r0   r   r     s     %6$$.v.{;;r/   zrelease addressallocation_idnetwork_border_groupc                 >    d|i}|r||d<    | j                   di | y)NAllocationIdNetworkBorderGroupTr.   )release_address)r7   r   r  r1   s       r0   r  r    s2     m,F';#$F$V$r/   zassociate addressc                 &     | j                   di |S Nr.   )associate_addressr6   s     r0   r  r    s     $6##-f--r/   zdisassociate addressc                 (    | j                  |       yrn   )disassociate_addressra   s     r0   r
  r
    s     n=r/   zallocate addressc                 &     | j                   di |S r  )allocate_addressr6   s     r0   r  r    s     #6"",V,,r/   c                        e Zd ZeZed        Zy)EC2VpcEndpointsErrorHandlerc                     t        ddg      S )NzInvalidVpcEndpoint.NotFoundzInvalidVpcEndpointId.NotFoundr   r>   s    r0   r@   z'EC2VpcEndpointsErrorHandler._is_missing  s    "$ACb#cddr/   NrB   r.   r/   r0   r  r    s    'e er/   r  zdescribe vpc endpointsc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_vpc_endpointsVpcEndpointsr.   rN   rR   s      r0   r  r  $  s9    
 $$%=>I9''99;NKKr/   zdelete vpc endpointsvpc_endpoint_idsc                 J    | j                  |      }|j                  dg       S )N)VpcEndpointIdsUnsuccessful)delete_vpc_endpointsget)r7   r  results      r0   r  r  -  s)     ((8H(IF::nb))r/   zcreate vpc endpointc                 ,     | j                   di |d   S )NVpcEndpointr.   )create_vpc_endpointr6   s     r0   r  r  4  s     &6%%//>>r/   c                        e Zd ZeZed        Zy)!EC2VpcEndpointServiceErrorHandlerc                     t        d      S )NInvalidServiceNamer   r>   s    r0   r@   z-EC2VpcEndpointServiceErrorHandler._is_missingC  s    "#788r/   NrB   r.   r/   r0   r  r  @  s    '9 9r/   r  zdescribe vpc endpoint services)default_valuefiltersservice_namesc                     | j                  d      }i }|r||d<   |r||d<    |j                  di |j                         }|S )a  
    Wrap call to the AWS API describe_vpc_endpoint_services (used to describe available
    services to which you can create a VPC endpoint.)
        Parameters:
            client: The boto3 client.
            filters: Optional filters to pass to the API.
            service_names: the service names.
        Returns:
            results: A dictionnary with keys 'ServiceNames' and 'ServiceDetails'
    describe_vpc_endpoint_servicesFiltersServiceNamesr.   rN   )r7   r"  r#  rS   r1   resultss         r0   r%  r%  H  sW     $$%EFIF#y!.~ i  *6*<<>GNr/   c                        e Zd ZeZed        Zy)EC2VpcDhcpOptionErrorHandlerc                     t        ddg      S )NzInvalidDhcpOptionsID.NotFoundzInvalidDhcpOptionID.NotFoundr   r>   s    r0   r@   z(EC2VpcDhcpOptionErrorHandler._is_missingg  s    "$CEc#deer/   NrB   r.   r/   r0   r*  r*  d  s    'f fr/   r*  zdescribe dhcp optionsc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_dhcp_optionsDhcpOptionsr.   rN   rR   s      r0   r-  r-  l  rl   r/   zdelete dhcp optionsdhcp_options_idc                 (    | j                  |       y)N)DhcpOptionsIdT)delete_dhcp_options)r7   r/  s     r0   r2  r2  u  s     _=r/   zassociate dhcp optionsc                 *    | j                  ||       y)N)r1  r   T)associate_dhcp_options)r7   r/  r|   s      r0   r4  r4  |  s     !!v!Nr/   zcreate dhcp optionsc                 ,     | j                   di |d   S )Nr.  r.   )create_dhcp_optionsr6   s     r0   r6  r6    s    
 &6%%//>>r/   c                        e Zd ZeZed        Zy)EC2VpnGatewaysErrorHandlerc                     t        ddg      S )NzInvalidVpnGatewayID.NotFoundInvalidVpnGatewayStater   r>   s    r0   r@   z&EC2VpnGatewaysErrorHandler._is_missing  s    "$BD\#]^^r/   NrB   r.   r/   r0   r8  r8    s    '_ _r/   r8  zdescribe vpn gatewaysc                 ,     | j                   di |d   S )NVpnGatewaysr.   )describe_vpn_gatewaysr6   s     r0   r=  r=    s    
 (6''1&1-@@r/   zcreate vpn gatewayVpnGatewayLimitExceededc                 ,     | j                   di |d   S )N
VpnGatewayr.   )create_vpn_gatewayr6   s     r0   rA  rA    r   r/   zdelete vpn gatewayvpn_gateway_idc                 (    | j                  |       y)N)VpnGatewayIdT)delete_vpn_gateway)r7   rB  s     r0   rE  rE    r{   r/   zattach vpn gatewayc                 *    | j                  ||       yN)r   rD  T)attach_vpn_gatewayr7   r|   rB  s      r0   rH  rH         FHr/   zdetach vpn gatewayc                 *    | j                  ||       yrG  )detach_vpn_gatewayrI  s      r0   rL  rL    rJ  r/   c                        e Zd ZeZed        Zy)EC2VolumeErrorHandlerc                     t        d      S )NzInvalidVolume.NotFoundr   r>   s    r0   r@   z!EC2VolumeErrorHandler._is_missing      "#;<<r/   NrB   r.   r/   r0   rN  rN        '= =r/   rN  zdescribe volumesc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_volumesVolumesr.   rN   rR   s      r0   rS  rS    rT   r/   zdelete volume	volume_idc                 (    | j                  |       y)N)VolumeIdT)delete_volume)r7   rU  s     r0   rX  rX    rJ   r/   zmodify volumec                 ,     | j                   di |d   S )NVolumeModificationr.   )modify_volumer6   s     r0   r[  r[    s       6)&)*>??r/   c                 &     | j                   di |S r  )create_volumer6   s     r0   r]  r]          6)&))r/   zattach volumedeviceinstance_idc                 *    | j                  |||      S )N)Device
InstanceIdrW  )attach_volume)r7   r_  r`  rU  s       r0   rd  rd    s     v+PYZZr/   c                 *     | j                   dd|i|S NrW  r.   )detach_volumer7   rU  r1   s      r0   rg  rg    s      6==f==r/   )IncorrectStateInsuffienctInstanceCapacityInvalidInstanceID.NotFoundc                        e Zd ZeZed        Zy)EC2InstanceErrorHandlerc                     t        d      S )Nrk  r   r>   s    r0   r@   z#EC2InstanceErrorHandler._is_missing  s    "#?@@r/   NrB   r.   r/   r0   rm  rm    s    'A Ar/   rm  zdescribe instancesc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_instancesReservationsr.   rN   rR   s      r0   rp  rp    s9    
 $$%9:I9''99;NKKr/   zmodify instance attributec                 ,     | j                   dd|i| y)Nrc  Tr.   )modify_instance_attributer7   r`  r1   s      r0   rs  rs    s    " %F$$FFvFr/   zterminate instancesinstance_idsc                 ,    | j                  |      d   S )N)InstanceIdsTerminatingInstances)terminate_instances)r7   ru  s     r0   ry  ry    s     %%,%?@VWWr/   zstop instancesc                 0     | j                   dd|i|d   S )Nrw  StoppingInstancesr.   )stop_instancesr7   ru  r1   s      r0   r|  r|    s%    
 !6  D\DVDEXYYr/   zstart instancesc                 0     | j                   dd|i|d   S )Nrw  StartingInstancesr.   )start_instancesr}  s      r0   r  r  &  s%    
 "6!!ElEfEFYZZr/   zrun instancesc                 &     | j                   di |S r  )run_instancesr6   s     r0   r  r  .  r^  r/   zdescribe instance attributec                 (    | j                  ||      S )N)rc  r   )describe_instance_attribute)r7   r`  r   s      r0   r  r  4  s     --PY-ZZr/   zdescribe instance statusc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_instance_statusInstanceStatusesr.   rN   rR   s      r0   r  r  ;  s:    
 $$%?@I9''99;<NOOr/   z modify instance metadata optionsc                 0     | j                   dd|i|d   S )Nrc  InstanceMetadataOptionsr.   ) modify_instance_metadata_optionsrt  s      r0   r  r  D  s%    
 3622TkTVTUnoor/   z*describe iam instance profile associationsc                 j    | j                  d      } |j                  di |j                         d   S )N*describe_iam_instance_profile_associationsIamInstanceProfileAssociationsr.   rN   rR   s      r0   r  r  L  s:    
 $$%QRI9''99;<\]]r/   z(replace iam instance profile associationiam_instance_profilec                 .    | j                  ||      d   S )N)IamInstanceProfiler^   IamInstanceProfileAssociation)(replace_iam_instance_profile_association)r7   r  r[   s      r0   r  r  U  s)    
 ::/~ ; %' 'r/   zassociate iam instance profilec                 .    | j                  ||      d   S )N)r  rc  r  )associate_iam_instance_profile)r7   r  r`  s      r0   r  r  _  s&     00DXep0q' r/   c                        e Zd ZeZed        Zy)EC2KeyErrorHandlerc                     t        d      S )NzInvalidKeyPair.NotFoundr   r>   s    r0   r@   zEC2KeyErrorHandler._is_missingk  r   r/   NrB   r.   r/   r0   r  r  h  r   r/   r  zdescribe key pairsc                 ,     | j                   di |d   S )NKeyPairsr.   )describe_key_pairsr6   s     r0   r  r  p  s     %6$$.v.z::r/   zimport key pairc                 &     | j                   di |S r  )import_key_pairr6   s     r0   r  r  y      
 "6!!+F++r/   zcreate key pairc                 &     | j                   di |S r  )create_key_pairr6   s     r0   r  r    r  r/   zdelete key pairkey_namekey_idc                 H    i }|r||d<   |r||d<    | j                   di | y)NKeyName	KeyPairIdTr.   )delete_key_pair)r7   r  r  r1   s       r0   r  r    s9     F$y${F$V$r/   c                        e Zd ZeZed        Zy)EC2ImageErrorHandlerc                     t        d      S )NzInvalidAMIID.Unavailabler   r>   s    r0   r@   z EC2ImageErrorHandler._is_missing  rA   r/   NrB   r.   r/   r0   r  r    rE   r/   r  zdescribe imagesc                     | j                  d      r4| j                  d      } |j                  di |j                         d   S  | j                  di |d   S )Ndescribe_imagesImagesr.   )can_paginaterO   rP   rQ   r  rR   s      r0   r  r    sc     ,-(():;	!y!!+F+==?II%v%%//99r/   zdescribe image attributeimage_idc                 (    | j                  ||      S )N)r   ImageId)describe_image_attribute)r7   r  r   s      r0   r  r    s     **Y*QQr/   zderegister imagec                 (    | j                  |       y)N)r  T)deregister_image)r7   r  s     r0   r  r    s     H-r/   zmodify image attributec                 ,     | j                   dd|i| y)Nr  Tr.   )modify_image_attribute)r7   r  r1   s      r0   r  r    s     "F!!=(=f=r/   zcreate imagec                 &     | j                   di |S r  )create_imager6   s     r0   r  r         6(((r/   zregister imagec                 &     | j                   di |S r  )register_imager6   s     r0   r  r    s     !6  *6**r/   c                        e Zd ZeZed        Zy)EC2SnapshotErrorHandlerc                     t        d      S )NzInvalidSnapshot.NotFoundr   r>   s    r0   r@   z#EC2SnapshotErrorHandler._is_missing  rA   r/   NrB   r.   r/   r0   r  r    rE   r/   r  zdelete snapshotsnapshot_idc                 (    | j                  |       y)N)
SnapshotIdT)delete_snapshot)r7   r  s     r0   r  r    s     k2r/   zdescribe snapshotsc                 &     | j                   di |S r  )describe_snapshotsr6   s     r0   r  r    s     %6$$.v..r/   zdescribe snapshot attributec                 (    | j                  ||      S )Nr   r  )describe_snapshot_attributer7   r  r   s      r0   r  r    s    
 --	k-ZZr/   zreset snapshot attributec                 *    | j                  ||       y)Nr  T)reset_snapshot_attributer  s      r0   r  r    s     ##iK#Pr/   zmodify snapshot attributec                 ,     | j                   dd|i| y)Nr  Tr.   )modify_snapshot_attribute)r7   r  r1   s      r0   r  r    s     %F$$FFvFr/   zcreate snapshot%SnapshotCreationPerVolumeRateExceeded   )r   delayc                 *     | j                   dd|i|S rf  )create_snapshotrh  s      r0   r  r    s    
 "6!!?9???r/   c                        e Zd ZeZed        Zy) EC2NetworkInterfacesErrorHandlerc                     t        d      S )Nz"InvalidNetworkInterfaceID.NotFoundr   r>   s    r0   r@   z,EC2NetworkInterfacesErrorHandler._is_missing  s    "#GHHr/   NrB   r.   r/   r0   r  r    s    'I Ir/   r  zdescribe network interfacesc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_network_interfacesNetworkInterfacesr.   rN   rR   s      r0   r  r    s:    
 $$%BCI9''99;<OPPr/   zdelete network interfacenetwork_interface_idc                 (    | j                  |       y)N)NetworkInterfaceIdT)delete_network_interface)r7   r  s     r0   r  r    s     ##7K#Lr/   zcreate network interfacec                 ,     | j                   di |d   S )NNetworkInterfacer.   )create_network_interfacer6   s     r0   r  r    s      +6**4V45GHHr/   zattach network interfacec                 &     | j                   di |S r  )attach_network_interfacer6   s     r0   r  r  "  s    
 +6**4V44r/   zdetach network interfaceattachment_idforcec                 >    d|i}|||d<    | j                   di | y)NAttachmentIdForceTr.   )detach_network_interface)r7   r  r  r1   s       r0   r  r  *  s3     m,Fw#F##-f-r/   zassign private ip addressesc                 &     | j                   di |S r  )assign_private_ip_addressesr6   s     r0   r  r  4  s    
 .6--777r/   zunassign private ip addressesc                 (     | j                   di | yNTr.   )unassign_private_ip_addressesr6   s     r0   r  r  <  s     )F((262r/   z"modify network interface attributec                 (     | j                   di | yr  )"modify_network_interface_attributer6   s     r0   r  r  C  s     .F--77r/   c                        e Zd ZeZed        Zy)EC2ImportImageErrorHandlerc                     t        d      S )NInvalidConversionTaskIdr   r>   s    r0   r@   z&EC2ImportImageErrorHandler._is_missingN  r   r/   NrB   r.   r/   r0   r  r  K  r   r/   r  zdescribe import image tasksc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_import_image_tasksImportImageTasksr.   rN   rR   s      r0   r  r  S  s:    
 $$%BCI9''99;<NOOr/   c                     g }t        | fi |D ]E  }t        j                  |      }t        |d         |d<   |j	                  t        |dg             G |S )NTags)ignore_list)r  copydeepcopyr$   appendr   )r7   r1   r  import_image_infoimages        r0   )describe_import_image_tasks_as_snake_dictr  \  sc     F8J6J M/06uV}Ef.u6(KLM Mr/   zcancel import taskimport_task_idcancel_reasonc                 >    d|i}|r||d<    | j                   di | y)NImportTaskIdCancelReasonTr.   )cancel_import_task)r7   r  r  r1   s       r0   r  r  g  s1     n-F!.~F''r/   zimport imagec                 &     | j                   di |S r  )import_imager6   s     r0   r  r  q  r  r/   c                        e Zd ZeZed        Zy)"EC2SpotInstanceRequestErrorHandlerc                     t        d      S )Nz%InvalidSpotInstanceRequestID.NotFoundr   r>   s    r0   r@   z.EC2SpotInstanceRequestErrorHandler._is_missing{  s    "#JKKr/   NrB   r.   r/   r0   r  r  x  s    'L Lr/   r  zdescribe spot instance requestsc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_spot_instance_requestsSpotInstanceRequestsr.   rN   rR   s      r0   r  r    s:    
 $$%FGI9''99;<RSSr/   zcancel spot instance requestsspot_instance_request_idsc                 ,    | j                  |      d   S )N)SpotInstanceRequestIdsCancelledSpotInstanceRequests)cancel_spot_instance_requests)r7   r
  s     r0   r  r    s#     //G`/a' r/   zrequest spot instancesc                 ,     | j                   di |d   S )Nr	  r.   )request_spot_instancesr6   s     r0   r  r    s      )6((2623IJJr/   c                        e Zd ZeZed        Zy)EC2SecurityGroupsErrorHandlerc                     t        d      S )NzInvalidGroup.NotFoundr   r>   s    r0   r@   z)EC2SecurityGroupsErrorHandler._is_missing  r   r/   NrB   r.   r/   r0   r  r    r   r/   r  zdescribe security groupsc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_security_groupsSecurityGroupsr.   rN   rR   s      r0   r  r    s:    
 $$%?@I9''99;<LMMr/   zdelete security groupgroup_id
group_namec                 H    i }|r||d<   |r||d<    | j                   di | y)NGroupId	GroupNameTr.   )delete_security_group)r7   r  r  r1   s       r0   r  r    s9     F$y({ F  *6*r/   zcreate security groupc                 &     | j                   di |S r  )create_security_groupr6   s     r0   r  r    s     (6''1&11r/   z.update security group rule descriptions egressc                 ,     | j                   di |d   S Nr   r.   ).update_security_group_rule_descriptions_egressr6   s     r0   r!  r!    s      A6@@J6J8TTr/   z/update security group rule descriptions ingressc                 ,     | j                   di |d   S r   )/update_security_group_rule_descriptions_ingressr6   s     r0   r#  r#    s      B6AAKFKHUUr/   zrevoke security group ingressc                 ,     | j                   di |d   S r   )revoke_security_group_ingressr6   s     r0   r%  r%    s     06//9&9(CCr/   zrevoke security group egressc                 ,     | j                   di |d   S r   )revoke_security_group_egressr6   s     r0   r'  r'    s     /6..88BBr/   z authorize security group ingressc                 ,     | j                   di |d   S r   ) authorize_security_group_ingressr6   s     r0   r)  r)    s     3622<V<XFFr/   zauthorize security group egressc                 ,     | j                   di |d   S r   )authorize_security_group_egressr6   s     r0   r+  r+    s     2611;F;HEEr/   c                        e Zd ZeZed        Zy)(EC2EgressOnlyInternetGatewayErrorHandlerc                     t        d      S NzInvalidGatewayID.NotFoundr   r>   s    r0   r@   z4EC2EgressOnlyInternetGatewayErrorHandler._is_missing      "#>??r/   NrB   r.   r/   r0   r-  r-        '@ @r/   r-  z&describe egress only internet gatewaysc                 j    | j                  d      } |j                  di |j                         d   S )N&describe_egress_only_internet_gatewaysEgressOnlyInternetGatewaysr.   rN   rR   s      r0   r3  r3    s:    
 $$%MNI9''99;<XYYr/   z#delete egress only internet gatewayegress_only_internet_gateway_idc                 ,    | j                  |      d   S )N)EgressOnlyInternetGatewayId
ReturnCode)#delete_egress_only_internet_gateway)r7   r5  s     r0   r9  r9    s#     55Rq5r r/   z#create egress only internet gatewayc                 R    d|i}|rt        |d      |d<    | j                  di |S )Nr   zegress-only-internet-gatewayr   r   r.   )r%   #create_egress_only_internet_gatewayr   s       r0   r;  r;    s:    
 vF&>tKi&j"#5655???r/   c                        e Zd ZeZed        Zy)EC2NetworkAclErrorHandlerc                     t        d      S )NzInvalidNetworkAclID.NotFoundr   r>   s    r0   r@   z%EC2NetworkAclErrorHandler._is_missing  rg   r/   NrB   r.   r/   r0   r=  r=    rh   r/   r=  zdescribe network aclsc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_network_aclsNetworkAclsr.   rN   rR   s      r0   r@  r@    rl   r/   zcreate network aclc                 X    d|i}|rt        |d      |d<    | j                  di |d   S )Nr   znetwork-aclr   r   
NetworkAclr.   )r%   create_network_aclr   s       r0   rD  rD    r   r/   zcreate network acl entrynetwork_acl_idprotocolegressrule_actionrule_numberc                 ^    |||||d}|r|j                  |        | j                  di | y)NEgressNetworkAclIdProtocol
RuleAction
RuleNumberTr.   )updatecreate_network_acl_entryr7   rE  rF  rG  rH  rI  r1   argss           r0   rR  rR    sA     &!!D F#F##+d+r/   zdelete network aclc                 (    | j                  |       y)N)rM  T)delete_network_acl)r7   rE  s     r0   rV  rV  7  r{   r/   zdelete network acl entryc                 ,    | j                  |||       y)N)rM  rL  rP  T)delete_network_acl_entry)r7   rE  rI  rG  s       r0   rX  rX  >  s     ##[f#gr/   zreplace network acl entryc                 \    |||||d}|r|j                  |        | j                  di |S )NrK  r.   )rQ  replace_network_acl_entryrS  s           r0   rZ  rZ  E  sA     &!!D F+6++3d33r/   zreplace network acl associationc                 .    | j                  ||      d   S )N)rM  r^   NewAssociationId)replace_network_acl_association)r7   rE  r[   s      r0   r]  r]  \  s%     11~]k1l r/   c                        e Zd ZeZed        Zy)EC2PlacementGroupErrorHandlerc                     t        d      S )NzInvalidPlacementGroup.Unknownr   r>   s    r0   r@   z)EC2PlacementGroupErrorHandler._is_missingh  s    "#BCCr/   NrB   r.   r/   r0   r_  r_  e  s    'D Dr/   r_  zdescribe placement groupc                 ,     | j                   di |d   S )NPlacementGroupsr.   )describe_placement_groupsr6   s     r0   describe_ec2_placement_groupsrd  m  s     
 ,6++5f56GHHr/   zdelete placement groupc                 (    | j                  |       y)N)r  T)delete_placement_group)r7   r  s     r0   delete_ec2_placement_grouprg  u  s     !!J!7r/   zcreate placement groupc                 ,     | j                   di |d   S )NPlacementGroupr.   )create_placement_groupr6   s     r0   create_ec2_placement_grouprk  |        )6((2623CDDr/   c                        e Zd ZeZed        Zy)EC2LaunchTemplateErrorHandlerc                     t        ddg      S )Nz+InvalidLaunchTemplateName.NotFoundExceptionz InvalidLaunchTemplateId.NotFoundr   r>   s    r0   r@   z)EC2LaunchTemplateErrorHandler._is_missing  s    "$QSu#vwwr/   NrB   r.   r/   r0   rn  rn    s    'x xr/   rn  zdescribe launch templateslaunch_template_idslaunch_template_namesc                     i }|r||d<   |r||d<   |r||d<   | j                  d      } |j                  di |j                         d   S )NLaunchTemplateIdsLaunchTemplateNamesr&  describe_launch_templatesLaunchTemplatesr.   rN   )r7   rp  rq  r"  r1   rS   s         r0   ru  ru    sh     F&9"#(=$%#y$$%@AI9''99;<MNNr/   z!describe launch template versionsc                 j    | j                  d      } |j                  di |j                         d   S )N!describe_launch_template_versionsLaunchTemplateVersionsr.   rN   rR   s      r0   rx  rx    s:     $$%HII9''99;<TUUr/   zdelete launch template versionsversionslaunch_template_idlaunch_template_namec                     i }|r||d<   |r||d<   g g d}t        dt        |      d      D ]I  } | j                  ddt        |||dz          i|}dD ]  }||xx   |j	                  |g       z  cc<   ! K |S )	NLaunchTemplateIdLaunchTemplateName)+UnsuccessfullyDeletedLaunchTemplateVersions)SuccessfullyDeletedLaunchTemplateVersionsr      Versions)r  r  r.   )rangelendelete_launch_template_versionslistr  )	r7   rz  r{  r|  r1   responseir  xs	            r0   r  r    s    
 F%7!"';#$7957H
 1c(mS) -777ghqSTWZSZF[A\g`fgm 	-AQK6::a,,K	-- Or/   zdelete launch templatec                 L    i }|r||d<   |r||d<    | j                   di |d   S )Nr~  r  LaunchTemplater.   )delete_launch_template)r7   r{  r|  r1   s       r0   r  r    sA    
 F%7!"';#$(6((2623CDDr/   zcreate launch templatelaunch_template_datakwargsc                 |    ||d}|rt        |d      |d<   |j                  |        | j                  di |d   S )N)r  LaunchTemplateDatazlaunch-templater   r   r  r.   )r%   rQ  create_launch_template)r7   r|  r  r}   r  r1   s         r0   r  r    sM     %9PdeF&>tK\&]"#
MM&(6((2623CDDr/   zcreate launch template versionc                 0     | j                   dd|i|d   S )Nr  LaunchTemplateVersionr.   )create_launch_template_version)r7   r  r1   s      r0   r  r    s+    
 1600cDXc\bc r/   zmodify launch templatec                 ,     | j                   di |d   S )Nr  r.   )modify_launch_templater6   s     r0   r  r    rl  r/   c                    d d }|t        j                  ddd       g }t        | t              r| g} |rd|gd	g}|j	                  |
      d   }n|j	                         d   }t        |       j                  fd|D              }t        t        |       t        |      z
        }	t        |      dkD  r{|D 
cg c]  }
t        j                  d|
      s|
 c}
|dd |D 
cg c]  }
t        j                  d|
      r|
 }}
t        |      dkD  rt        ddj                  |             ||D cg c]  } |      |	v s ||       c}z  }|S c c}
w c c}
w c c}w )at  Return list of security group IDs from security group names. Note that security group names are not unique
    across VPCs.  If a name exists across multiple VPCs and no VPC ID is supplied, all matching IDs will be returned. This
    will probably lead to a boto exception if you attempt to assign both IDs to a resource so ensure you wrap the call in
    a try block
    c                     t        | d         S )Nr  strsgs    r0   get_sg_namez:get_ec2_security_group_ids_from_names.<locals>.get_sg_name  s    2k?##r/   c                     t        | d         S )Nr  r  r  s    r0   	get_sg_idz8get_ec2_security_group_ids_from_names.<locals>.get_sg_id  s    2i=!!r/   NzThe boto3 parameter for get_ec2_security_group_ids_from_names() has been deprecated.The parameter has been ignored since release 4.0.0.z10.0.0z
amazon.aws)versioncollection_namezvpc-id)NameValues)r&  r  c              3   @   K   | ]  }t         |              y wNr  ).0all_sgr  s     r0   	<genexpr>z8get_ec2_security_group_ids_from_names.<locals>.<genexpr>  s     .eFs;v3F/G.es   r   zsg-[a-fA-F0-9]+$z)The following group names are not valid: z, )ansible_warnings	deprecate
isinstancer   r  set
differencer  r  rematch
ValueErrorjoin)sec_group_listec2_connectionr|   boto3r  sec_group_id_listr"  all_sec_groups	unmatchedsec_group_name_listr  still_unmatchedr  r  s                @r0   %get_ec2_security_group_ids_from_namesr    s   $" ""F (	
 .,/()  !
 (@@@QRbc'@@BCSTN#...eVd.eeIs>2S^CD
9~-6[r"((CUWY:Z[!(1Z"BTVX9Y2ZZ!#HSbIcHdeff.wKX^L_cvLv)F+ww  \Z xs$   >EE(E E :E%

E%c                        e Zd ZeZed        Zy)*EC2TransitGatewayVPCAttachmentErrorHandlerc                     t        d      S r/  r   r>   s    r0   r@   z6EC2TransitGatewayVPCAttachmentErrorHandler._is_missing%  r0  r/   NrB   r.   r/   r0   r  r  "  r1  r/   r  z(describe transit gateway vpc attachmentsc                 j    | j                  d      } |j                  di |j                         d   S )N(describe_transit_gateway_vpc_attachmentsTransitGatewayVpcAttachmentsr.   rN   rR   s      r0   r  r  *  s:    
 $$%OPI9''99;<Z[[r/   z%create transit gateway vpc attachmentc                 ,     | j                   di |d   S NTransitGatewayVpcAttachmentr.   )%create_transit_gateway_vpc_attachmentr6   s     r0   r  r  3       
 8677A&AB_``r/   z%modify transit gateway vpc attachmentc                 ,     | j                   di |d   S r  )%modify_transit_gateway_vpc_attachmentr6   s     r0   r  r  ;  r  r/   z%delete transit gateway vpc attachmenttransit_gateway_attachment_idc                 .    | j                  |      d    y)N)TransitGatewayAttachmentIdr  T)%delete_transit_gateway_vpc_attachment)r7   r  s     r0   r  r  C  s#     00Li0j% r/   c                 ^   |sy|j                   ry|sg }	 t        |      }  t        j                  d|      | j                        |g|       y# t
        j                  j                  t
        j                  j                  f$ r#}|j                  |d| d|        Y d	}~yd	}~ww xY w)
a<  
    Sets Tags on an EC2 resource.

    :param client: an EC2 boto3 client
    :param module: an AnsibleAWSModule object
    :param resource_id: the identifier for the resource
    :param tags_to_set: A dictionary of key/value pairs to set
    :param retry_codes: additional boto3 error codes to trigger retries
    FT
   retriesr   	Resourcesr  zUnable to add tags z to msgN)

check_moder#   r"   jittered_backoffcreate_tagsbotocore
exceptionsBotoCoreErrorClientErrorfail_json_aws)r7   moduleresource_idtags_to_setretry_codestags_to_addes          r0   add_ec2_tagsr  L  s     Z4[AfR!!"kRSYSeSef"m+	

  --x/B/B/N/NO ZQ&9+d;-$XYYZs   ;A 7B,	B''B,c                    |sy|j                   ry|sg }|D cg c]  }t        |       }}	   t        j                  d|      | j                        |g|       yc c}w # t
        j                  j                  t
        j                  j                  f$ r#}|j                  |d| d| 	       Y d
}~yd
}~ww xY w)a:  
    Removes Tags from an EC2 resource.

    :param client: an EC2 boto3 client
    :param module: an AnsibleAWSModule object
    :param resource_id: the identifier for the resource
    :param tags_to_unset: a list of tag keys to removes
    :param retry_codes: additional boto3 error codes to trigger retries
    FT)Keyr  r  r  zUnable to delete tags z from r  N)
r  dictr"   r  delete_tagsr  r  r  r  r  )r7   r  r  tags_to_unsetr  tagkeytags_to_remover  s           r0   remove_ec2_tagsr  i  s     5BC6dv&CNCafR!!"kRSYSeSef"m.	

  D --x/B/B/N/NO aQ&<]O6R]Q^$_``as   A 0A% %7B?B::B?c                 n   d|i}|r||d<   t        |      }|sg }	 t        j                  d|      }t        | d||      }t	        |j                  dd            S # t        j                  j                  t        j                  j                  f$ r }|j                  |d	| 
       Y d}~yd}~ww xY w)aD  
    Performs a paginated search of EC2 resource tags.

    :param client: an EC2 boto3 client
    :param module: an AnsibleAWSModule object
    :param resource_id: the identifier for the resource
    :param resource_type: the type of the resource
    :param retry_codes: additional boto3 error codes to trigger retries
    zresource-idzresource-typer  r  describe_tags)retry_decoratorr&  r  Nz*Failed to describe tags for EC2 Resource: r  )r'   r"   r  r   r$   r  r  r  r  r  r  )	r7   r  r  resource_typer  r"  r  r(  r  s	            r0   describe_ec2_tagsr    s     k*G#0 /8G`"33BXcd.O_g
 .gkk&$.GHH--x/B/B/N/NO `Q&PQ\P]$^__`s   A A 7B4B//B4c                     |y|sg }d}t        | ||||      }t        |||      \  }	}
|r|s|}
|t        | |||
|      z  }|t        | |||	|      z  }|S )aO  
    Updates the tags on an EC2 resource.

    To remove all tags the tags parameter must be explicitly set to an empty dictionary.

    :param client: an EC2 boto3 client
    :param module: an AnsibleAWSModule object
    :param resource_id: the identifier for the resource
    :param resource_type: the type of the resource
    :param tags: the Tags to apply to the resource
    :param purge_tags: whether tags missing from the tag list should be removed
    :param retry_codes: additional boto3 error codes to trigger retries
    :return: changed: returns True if the tags are changed
    F)r  r&   r  r  )r7   r  r  r  r}   
purge_tagsr  changedcurrent_tagsr  r  s              r0   ensure_ec2_tagsr    s|      |G$VV[-Q\]L!1,j!QK$$vv{M;WWG|FFKkRRGNr/   option_configc                 B   i }t        |       dk(  r|S | D ]  }|d   dk(  rOt        |d   t              rt        |d         |d<   n*t        |d   t              rt        |d   d   d         |d<   dD ]$  }|d   |k(  s|d   D cg c]  }|d   	 c}||<   &  |S c c}w )a  
    The boto2 module returned a config dict, but boto3 returns a list of dicts
    Make the data we return look like the old way, so we don't break users.
    This is also much more user-friendly.
    boto3:
        'DhcpConfigurations': [
            {'Key': 'domain-name', 'Values': [{'Value': 'us-west-2.compute.internal'}]},
            {'Key': 'domain-name-servers', 'Values': [{'Value': 'AmazonProvidedDNS'}]},
            {'Key': 'netbios-name-servers', 'Values': [{'Value': '1.2.3.4'}, {'Value': '5.6.7.8'}]},
            {'Key': 'netbios-node-type', 'Values': [1]},
            {'Key': 'ntp-servers', 'Values': [{'Value': '1.2.3.4'}, {'Value': '5.6.7.8'}]}
        ],
    The module historically returned:
        "new_options": {
            "domain-name": "ec2.internal",
            "domain-name-servers": ["AmazonProvidedDNS"],
            "netbios-name-servers": ["10.0.0.1", "10.0.1.1"],
            "netbios-node-type": "1",
            "ntp-servers": ["10.0.0.2", "10.0.1.2"]
        },
    r   r  znetbios-node-typer  Value)zdomain-namezdomain-name-serverszntp-serversznetbios-name-servers)r  r  r   r  r  )r  config_dataconfig_itemoptionvals        r0   normalize_ec2_vpc_dhcp_configr    s    , K
=Q$ 
Vu!44+h/?36H8M3O/0K14836H8Ma8PQX8Y3[/0c 	VF5!V+?J8?T&Us7|&UF#	V
V  'Vs   Bname_or_arnc                 n    t        |dd      r|S t        | |      }|st        d|       |d   d   S )	Niamzinstance-profile)servicer  )namez$Could not find IAM instance profile )messager   Arn)r   r   r*   )
iam_clientr  iam_instance_profiless      r0   determine_iam_arn_from_namer    sH    UBTU6zT (L[M&Z[[ #E**r/   c                        e Zd ZeZed        Zy)EC2TransitGatewayErrorHandlerc                     t        d      S )Nz InvalidTransitGatewayID.NotFoundr   r>   s    r0   r@   z)EC2TransitGatewayErrorHandler._is_missing   s    "#EFFr/   NrB   r.   r/   r0   r	  r	    s    'G Gr/   r	  zdescribe transit gatewayc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_transit_gatewaysTransitGatewaysr.   rN   rR   s      r0   describe_ec2_transit_gatewaysr    s:    
 $$%@AI9''99;<MNNr/   zcreate transit gatewayc                 ,     | j                   di |d   S )NTransitGatewayr.   )create_transit_gatewayr6   s     r0   create_ec2_transit_gatewayr    s     
 )6((2623CDDr/   zdelete transit gatewaytransit_gateway_idc                 (    | j                  |       y)N)TransitGatewayIdT)delete_transit_gateway)r7   r  s     r0   delete_ec2_transit_gatewayr    s     !!3E!Fr/   c                        e Zd ZeZed        Zy)EC2DedicatedHostc                     t        d      S )NzInvalidHostID.NotFoundr   r>   s    r0   r@   zEC2DedicatedHost._is_missing!  rP  r/   NrB   r.   r/   r0   r  r    rQ  r/   r  zdescribe dedicated hostc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_hostsHostsr.   rN   rR   s      r0   describe_ec2_dedicated_hostsr  &  s9    
 $$%56I9''99;GDDr/   zdescribe mac dedicated hostc                 j    | j                  d      } |j                  di |j                         d   S )Ndescribe_mac_hostsMacHostsr.   rN   rR   s      r0    describe_ec2_mac_dedicated_hostsr"  /  s9    
 $$%9:I9''99;JGGr/   zrelease dedicated hosthost_idc                 R    |}t        |t              r|g}| j                  |       y)N)HostIdsT)r  r   release_hosts)r7   r#  host_idss      r0   release_ec2_dedicated_hostr(  8  s.     H'<(9
*r/   zallocate dedicated hostsavailability_zonec                 0     | j                   dd|i|d   S )NAvailabilityZoner%  r.   )allocate_hosts)r7   r)  r1   s      r0   allocate_ec2_dedicated_hostsr-  B  s%    
 !6  N2CNvNyYYr/   zmodify dedicated hostsc                 T    |}t        |t              r|g} | j                  dd|i|S )Nr%  r.   )r  r   modify_hosts)r7   r#  r1   r'  s       r0   modify_ec2_dedicated_hostsr0  J  s5     H'<(96:x:6::r/   r  )NN)NNN)NNTN(  __doc__r  r  typingr   r   r   r   r   $ansible.module_utils.common.warningsmodule_utilscommonwarningsr  $ansible.module_utils.ansible_releaser   0ansible.module_utils.common.dict_transformationsr	   r
   r   r   ansible.module_utils.sixr   r   arnr   is_outposts_arnr   r  r   r   r   r   r   r   r   r   errorsr   r  r   r   r   modulesr   aws_common_argument_specr   ec2_argument_specpolicyr    py3cmpr!   r  r"   taggingr#   r$   r%   r&   transformationr'   r(   ImportErrorr*   r  EC2TagSpecificationsr  boolr5   r:   r<   deletion_error_handlerrI   list_error_handlerrL   common_error_handlerintrW   rY   r`   rc   re   rj   ro   rs   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r  r  r%  r*  r-  r2  r4  r6  r8  r=  rA  rE  rH  rL  rN  rS  rX  r[  r]  rd  rg  EC2_INSTANCE_CATCH_EXTRA_CODESrm  rp  bytesrs  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r%  r'  r)  r+  r-  r3  r9  r;  r=  r@  rD  rR  rV  rX  rZ  r]  r_  rd  rg  rk  rn  ru  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r"  r(  r-  r0  r.   r/   r0   <module>rM     s}?  @  	      ? ? < M L U U 2 1 3 !     * $ - $ ) 2 # ( + K ; & $  4 3 - % > ,	
	o 	 CsDc3h,@'@!AAB  M3d3itDeCQUVYQZNF[A[<\7]&] ^^_M	$sE#tDcN3344
56M M 83d3itDeCQUVYQZNF[A[<\7]&] ^^_8	$sCx.8 8? ? 00AS T   B
 ,,-?DG3d3itDeCQUVYQZNF[A[<\7]&] ^^_G	$sCx.G  EG ..?4DeCsDX4X.Y)Y$Z 4_cdgildl_m 4  @4 ..?s d3cSVX\]`bf]fXgNgHhCh>i nr   @
 ../OPk3 k4USVX\]`be]eXfSfMgHgCh k  Qk ../LMhh&*3c3h+?&@h	#uS$sCx.()
)*h  NhC? C 001H"MK3d3itDeCQUVYQZNF[A[<\7]&] ^^_K	$sCx.K  NK 223MNS T   O
 223JKOO+/S>O	#uS$sCx.()
)*O  LO 223QRS # RV   S
 445IJs t   K
 223GH=s =(4S>2J =tTWY\T\~ =  I=< < #99.I S#X 4   J
 #77H# c5dCS>S9T Y]   I
 #77GP PS#X P4 P  HP
< < &&;D3d3itDeCQUVYQZNF[A[<\7]&] ^^_D	$sCx.D  <D **<8s t   9
 (()ABL3 L3 L4S> L  CL
 (()?@ S%TRUW[R[_H\B]=]8^ cg   A
 ((6.c5dCAU1U+V&V!W .\`adfiai\j .  7. (()CDCS CDeCQUWZNF[A[<\ Caefiknfnao C  EC (()FGL LS#X L  HL
M M --.DbIUtCH~ U$tTWY\T\~J^ U  JU
 ../CDR3c46J&J KKLR	#s(^R  ER 001EFc d   G
 001EFc d   G
 001EFc d   Ga a &&'A2FGtCH~ G$tCQTH~BV G  GG
 (()FG3 tCQTH~ Z^   H
 **+HI3 tCQTH~ Z^   J
 (()@ACDcN CtCH~ C  BC **+BCS T#s(^   DH_ H  223OPP3d3itDeCQUVYQZNF[A[<\7]&] ^^_P	$sCx.P  QP  445NOG(4S#X3G*H GTRUWZRZ^ G  PG  445NO c d   P
  445NO c d   P
  667PQ    RC C --.ErJK3d3itDeCQUVYQZNF[A[<\7]&] ^^_K	$sCx.K  KK 112FGs t   H
 //0DE4Q3RS=3c46JDQTI&U VVW=	#s(^= T F=> > ,,-A2F<3d3id3c4PS9n@U;U6V1W&W XXY<	$sE#tDcN3344
56<  G< ../@A3 hsm _c   B ../BC.S%T	2B-B(C .SRUX .  D. ../EF    G
 ../AB-tCs<P7P1Q,Q'R -W[\_ad\dWe -  C-
e/ e //0H"ML3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^L	#s(^L  NL 334JK*3 *4S%PSUYZ]_bZbUcPcJdEd@e;f *  L*
 ../DE?U3d3ic5d3C.C)Dd4PSUXPX>FZ\ppqq?
 
#s(^?  F?9 9 #556Vfh5iaed4S>23KSTXY\T]K^	#s(^  j4f? f 001H"MK3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^K	$sCx.K  NK 445JK    L
 223KLC     M
 223HI?3d3c49n0E+E&FH\&\ ]]^?	#s(^?  J?_ _ ../FKA3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^A	$sCx.A  LA 001EF4M3NO=3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^=	#s(^= P G= 223GHs t   I
 001EFs C D   G
 001EFs C D   G=O = ))*<bAG3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^G	$sCx.G  BG --o>S T   ?
 ++O<@DeCsN.C)C$D @cSVh @  =@ ++O<*DeCsDX4X.Y)Y$Z *_cdgildl_m *  =* ++O<[# [C [C [DQTVYQYN [  =[ ++O<>S >DeCI>N9N4O >TXY\^aYaTb >  =>
" Ao A ++,@"EL3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^L	$sCx.L  FL --.IJ3QR IcNdOeeCc5d+;&;!<<==>@	
	
 
 S K& ++,A2FXd3i XDc3h<P X  GX ++,<bAZs)Z/3CtT#Y9O4O/PZ	$sCx.Z  BZ ++,=rB[s)[/3CsDI~9N4N/O[	$sCx.[  C[ --o>3QR*DcN *tCH~ * S ?* --.KL3QR[S [S [TRUWZRZ^ [ S M[
 --.HI3QRP3d3isDc5QTVZ[^V_Q_K`F`Aa<b&b ccdP	$sCx.P S JP --.PQ3QRpp(,S%S/-A(Bp	#uS#X
p S Rp --.Z[3QR^3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^^	#s(^^ S \^ --.XY3QR'"&sCx.'BE'	#uS#X
' S Z' --.NO3QRc3h ^a fjknpsksft  S P> > &&';R@;3d3itDeCQUVYQZNF[A[<\7]&] ^^_;	$sCx.;  A; (():;,3c52F&F GGH,	#uS$tCH~../
/0,  <, (():;,3c+?&? @@A,	#uS$tCH~../
/0,  <, **+<=hsm HSM ]a   >?? ? (():B?:3d3isDc5QTVZ[^V_Q_K`F`Aa<b&b ccd:	$sCx.:  @: (()CRHRs Rs RxPTUXZ]U]P^G_ R  IR
 ,,-?@s t   A
 **+CDS DcN t   E
 **>:)4S> )d38n )  ;) **+;<+T#s(^ +S#X +  =+
?o ? //0AB    C
 ++,@"E/3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^/	#s(^/  F/ --.KL[[),[	#uS$tCH~../
/0[  M[ --.HI# # $   J
 --.IJ3 $sCx. UY   K
 --.?@ 4[3\dfg@s @d38n @cSVh @ h A@
I I "445RTVWQ3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^Q	$sCx.Q  XQ "889ST3 4   U
 "667QRItCH~ I$sCx. I  SI "667QR53c3S%d3PT9o@U:V5V0W&W XXY5	#uS#X
5  S5 "667QRC  Z^   S "667TU83dCd3i&? @@A8	#uS$tCH~../
/08  V8 "667VWDeCcN>S9S4T Y]   X
 "667[\c3h D   ]> > ../LbQP3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^P	$sCx.P  RP3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^	$sCx. 223GHs 8C= \`   I 00@)4S> )d38n )  A)
L L $667XZ\]T3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^T	$sCx.T  ^T $889XYT#Y SWX\]`be]eXfSg   Z $889QRKT#s(^ KT#s(^@T K  SK
<O < 112LbQN3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^N	$sCx.N  RN 556MNHSM xPS} `d   O 334KL2DeCAU<U6V1V,W 2\`adfiai\j 2  M2 334deUT#s(^ UX\ U  fU 334efVd3PS8n VY] V  gV 334STDDcN Dt D  UD 334RSC4S> Cd C  TC 334VWGtCH~ G$ G  XG 334UVFd38n F F  WF
@ @ *<<=egijZ3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^Z	$sCx.Z  kZ *@@AfgQT Y]   h *>>?de@D@@'(<=@	#s(^@  f@C C --.ErJK3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^K	$sCx.K  KK //0DE=s =(;O2P =\`adfiai\j =  F= //0JK  	
   38n 
  L, 112FGs t   H
 112LMS s TX ]a   N
 //0KL44 4 	4
 4 4 38n4 
#s(^4  M4* //0QRC QT Y\   SDO D 112LbQI3d3id4U3PTUXPY>EZ@Z;[6\&\ ]]^I	$sCx.I  RI 556NO3 4   P
 334LMEc5FZAZ;[6[1\ Eaefiknfnao E  NE
xO x 112MrR 041548	O!$s),O $DI.O d4T#Y/01	O
 
$sCx.O  SO" 334WXVS#X V4PTUXZ]U]P^K_ V  YV
 334UVqu3i5=c]aijman	#s(^  W( 334LM\`E (ELTUXME	#s(^E  NE 334LM
 ,0	EE sCx.E '
(	E
 38nE 
#s(^E  NE 334TU"&sCx.<@cN	#s(^  V 334LMET#s(^ ES#X E  NE6t@ @ ,@@Akl\3d3itDeCQUVYQZNF[A[<\7]&] ^^_\	\  m\ ,@@Ahia3d3itDeCQUVYQZNF[A[<\7]&] ^^_a	#s(^a  ja ,@@Ahia3d3itDeCQUVYQZNF[A[<\7]&] ^^_a	#s(^a  ja ,BBCjkQT Y]   l:<`8!H(d38n1E ($sTWx. (V+ + +GO G 112LbQO3d3id3c4PS9n@U;U6V1W&W XXYO	$sCx.O  RO 334LME3d3id3c4PS9n@U;U6V1W&W XXYE	#s(^E  NE 556NO3 4   P= = $$%>CE3d3id3c4PS9n@U;U6V1W&W XXYE	$sCx.E  DE $$%BBGH3d3id3c4PS9n@U;U6V1W&W XXYH	$sCx.H  HH (()ABc49n0E $   C &&'ABZ"Z.23d3idSVX]^acghkcl^lXmSmNnIo>o8p3p.qZ	#YZ  CZ &&'?@;49c>"; 3d3id3c49n8M3M.N)OOPPQ; 
#s(^	;  A;M7  		s   0Bg+ g+Bg4g3Bg4