PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php:1) in /home/u697396820/domains/smartriegroup.com/public_html/assets/images/partners/logo_69cec45839613.php on line 131
a wel @s ddlmZmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m ZddlmZmZmZmZddlmZmZmZmZzddlmZWneyddlmZYn0ddlZdd lmZmZm Z m!Z!m"Z"m#Z#m$Z$dd l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+dd l,m,Z,dd l-m-Z-dd l.m.Z.m/Z/ddl0m0Z0ddl1m1Z1ddl2Tddl3m4Z4ddl5m5Z5ddl6m6Z6ddl7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?zddl@mAZAddlBZBzeBjCddZDddZEWneFy.z eBGeBjHZDeDIddZEWn*eJy(eBjCeBjHdZDddZEYn0Yn0eJy\eBGeBjHZDeDIddZEYn0Wn^eeKfyZLz@eMeLZNdeNvrdZOnd eNZOeOd!7ZOd"aPd#dZEWYdZL[Ln dZL[L00d$d%ZQd&ZRd'ZSgZTGd(d)d)eUZVGd*d+d+eUZWeTXd+d,d-ZYdS).)absolute_importdivisionN)saxutils)timeout)debuginfowarningerror)ST_SIZEST_MODES_ISDIRS_ISREG)urlparse)getListFromXmlgetTextFromXmlgetRootTagNamedecode_from_s3 encode_to_s3md5s3_quote)convertHeaderTupleListToDict unicodise deunicodisecheck_bucket_namecheck_bucket_name_dns_supportgetHostnameFromBucket) SortedDict) AccessLog)ACLGranteeLogDelivery)BidirMap)Config)*)MultiPartUpload)S3Uri)ConnMan)sign_request_v2sign_request_v4checksum_sha256_filechecksum_sha256_buffergenerate_content_md5 hash_file_md5calculateChecksumformat_param_str) ArgumentErrorT)ZmimecCs t|SN)magic_Z from_filefiler4)/usr/lib/python3.9/site-packages/S3/S3.pymime_magic_file<sr6c Cs8z t|WStttfy2tt|YS0dSr0)r1r3UnicodeDecodeErrorUnicodeEncodeErrorr/rr2r4r4r5r6Is )flagscCs t|Sr0)r1Z id_filenamer2r4r4r5r6SscCstt|Sr0)r1r3rr2r4r4r5r6\smagicz%Module python-magic is not available.z'Module python-magic can't be used (%s).z. Guessing MIME types based on file extensions.FcCststtdat|dS)NTr) magic_warnedr magic_message mimetypes guess_typer2r4r4r5r6gscCsjdd}||}|durZt|trZd|vrR|d\}}|tdd}||f}n|df}|durfd}|S)NcSs t|}|Sr0)r6)r3Z magictyper4r4r5 _mime_magicpszmime_magic.._mime_magic;charset)NN) isinstancestrsplitlen)r3r?resultZmimetyperAr4r4r5 mime_magicns  rGic@sFeZdZiZiZdddZddZddZdd Zd d Z d d Z dS) S3RequestNcCsn||_t|pidd|_t|jjjdkrF|jj|jjj|jd<||_||_|pXi|_ ||_ | dS)NTZ ignore_caserzx-amz-security-token) s3rheadersrEconfigZ access_tokenZ role_refreshresource method_stringparamsbodyrequester_pays)selfrKrOrNrLrQrPr4r4r5__init__s  zS3Request.__init__cCs"|jjjr|jdvrd|jd<dS)N)GETPOSTPUTHEADZ requesterzx-amz-request-payer)rKrMrRrOrLrSr4r4r5rRszS3Request.requester_payscCs,d|jvr|jd=tdt|jd<dS)Ndatez%a, %d %b %Y %H:%M:%S +0000z x-amz-date)rLtimestrftimegmtimerYr4r4r5update_timestamps zS3Request.update_timestampcCs&|jjr dS|jjjs|jjr"dSdS)NFT)rKendpoint_requires_signature_v4rMZ signature_v2fallback_to_signature_v2rYr4r4r5use_signature_v2s zS3Request.use_signature_v2cCs|jd}|rVtd|r4d||jdf}n |jd}t|j||j|j|_ntd|j |jd}|r|t j vrt j |d d|r|t j vrt tj|sd||jdf}n |jd}t j|jdtj}t|j|||j||j|j|_dS)NbucketzUsing signature v2/%s%surizUsing signature v4%s.)rNgetrarr'rOrPrLrK get_hostnamerI redir_map startswithrr" host_bucket region_mapbucket_locationr(rQ)rS bucket_name resource_urihostnameZ bucket_regionr4r4r5signs0     zS3Request.signcCsT||t|j}t|dddd|d<|dt|j7<|j||jfS)NrdFTZquote_backslashesZunicode_output) r^rqdictrNrr.rPrOrL)rSrNr4r4r5 get_triplets  zS3Request.get_triplet)N) __name__ __module__ __qualname__rlrirTrRr^rarqrtr4r4r4r5rIs  !rIc@seZdZedddddddZedd d d d d ZedededBededBededBededBededBededBededBededBededBededBd ZddddZddZdd Z d!d"Z d#d$Z dd&d'Z d(d)Z dd+d,Zdd-d.Zdd/d0Zdd1d2Zd3d4Zdd6d7Zd8d9Zd:d;Zdd?Zd@dAZdBdCZddDdEZddFdGZddHdIZddJdKZddLdMZdNdOZdPdQZ dRdSZ!ddTdUZ"dVdWZ#ddYdZZ$dd[d\Z%d]d^Z&d_d`Z'dadbZ(dcddZ)dedfZ*ddgdhZ+ddidjZ,ddkdlZ-dmdnZ.dodpZ/dqdrZ0dsdtZ1dudvZ2dwdxZ3dydzZ4d{d|Z5d}d~Z6ddZ7ddZ8ddZ9ddZ:ddZ;ddZddZ?ddZ@ddZAddZBddZCddZDdddZEdddZFdddZGdddZHdddZIddZJddZKddZLdddZMdddZNddZOddZPddZQddZRddZSdddZTdddZUdddZVdddZWddd„ZXdddĄZYd%S)S3rrH)rUrWrXDELETErVMASKiiii)SERVICEBUCKETOBJECTBATCHr~rrrUrrWr}rrXrVr) Z UNDEFINEDLIST_ALL_BUCKETS BUCKET_CREATE BUCKET_LIST BUCKET_DELETE OBJECT_PUT OBJECT_GET OBJECT_HEAD OBJECT_DELETE OBJECT_POST BATCH_DELETEzBucket '%s' does not existz Access to bucket '%s' was deniedzBucket '%s' already exists)Z NoSuchBucket AccessDeniedZBucketAlreadyExistscCs||_d|_d|_d|_dS)NF)rMr`r_expect_continue_not_supported)rSrMr4r4r5rTsz S3.__init__cCs(d}|jjdkr|jjS|jjr$d}|S)NZSTANDARDreZREDUCED_REDUNDANCY)rM storage_classZreduced_redundancy)rSclsr4r4r5rs  zS3.storage_classcCs|r|tjvrtj|}n(|r6t|jj|r6t|}n |jj}|jjrb| drx|dd}n| drx|dd}t d||f|S)Nz:443z:80zget_hostname(%s): %s) rIrirrMrkr host_baselower use_httpsendswithr)rSrbhostr4r4r5rh s      zS3.get_hostnamecCs|tj|<dSr0)rrIri)rSrbredir_hostnamer4r4r5 set_hostname"szS3.set_hostnameNcCs|d}|rd|tjvr0tj|dd|rH|tjvrdt|jj|sddt|ddd|df}n|d}|r|d ||f}|jjdkr|jj sd | ||f}t d ||S) NrbrerfrcFTrrrdz%s%sz http://%s%szformat_uri(): ) rgrIrirjrrMrkrZ proxy_hostrrhr)rSrN base_pathrnrdr4r4r5 format_uri%s,    z S3.format_uricCs*|d}||}t|dd|d<|S)NrdataZBucketlist)create_request send_requestr)rSrequestresponser4r4r5list_all_buckets:s  zS3.list_all_bucketsc CsZg}g}||||||D]\}} } || || qi} || d<|| d<|| d<| S)NrZcommon_prefixes truncated)bucket_list_streamingextend) rSrbprefix recursive uri_paramslimitZ item_listprefixesrdirsZobjectsrr4r4r5 bucket_list@s  zS3.bucket_listc#sJdd}dd}dd}fdd} |r0|p2i}d } g} d } d } |}| rF|||||||d }|d }| t|7} | t|7} || | kr|| | }|d } | r8|d ks| | |kr(|r| d |d |d<n,|r| d |d|d<nd||fVqFtd|dn| ||fVqF| ||fVqHdS)ze Generator that produces , pairs of groups of content of a specified bucket. cSst|dp d}|dkS)N.//IsTruncatedfalse)rr)rZ is_truncatedr4r4r5_list_truncatedOsz1S3.bucket_list_streaming.._list_truncatedcSs t|dS)NZContentsrrr4r4r5 _get_contentsTsz/S3.bucket_list_streaming.._get_contentscSs t|dS)NZCommonPrefixesrrr4r4r5_get_common_prefixesWsz6S3.bucket_list_streaming.._get_common_prefixescstddp|d|S)NrZ NextMarkerr)r)rZ current_eltskeyrr4r5_get_next_markerZsz2S3.bucket_list_streaming.._get_next_markerTrrrKeyZmarkerZPrefixFListing continues after '%s'N)copybucket_list_noparserEr)rSrbrrrrrrrrrr num_objectsZ num_prefixesmax_keysZ current_listZcurrent_prefixesr4rr5rMsF           zS3.bucket_list_streamingcCsn|dur i}|r||d<|jjs,|s,d|d<|dkr@t||d<|jjrPd|d<|jd||d }||}|S) Nr/Z delimiterrzmax-keystruezallow-unorderedrrbr)rMrrCZlist_allow_unorderedrr)rSrbrrrrrrr4r4r5rs   zS3.bucket_list_noparsecCstdd}|r||d}|r|dkr|dkr|}|dkr\|}d}||7}|d7}td |t|dd n t|d d |jjrd |d <d|d<|j d|||d}| |}|S)NTrJreUS us-east-1EUz/z1zbucket_location: )Z dns_strictF public-read x-amz-aclZ ObjectWriterzx-amz-object-ownershipr)rbrLrQ) rupdatestripupperrrrrM acl_publicrr)rSrbrm extra_headersrLrQrrr4r4r5 bucket_creates(  $    zS3.bucket_createcCs|jd|d}||}|S)Nr)rbrr)rSrbrrr4r4r5 bucket_deletes zS3.bucket_deleteFc CsB|}|jd|ddid}tj|d}tj|d}z~|rb|rJ|sb|jjtj|<dtj|<||}W||vr|tj|<n|tjvrtj|=||vr|tj|<n|tjvrtj|=nP||vr|tj|<n|tjvrtj|=||vr|tj|<n|tjvr tj|=0t |dd}|r*|dvr0d}n|d kr>d }|S) NrlocationrrerrZLocationConstraint)rerrz eu-west-1) rbrrIrirgrlrMrrr) rSrdforce_us_defaultrbrZsaved_redir_mapZsaved_region_maprrr4r4r5get_bucket_locationsB               zS3.get_bucket_locationcCsF|jd|ddid}||}|dd}|r>t|d}nd}|S)NrrequestPaymentrrreZPayerrrbrrgr)rSrdrr resp_dataZpayerr4r4r5get_bucket_requester_payss    zS3.get_bucket_requester_payscCsTtdd}d}||}td|t||d<|jd|||ddid}||}|S) NTrJz%szset_bucket_ownership(%s) content-md5rownershipControlsrdrLrQrrrr+rr)rSrd ownershiprLrQrrr4r4r5set_bucket_ownerships    zS3.set_bucket_ownershipcCsF|jd|ddid}||}|dd}|r>t|d}nd}|S)Nrrrrrez.//Rule//ObjectOwnershipr)rSrdrrrrr4r4r5get_bucket_ownerships    zS3.get_bucket_ownershipc Cstdd}d}dD]*}||dr&dp(d}|d|||f7}q|d 7}td |t||d <|jd |||d did}||}|S)NTrJzPBlockPublicAclsIgnorePublicAclsBlockPublicPolicyRestrictPublicBucketsFrrz <%s>%sz!z"set_bucket_public_access_block(%s)rrpublicAccessBlockr)rrgrr+rr) rSrdr9rLrQtagvalrrr4r4r5set_bucket_public_access_blocks    z!S3.set_bucket_public_access_blockcCsr|jd|ddid}||}|dd}|rjt|ddkt|ddkt|d dkt|d dkd }ni}|S) Nrrrrrerrrrrrr)rSrdrrrr9r4r4r5get_bucket_public_access_block s       z!S3.get_bucket_public_access_blockc Csi}|||d<d|jfd|jfd|jffD]F\}}z||||<Wq.tyr}zd||<WYd}~q.d}~00q.z|||d<Wn,ty}zi|d<WYd}~n d}~00|S)Nzbucket-locationzrequester-pays versioningrzpublic-access-block)rrget_versioningrS3Errorr)rSrdrrfuncer4r4r5 bucket_infos  zS3.bucket_infoc Cs|}|jd|ddid}zT||}t|dd|d<t|dd|d<|jj|||d |d <|WSty}z.|jd krt d WYd}~dSWYd}~n d}~00dS) Nrwebsiterrz.//IndexDocument//SuffixZindex_documentz.//ErrorDocument//KeyZerror_document)rbrwebsite_endpointzICould not get /?website - website probably not configured for this bucket) rbrrrrMrrrstatusr)rSrdrmrbrrrr4r4r5 website_info/s$   zS3.website_infocCs|}d}|d7}|d|jj7}|d7}|jjrT|d7}|d|jj7}|d7}|d7}|jd ||d did }||}td ||S) NzFz z %sz z  %sz zrrrbrQrReceived response '%s')rbrMZ website_indexZ website_errorrrr)rSrdrmrbrQrrr4r4r5website_createBs    zS3.website_createcCsN|}|jd|ddid}||}td||ddkrJtd||S)NrrrrrzExpected status 204: %s)rbrrrS3ResponseErrorrSrdrmrbrrr4r4r5website_deleteUs    zS3.website_deletec Cs|}|jd|ddid}z||}Wnfty}zN|jdkrZtdWYd}~dS|jdkrztdWYd}~dSWYd}~n d}~00t|d}|d krtd |dSt|dd |d <t|dd |d<t|dd|d<|S)Nr lifecyclerrzMCould not get /?lifecycle - lifecycle probably not configured for this bucketzKCould not get /?lifecycle - lifecycle support not implemented by the serverrZLifecycleConfigurationz7Could not get /?lifecycle - unexpected xml response: %sz.//Rule//Prefixrz.//Rule//Expiration//DaterZz.//Rule//Expiration//DaysZdays)rbrrrrrrr)rSrdrmrbrrrZ root_tag_namer4r4r5expiration_infobs<   zS3.expiration_infocCs|jjr|jjrtd|jjs^|jjs^|jjr8tdtd|}|jd|ddid}n ||}| |}td||S)Nz+Expect either --expiry-day or --expiry-datezdel bucket lifecyclerrrr) rM expiry_date expiry_daysParameterError expiry_prefixrrbr_expiration_setrrr4r4r5expiration_sets   zS3.expiration_setcCstdd}|d7}|d7}|d|jj7}|d7}|d7}|d7}|jjr^|d |jj7}n|jjrv|d |jj7}|d 7}|d 7}|d 7}tdd}t||d<|}|jd|||ddid}|S)Nzput bucket lifecyclezz z z %sz z Enabledz z %sz %sz z zTrJrrrrbrLrQr) rrMrrrrr+rbr)rSrdrQrLrbrr4r4r5rs.  zS3._expiration_setcCs|jj}d}|dkr$|jjs$td|jjrl|jjrHttjt |}|jj r^t |\}}nt |\}}|sx|jj}||fS)N-zRYou must specify --mime-type or --default-mime-type for files uploaded from stdin.)rMdefault_mime_typerZguess_mime_typefollow_symlinksrospathrealpathrZuse_mime_magicrGr=r>)rSfilename content_typecontent_charsetr4r4r5_guess_content_typeszS3._guess_content_typecCs,|jj}|s|jj}|d|jj7}|S)N ; charset=)rM mime_typerencodingr)rSr r4r4r5stdin_content_types zS3.stdin_content_typecCsl|jj}d}|dkr|S|r&d}n|s8||\}}|sH|jj}|||rh|durh|d|}|S)Nrzapplication/x-directoryr)rMrrr rr add_encoding)rSr is_dirr r r4r4r5r s  zS3.content_typecCsbd|vr dS|jjd}|ddkr*dS|dd}t|dkrFdS|d}||vrZd SdSdS) Nzcharset=F,rre.rHrT)rMZadd_encoding_extsrDrsplitrE)rSr r Zextspartsextr4r4r5rs   zS3.add_encodingrec Cs|jdkrtd|jzd}d}|dkrLd}tjtjddd}d |_ndd}t|} t | } | t } t | rd}t d }n(t| std ntj| dd }| t}||_Wn6ttfy} ztd | jWYd} ~ n d} ~ 00tdd} |r| ||jjrd| d<|jjr4d| d<|jj| d<|j||d| d<|jjrXd| d<|| d<d}|jjs|rtd|jjr||jjtks|rd}||jj |jjtkrtd|jj|jj f|r|!|| |||S|jj"rz|#|}Wnt$y d}Yn0|durt%|dd}|dd&d}||krt'd|d||jj(}||krt)d|dSt)d |||fnt)d!|||ft*|| d<|j+d"|| d#}||,|d$}|-|||}|S)%NrK Expected URI type 's3', got '%s'FrrTrb)modeclosefdzzNot a regular file)r%srJAES256x-amz-server-side-encryptionaws:kms+x-amz-server-side-encryption-aws-kms-key-id)r r content-typerrx-amz-storage-classz2Multi-part upload is required to upload from stdinzZChunk size %d MB results in more than %d chunks. Please increase --multipart-chunk-size-mbrLcontent-lengthetag"'rez,Put: size and md5sum match for %s, skipping.zBMultiPart: checksum (%s vs %s) does not match for %s, reuploading.z>MultiPart: size (%d vs %d) does not match for %s, reuploading.rrdrLsourceZ destinationZextra).type ValueErrorioopensysstdinfileno stream_namerrstatr r BytesIOr InvalidFileErrorr IOErrorOSErrorstrerrorrrrMserver_side_encryptionkms_keyr rrenable_multipartrZmultipart_chunk_size_mbSIZE_1MBZmultipart_max_chunkssend_file_multipartZ put_continue object_info Exceptionintrr- send_chunkrrCrrd send_file)rSr rdr extra_labelrsizeZ is_streamZ src_streamZfilename_bytesr3rrrL multipartrZ remote_sizeZremote_checksumZchecksumrlabelsrr4r4r5 object_puts     $               z S3.object_putc CsJ|jdkrtd|j|jd|d}|||d}|||||}|S)NrKrrrdr))r+r,rrd recv_file) rSrdstreamZ dest_namestart_positionrCrrFrr4r4r5 object_getOs  z S3.object_getcsfddD}||S)z" Batch delete given a remote_list csg|]}|dqS)Zobject_uri_strr4).0item remote_listr4r5 Yrz*S3.object_batch_delete..)object_batch_delete_uri_strs)rSrPurisr4rOr5object_batch_deleteWszS3.object_batch_deletec Csvdd}|}t|dkr tdt|d}|||}tt|dddd}|jd |||d d id }||}|S) z* Batch delete given a list of object uris cSsd}|D]f}t|}|jdkr,td|j|s@td|||krTtdt|}|d|7}q|d7}t|}|S)Nz.rKrzURI '%s' has no objectz2The batch should contain keys from the same bucketz%sz ) r%r+r, has_objectrbrescapeobjectr)rbZkey_listrQrrdrWr4r4r5compose_batch_del_xml^s   z>S3.object_batch_delete_uri_strs..compose_batch_del_xmlrzKey list is emptyapplication/xml)rr#TrJrdeleteNr)rEr,r%rbrr+rr) rSrSrXZbatchrbZ request_bodyrLrrr4r4r5rR\s"   zS3.object_batch_delete_uri_strscCs4|jdkrtd|j|jd|d}||}|S)NrKrrrH)r+r,rrrSrdrrr4r4r5 object_delete{s   zS3.object_deletecCs|jdkrtd|j|jjdkr,td|jjdvr@tdd}|d|jj7}|d 7}|d |jj7}|d 7}|d 7}|jd ||ddid}||}td||S)NrKrrz*You must restore a file for 1 or more days)ZStandardZ ExpeditedZBulkz7Valid restoration priorities: bulk, standard, expeditedz@z %sz z %sz zrZrestorerdrQrr) r+r,rMZ restore_daysrZrestore_priorityrrr)rSrdrQrrr4r4r5object_restores$      zS3.object_restorecCs4gd}||jjD]}||vr||=q|S)N)rZr%z last-modifiedrzx-amz-version-idzx-amz-delete-markerz accept-rangesZ connectionr&Zserverz x-amz-id-2zx-amz-request-idzcf-rayr$)rMZremove_headersr)rSrL to_removehr4r4r5_sanitize_headerss   zS3._sanitize_headersc Cs|jdkrtd|j|jdkr0td|j|jjdurz||}Wn6ty}z|jdkrh|d}WYd}~n d}~00d} d} |s|jjrd}|r||} | d} t | d}|jj rL| } |dur||} | d} t | d}||urt j t } n |jjt } || krL| durD||} | d} t | d}| } d} | rj|| t| dd } n tdd } |jjrd | d <|| d <|jjrd | d<|jjrd| d<|jj| d<|r| ||jjr|jj| d<|sd| d<nd| d<| r||||| |}nr@r;r$ZMAX_CHUNK_SIZE_MBr<Zmultipart_copy_chunk_size_mbrarrr9r:rcopy_file_multipartrrbrWrrrr set_acl)rSsrc_uridst_urirsrc_sizerC replace_metaaclexcrErLZsrc_infoZ src_headersZ thresholdrrr4r4r5 object_copys                               zS3.object_copycCs|j|||||ddS)NT)rj)rm)rSrgrhrrirCr4r4r5 object_modifyHs zS3.object_modifycCs^||||||}td||f|dr:t|ddvrP||td|n td||S)NzObject %s copied to %sr)ZCopyObjectResultZCompleteMultipartUploadResultzObject '%s' deletedzGObject '%s' NOT deleted because of an unexpected response data content.)rmrrr\r)rSrgrhrrirCZ response_copyr4r4r5 object_moveNs    zS3.object_movec Csl|jd|d}z||}WnJtyf}z2|jdkrN|jsNd|_d|_||_|WYd}~n d}~00|S)NrrHrZ NoSuchKeyz!The specified key does not exist.)rrrrcodemessagerN)rSrdrrrlr4r4r5r>]szS3.object_infocCsP|r|jd|ddid}n|jd|ddid}||}t|d}|S)Nrrkrdrrrr)rUrrbrr)rSrdrrrkr4r4r5rdls   z S3.get_aclcCstd|}td||ftddidd}|rJ|jd|||ddid }n|jd |||ddid }||}|S) Nrzset_acl(%s): acl-xml: %sr#rYTrJrrkrrr)rrrUrrbr)rSrdrkrQrLrrr4r4r5rfxs  z S3.set_aclcCsptdd}|durdnd}d}|d|7}|d7}td|t||d <|jd |||d did }||}|S) NTrJZEnabledZ SuspendedzI%szzset_versioning(%s)rrrrr)rSrdZenabledrLrrQrrr4r4r5set_versionings     zS3.set_versioningcCs,|jd|ddid}||}t|ddS)NrrrrrZStatus)rrrr[r4r4r5rs  zS3.get_versioningcCs.|jd|ddid}||}t|dS)Nrpolicyrrrrbrrr[r4r4r5 get_policys   z S3.get_policycCs\d}|d|7}|d7}tdd}d|d<t||d<|jd |||d did }||}|S) Nz;rsz TrJrYr#rrz legal-holdrrr+rr)rSrdZlegal_hold_statusrQrLrrr4r4r5set_object_legal_holds    zS3.set_object_legal_holdcCshd}|d|7}|d|7}|d7}tdd}d|d<t||d <|jd |||d did }||}|S) Nz;z%sz%%sz TrJrYr#rrZ retentionrrx)rSrdrZretain_until_daterQrLrrr4r4r5set_object_retentions     zS3.set_object_retentioncCs8tdd}d|d<|jd|||ddid}||}|S)NTrJzapplication/jsonr#rrur)rrrrSrdrurLrrr4r4r5 set_policys  z S3.set_policycCs.|jd|ddid}td|||}|S)Nrrurrzdelete_policy(%s)rrrr[r4r4r5 delete_policys   zS3.delete_policycCs.|jd|ddid}||}t|dS)Nrcorsrrrvr[r4r4r5get_corss   z S3.get_corscCsDtdd}d|d<t||d<|jd|||ddid}||}|S) NTrJrYr#rrrrrx)rSrdrrLrrr4r4r5set_corss   z S3.set_corscCs.|jd|ddid}td|||}|S)Nrrrrzdelete_cors(%s)r}r[r4r4r5 delete_corss   zS3.delete_corscCsLtdd}t||d<|jd|||ddid}td||f||}|S)NTrJrrrrz(set_lifecycle_policy(%s): policy-xml: %s)rr+rrrr{r4r4r5set_lifecycle_policys   zS3.set_lifecycle_policycCs\tdd}d|d<d}|jjr(|d7}n|d7}|d7}|jd ||d did }||}|S) NTrJrYr#zN zRequester zBucketOwner z rrr])rrMrRrr)rSrdrLrQrrr4r4r5 set_payers    z S3.set_payercCsB|jd|ddid}td|||}td|d|S)Nrrrzget_lifecycle_policy(%s)z%s: Got Lifecycle Policyrrrbrrr[r4r4r5get_lifecycle_policys   zS3.get_lifecycle_policycCs.|jd|ddid}td|||}|S)Nrrrrzdelete_lifecycle_policy(%s)r}r[r4r4r5delete_lifecycle_policy s   zS3.delete_lifecycle_policycCsPtdd}|jjrd|d<|jd|||ddid}td||f||}|S) NTrJTruez!x-amz-skip-destination-validationr notificationrz+set_notification_policy(%s): policy-xml: %s)rrMZskip_destination_validationrrrr{r4r4r5set_notification_policys  zS3.set_notification_policycCsB|jd|ddid}td|||}td|d|S)Nrrrzget_notification_policy(%s)z%s: Got notification Policyrrr[r4r4r5get_notification_policys   zS3.get_notification_policycCsd}|||S)Nz7)r)rSrdZ empty_configr4r4r5delete_notification_policy$szS3.delete_notification_policyc Cs|jdkrtd|jd}|d7}|D]0\}}|d7}|d|7}|d|7}|d7}q(|d 7}|d 7}td d }t||d <|r|jd|||ddid}n|jd|||ddid}td||f||}|S)NrKrz9zzrz %szz z TrJrrtaggingrrrzset_tagging(%s): tagset-xml: %s) r+r,rr+rUrrbrr) rSrdtagsetsrQrrrLrrr4r4r5 set_tagging(s2         zS3.set_taggingcCsr|r|jd|ddid}n|jd|ddid}td|||}|d}t|d}td |d |S) Nrrrrrrzget_tagging(%s)rZTagz%s: Got object taggingr)rUrrbrrr)rSrdrrxml_datarr4r4r5 get_taggingBs    zS3.get_taggingcCsP|r|jd|ddid}n|jd|ddid}td|||}|S)Nrrrrrrzdelete_tagging(%s))rUrrbrrr[r4r4r5delete_taggingQs   zS3.delete_taggingcCs*g}||||D]\}}||q|Sr0)get_multipart_streamingr)rSrdrr upload_listruploadsr4r4r5 get_multipart\s  zS3.get_multipartccs4|r |pi}|}d}d}|}d|d<|r0|j|d||d}|d} t| d} |t| 7}||krr||}t| d} | r| dkrd }|r$|d ks||kr| rt| d } | s| d d } | |d <t| d} | r| |d<nd|vr|d=nd | fVq0td|d n|| fVq0|| fVq,dS)NTrr)rrrrZUploadrrFrZ NextKeyMarkerrZ KeyMarkerZNextUploadIdMarkerZUploadIdMarkerr)rrbrrrErrr)rSrdrrrbrrrrrr xml_truncatedZnext_keyZupload_id_markerr4r4r5resR        zS3.get_multipart_streamingcCs,g}|||||D]\}}||q|Sr0)list_multipart_streamingr)rSrd upload_idrr part_listrrr4r4r5list_multiparts  zS3.list_multipartc cs|r |pi}d}d}|}|r|||||}|d} t| d} |t| 7}||kr^||}t| d} | rx| dkr|d}|r|dks||kr| rt| d } | s| dd } | |d <n d| fVqtd |d n || fVq|| fVqdS) NTrrZPartrrFrZNextPartNumberMarkerZ PartNumberzpart-number-markerz!Listing continues after Part '%s')rlist_multipart_noparserrErrr) rSrdrrrrr max_partsrrrrZnext_part_numberr4r4r5rsB       zS3.list_multipart_streamingcCsF|dur i}|dkr t||d<||d<|jd||d}||}|S)Nrz max-partsuploadIdrrr)rCrr)rSrdrrrrrr4r4r5rs  zS3.list_multipart_noparsecCs"|jd|d|id}||}|S)Nrrrrr)rSrdidrrr4r4r5abort_multiparts  zS3.abort_multipartcCs2|jd|ddid}||}t|d}|S)Nrloggingrr)rrbrr)rSrdrr accesslogr4r4r5 get_accesslogs    zS3.get_accesslogcCs^||}td||f|td|tdtd||f|||dS)NzCurrent ACL(%s): %sZREAD_ACPZWRITEzUpdated ACL(%s): %s)rdrrdZ appendGranteer rf)rSrdrkr4r4r5set_accesslog_acls  zS3.set_accesslog_aclc Cst}|r ||||n|d|}td||f|jd||ddid}z||}Wn^ty} zF| j ddkrt d| t d |||}nWYd} ~ n d} ~ 00||fS) Nrz$set_accesslog(%s): accesslog-xml: %srrrCodeZInvalidTargetBucketForLoggingz.Setting up log-delivery ACL for target bucket.zs3://%s) rZ enableLoggingZ setAclPublicZdisableLoggingrrrbrrrrr%) rSrdenableZlog_target_prefix_urirrrQrrrr4r4r5 set_accesslogs&    zS3.set_accesslogc Csddd}|r|s|rtd|r>|}|r:|pBoth 'uri' and either 'bucket' or 'object' parameters suppliedrbrdr~zCreateRequest: resource[uri]=%s) r,rbrUrWrx http_methodsZgetkey operationsrIr) rSZ operationrdrbrWrLrQrrNrOrr4r4r5r s   zS3.create_requestcCs|jj|ddS)Nr)rM max_retries)rSretriesr4r4r5 _fail_waitsz S3._fail_waitc Os8|dd}d|vr~t|ddkr~t|dd}t|dd}|||td||rp|tj|<td|||i|S|jd kr,|dd } | r"| d r| d d} n| d r| dd} t d | j } |j d}||| td| |r|tj|<td|||i|St d|t |dS)NrLzx-amz-bucket-regionrrz .//Bucketz .//EndpointzRedirected to: %szRedirected to region: %srXrzhttp://zhttps://rzrbzRedirection error: No info provided by the server to where should be forwarded the request (HEAD request). (Hint target region: %s))rgrErrrrIrlrOrjrrprNrr) rSrrfnargskwargsZ redir_regionZ redir_bucketrZ location_urlr4r4r5_http_redirection_handler#s6              zS3._http_redirection_handlerc Osd|vrt|ddkrt|dd}|dkrvt|dd}|durl|tj|jd<td|||i|Std nn|d krt|dd }|d krtd d|_||i|Sn2|dkr| s|j stdd|_ ||i|Sn.| s|j stdd|_ ||i|SdS)zR Returns None if no handler available for the specific error code rrrZAuthorizationHeaderMalformedZRegionNrbzForwarding request to %szVCould not determine bucket the location. Please consider using the --region parameter.ZInvalidRequestMessagez\The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.zEndpoint requires signature v4TZInvalidArgumentFalling back to signature v2) rErrIrlrNrrrr_rar`) rSrrrrr failureCoderegionrqr4r4r5_http_400_handlerHs2  zS3._http_400_handlercOszd|vrnt|ddkrnt|dd}|dkrnt|dd}|dkrn|sn|jsntdd|_||i|St|dS) Nrrrrrz=AWS authentication requires a valid Date or x-amz-date headerrT)rErrar`rr)rSrrrrrrrqr4r4r5_http_403_handlerrszS3._http_403_handlerc Cs|jdr|stj|jdtjdkrtdzFtd|jd}|j |dd}|durr|tj|jd<td|Wn6t y}ztd |td WYd}~n d}~00dS) a?Get and update region for the request if needed. Signature v4 needs the region of the bucket or the request will fail with the indication of the correct region. We are trying to avoid this failure by pre-emptively getting the correct region to use, if not provided by the user. rbrz====== SEND Inner request to determine the bucket region =====zs3://T)rNzE===== SUCCESS Inner request to determine the bucket region (%r) =====z,getlocation inner request failure reason: %sz?===== FAILED Inner request to determine the bucket region =====) rNrgrarIrlr"rmrr%rr?)rSrZs3_urirrlr4r4r5update_region_inner_requests& zS3.update_region_inner_requestc Cs|dur|jj}||t|j|_|j}|\}}}i}tdd}zt | |d}| ||j }td|||t |jpdf|j|||j||j} | j|d<| j|d<t| |d<| |d<d |dvrt|dd } | |d <t|Wn<ttfy(Yn"ttfy*} ztd t|t| d rz| jrz| jtj tj!tj"fvsd t#| vsdt#| vrt$| t%st&||rt'd|d| ft'd|(|t)*|(||+||dWYd} ~ St,d|dWYd} ~ n(d} ~ 0td t|Yn0td t||ddvr||-|||j+|S|ddkr |.|||j+|} | r| St/|} |r| j0dvrt'd|d| ft'd|(|t)*|(||+||dS| |ddkr*|1|||j+|S|ddkr@t/||ddks\|ddkrt/|} |ddkrvd}|rt'd|d| ft'd|(|t)*|(||+||dS| |ddks|ddkrt/||S)Nz"Processing request, please wait...rbzESending request method_string=%r, uri=%r, headers=%r, body=(%i bytes)rerreasonrLrx-amz-meta-s3cmd-attrs s3cmd-attrs Response: errno [Errno 104] [Errno 32] Retrying failed request: %s (%s)rdWaiting %d sec...rzRequest failed for: %si-i3Z BadDigestZOperationAbortedZTokenRefreshRequiredZRequestTimeoutircrr+)2rMrrrrQrLrtrr&rgrhrrrEcr getresponserrr getheadersreadparse_attrs_headerputZ S3SSLErrorZS3SSLCertificateErrorr6r?pprintpformathasattrrEPIPE ECONNRESET ETIMEDOUTrCrBSocketTimeoutExceptioncloserrr[sleeprZS3RequestErrorrrrrpr)rSrrrLrOrNrconnrd http_responseattrsr handler_fnerrr4r4r5rs          $zS3.send_requestc Cs|jjstd||Sd|vr*d|d<|j||}z||}Wn0tyv}z|dWYd}~n d}~00|j|d|d|S)zrWrapper around send_request for slow requests. To be able to show progression for small requests z$Sending slow request, please wait...actionrfailedN)current_positiondone)rMprogress_meterrrprogress_classr?rr)rSrrFZoperation_sizeprogressrrlr4r4r5send_request_with_progresss    zS3.send_request_with_progressc )Cs^ |dur|jj}||| dur*|jj} |jr8| r8d} |j} t| d} } |j} |jjrtd|d<|j || }n t d| t }|rt ||| }n t ||| }||_| r| sd} nd| d<|\}}} zdt||d}|j||||j| D] }|jt|t| |q|jWnty\}zWYd}~nd}~0ty}z|jjr|d |rtd |d |ftd ||t |||!||||||d ||WYd}~St"d|d WYd}~n d}~00|dkr|#|t$}zd}| rt%%|jj&gggt'\}}}|r`|j(}n |s|stdt'd|_d} | r|r|j)tj*kr|r|+tj,|j_-| dkrt.|jj/| }|dkr|+|}n|}|st0d|jj1dkrt }|2||j3||jjr8|j2t4|d| t4|8} |}|jj1dkrt |}t5||jj1} t6| ||}|rt t.||jj7q|8}!|j(}i}"|j)|"d<|j9|"d<t:|;|"d<|+|"d<| |"d<t<|t=dt>?|"Wnty6}zWYd}~nd}~0t0yr}z$|jjrZ|d WYd}~nd}~0ty}zr|jjr|d |rd}#t@|dr|jAr|jAtAjBtAjCtAjDfvsdtE|vsdtE|vrbtF|tGsbzN|j(}i}"|j)|"d<|j9|"d<t:|;|"d<|+|"d<| |"d<d}#Wnty`tHdYn0|#std|d |ftd ||t |||!||||||d ||| WYd}~Sn t=d | |ft"d|d WYd}~n d}~00t }$|$||"d!<|"d!r4t5|"d|"d!p:t5d"|"d#<|jjr\|2|d$|"dd%vr|jI||"|j!||||||| d& S|"dd'kr|jJ||"|j!||||||| d& }%|%r|%StK|"}&|&jLd(vr|&|"dd)kr|jM||"|j!||||||| d& S|"dd*krB|rBd|_|j!||||||d ||dd+ Sd,|"dvr\d|"dd,<|"dd-ksx|"dd.krd}'|"dd/krd}'|"dd0kr|r|d1pd2}n|"dd3krd}'nN|"dd4krd}'|r|d1pd2}n&|"dd'krtK|"}&|&jLd(vrd}'tK|"}&|'r|rtd|d |&f|rNtd5|td ||t |||!||||||d ||| Std6| t"d7|&|&t=d8|!|"dd,dNd9f|"dd,dNd9}(d:|(v rZ|(|8k rZ|"dd;d| |!||||||d ||| Std6| t"d?|"S)@NFr%uploadrz!Sending file '%s', please wait...z 100-continueexpectrbrrrdrrzUpload failed for: %srezQHTTP Expect Continue feature disabled because of no reply of the server in %.2fs.Trz3File smaller than expected. Was the file truncated?Zdelta_positionrrrLrrDrrrrzXCannot retrieve any response status before encountering an EPIPE or ECONNRESET exceptionzUpload failed: %s (%s)zGiving up on '%s' %selapsedrspeedrr)offset chunk_sizeuse_expect_continuerrri)rr&rrrcg{Gz?irz(Retrying on lower speed (throttle=%0.2f)$Too many failures. Giving up on '%s'rz"MD5 sums: computed=%s, received=%sr'rr r!zMD5 Sums don't match!zRetrying upload of %sz0MD5 sums of sent and received files don't match!)OrMrrZuse_http_expectrrLr@r2rrrr[r*r)rQrtr&rgrhr putrequestrrkeys putheaderr endheadersrr?rrrrrB S3UploadErrorseekrselectZsockEXPECT_CONTINUE_TIMEOUTrrZCONTINUErZ _CS_REQ_SENTZ_HTTPConnection__stateminrAr5 limitraterZwrapper_send_bodyrEfloatmaxZ throttle_max hexdigestrrrrrrrrrrrrrCrBrr rrrrprr))rSrrJrFbufferZthrottlerrrrrL size_left size_totalr rtimestamp_startZ sha256_hashrOrNrheaderrmd5_hashrreadablewritableZ exceptionallr start_timeZlimitrate_throttle real_durationexpected_durationZ md5_computedrZ known_error timestamp_endrr try_retry md5_from_s3r4r4r5rBs       (&                              & ,          ",   z S3.send_filec Cst}t|||||}|||}t} | ||d<||d<|drbt|d|dphtd|d<|drt|ddkrtt|dd|S)NrrDrrrrbr)r[r$Zupload_all_partsZcomplete_multipart_uploadrrrr) rSrJrLrdrDrCrrrr r4r4r5r=s  (zS3.send_file_multipartcCs||||||Sr0)r=)rSrgrhrDrLrCr4r4r5re/s zS3.copy_file_multipartc! Csn|dur|jj}|||\}}}|j} |jjrNd|d<|j|d} n td| t} d} zt | |d} | j |||| j|D]} | j t| t|| q|dkrtd|| j dd|| j i}| j }|j|d <|j|d <t||d <d |d vrDt|d d }||d <tdt|Wn6ty}zWYd}~nd}~0ttfy}z|jjr| dt!|dr|j"r|j"t"j#t"j$t"j%fvsdt&|vsdt&|vrt'|t(st )| |rlt*d|d|ft*d|+|t,|+||j-|||||ddWYd}~St.d|dWYd}~n d}~00|d dks|d dkr|/|d<|d dvr|0|||j-||||S|d dkr|1|||j-||||}|r|St2||d dkr>|3|||j-||||S|d dksZ|d dkrd}|d d krrd!}n|d d"krd!}|r|d}|r|+|}t*d|t2|ft*d|t,||j-|||||ddSt*d#|t.d|t2||dkrt4}t5|d d$}||}|}|jjrL|| _6|| _7|| _8z|dkrv|/d}t9|dksvJ||kr\||jj:kr|jj:p|}|jj;dkrt}|/|}t9|dkrt||dkr2|?||t9|7}|jjrv| j?t9|d&qvt @| Wn$tAyYnttfy}z|jjr| dt!|dr|j"r|j"t"j#t"j$t"j%fvsdt&|vsdt&|vrt'|t(st )| |rjt*d|d|ft*d|+|t,|+||j-|||||ddWYd}~St.d|dWYd}~n d}~00|Bt}|jjr| ?| d'|d  d(d)Cd*} d+|d vrz|d d,} WntDyYn0d-| vr|dkr(|E|d,<n^ztF| |d,<WnLty}z2|j"t"jGkrht*d.| |ft*d/WYd}~n d}~00| d,| k|d0<|| |d1<||d2<|d1rt=|d2|d1pt=d3|d4<|d2|t5|d d$krt*d5|t5|d d$|d2ftd6| d,d-| vrj|d0sj|d  d7d8krjt*d9| d,| f|S):NZdownloadrrz#Receiving file '%s', please wait...rbzRequesting Range: %d .. endZRangez bytes=%d-rrrLrrrrrrrrrdrr)rzDownload failed for: %srrrrrrFrTrrr%z EOF from S3!rrr&rer'zx-amz-meta-s3tools-gpgencrrzUnable to open file: %s: %sz(Unable to verify MD5. Assume it matches.Zmd5matchrrDrrz4Reported size (%s) does not match received size (%s)zReceiveFile: Computed MD5 = %sr r!z5MD5 signatures do not match: computed=%s, received=%s)HrMrrrtr2rrrr[r&rgrhrrrrrrrrrrrrrrrrrrr6r?rrrrrrrCrBrrrrrrIZS3DownloadErrorrrrrrrr@Z total_sizeZinitial_positionrrEZ recv_chunkrrrwriterrr7flushrKeyErrorrr,ENOENT)!rSrrJrFrKrrOrNrLr rrrrrrrrrr roZ retry_delayrrrrrZ this_chunkrrr r r r4r4r5rI4sl              &                             &     ,( z S3.recv_file)N)NNNr)NNNr)NNNr)NN)F)N)N)N)N)N)NF)Nre)rre)NNreF)NNre)NNre)Nr)Nr)Nr)Nr)Nr)NF)NNNNreN)N)r)rerNrrN)re)re)rN)Zrurvrwr!rtargetsrZcodesrTrrhrrrrrrrrrrrrrrrrrrrrrr rr rrGrLrTrRr\r^rarmrnror>rdrfrtrrwryrzr|r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrBr=rerIr4r4r4r5rxs    5   !        f             6  +   %* h    rxcCs.i}|dD]}|d\}}|||<q|S)Nr:)rD)Z attrs_headerrattrrrr4r4r5r s  r)ZZ __future__rrr/rr[rr=r-rZxml.saxrZsocketrrrrrrr r3r r r r r ImportError urllib.parserZ BaseUtilsrrrrrrrZUtilsrrrrrrrrrr r!r"Z ExceptionsZ MultiPartr$r%r&ZCryptor'r(r)r*r+r,r-r.Zctypesr/r:ZMagicr1r6 TypeErrorr.Z MAGIC_MIMEloadAttributeErrorr7rrCZ error_strr<r;rGrr<__all__rWrIrxappendrr4r4r4r5 s   $        (       PI