§
    >Ä³gUk ã                  ó�  — U d Z ddlmZ g d¢ZddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# d
dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d
dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d
dl6m7Z7m8Z8 d
dl9m:Z:m;Z;m<Z<m=Z=m>Z> d
dl?m@Z@mAZA d
dlmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM d
dlNmOZOmPZP ddlQmRZR ddlSmTZTmSZS ddlUmVZV erddlWmXZXmYZY ejZ        dk    Z[ ej\        ¦   «         Z]de^d<   e G d„ d¦  «        ¦   «         Z_ G d„ de	¦  «        Z` G d„ de	¦  «        Za G d „ d!eO¦  «        ZbdS )"z+Module gathering all abstract base classes.é    )Úannotations)ÚMySQLConnectionAbstractÚMySQLCursorAbstractÚ
ServerInfoN)ÚABCÚabstractmethod)Ú	dataclassÚfield)Ú	signature)ÚTracebackType)ÚTYPE_CHECKINGÚAnyÚAsyncGeneratorÚBinaryIOÚCallableÚDictÚ	GeneratorÚIteratorÚListÚMappingÚNoReturnÚOptionalÚSequenceÚTupleÚTypeÚUnionÚcasté   )ÚDUPLICATED_IN_LIST_ERRORÚKRB_SERVICE_PRINCIPAL_ERRORÚMYSQL_PY_TYPESÚOPENID_TOKEN_FILE_ERRORÚTLS_V1_3_SUPPORTEDÚTLS_VER_NO_SUPPORTEDÚTLS_VERSION_ERRORÚTLS_VERSION_UNACCEPTABLE_ERROR)ÚCONN_ATTRS_DNÚDEFAULT_CONFIGURATIONÚMYSQL_DEFAULT_CHARSET_ID_57ÚMYSQL_DEFAULT_CHARSET_ID_80ÚOPENSSL_CS_NAMESÚTLS_CIPHER_SUITESÚTLS_VERSIONSÚ
ClientFlag)ÚMySQLConverterÚMySQLConverterBase)ÚErrorÚInterfaceErrorÚInternalErrorÚNotSupportedErrorÚProgrammingError)ÚUNACCEPTABLE_TLS_CIPHERSUITESÚUNACCEPTABLE_TLS_VERSIONS)ÚBinaryProtocolTypeÚDescriptionTypeÚEofPacketTypeÚHandShakeTypeÚMySQLScriptPartitionÚOkPacketTypeÚParamsSequenceTypeÚ
ResultTypeÚRowTypeÚStatsPacketTypeÚ
StrOrBytesÚWarningType)ÚGenericWrapperÚimport_objecté   )ÚMySQLAuthenticator)ÚCharsetÚcharsets)ÚMySQLProtocol)ÚMySQLTcpSocketÚMySQLUnixSocketÚposixz%weakref.WeakValueDictionary[Any, Any]ÚNAMED_TUPLE_CACHEc                  óœ   — e Zd ZU dZded<   ded<    ed¬¦  «        Zded	<   ded
<   ded<   ded<   ded<   ded<   ded<   dZded<   dd„ZdS )r   zˆStores the server information retrieved on the handshake.

    Also parses and validates the server version, storing it as a tuple.
    ÚintÚprotocolÚstrÚversionF)ÚinitzTuple[int, ...]Úversion_tupleÚ	thread_idÚcharsetÚstatus_flagsÚauth_pluginÚbytesÚ	auth_dataÚcapabilitiesÚboolÚquery_attrs_is_supportedÚreturnÚNonec                ó4  — t          j        d¦  «        }|                     | j        ¦  «        }|st	          d¦  «        ‚t          d„ |                     ¦   «         dd…         D ¦   «         ¦  «        }|dk     rt	          d| j        › d�¦  «        ‚|| _        d	S )
zŒParse and validate server version.

        Raises:
            InterfaceError: If parsing fails or MySQL version is not supported.
        z$^(\d{1,2})\.(\d{1,2})\.(\d{1,3})(.*)zFailed parsing MySQL versionc              3  ó4   K  — | ]}t          |¦  «        V — Œd S ©N)rP   )Ú.0Úvs     ú[/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/mysql/connector/aio/abstracts.pyú	<genexpr>z+ServerInfo.__post_init__.<locals>.<genexpr>˜   s(   è è € Ð<Ð< 1�˜A™œÐ<Ð<Ð<Ð<Ð<Ð<ó    r   é   )é   rF   zMySQL Version 'z' is not supportedN)ÚreÚcompileÚmatchrS   r2   ÚtupleÚgroupsrU   )ÚselfÚ
version_rerm   rS   s       rf   Ú__post_init__zServerInfo.__post_init__�   s£   € õ ”ZÐ GÑHÔHˆ
Ø× Ò  ¤Ñ.Ô.ˆØð 	AÝ Ð!?Ñ@Ô@Ð@åÐ<Ð<¨¯ª©¬°q¸°sÔ(;Ð<Ñ<Ô<Ñ<Ô<ˆØ�VÒÐÝ Ð!S°4´<Ð!SÐ!SÐ!SÑTÔTÐTØ$ˆÔÐÐrh   N©r_   r`   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r
   rU   r^   rr   © rh   rf   r   r   {   sº   € € € € € € ðð ð
 €M€M�MØ€L€L�LØ%* U°Ð%6Ñ%6Ô%6€MÐ6Ð6Ð6Ñ6Ø€N€N�NØ€L€L�LØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ%*ÐÐ*Ð*Ð*Ñ*ð%ð %ð %ð %ð %ð %rh   r   c            .      óœ	  — e Zd ZU dZddddddddddddddddi dddddddddded         ed         dded	         ed
         ed         ddddddded         ddddœ-dúdB„ZdûdD„Z	 	 	 düdýdL„ZdþdM„ZdþdN„Z	dþdO„Z
e	 dÿ�d dU„¦   «         Zee�ddV„¦   «         ¦   «         Ze�ddW„¦   «         Ze�ddX„¦   «         Ze�ddY„¦   «         Ze�ddZ„¦   «         Ze�dd[„¦   «         Zej        �dd]„¦   «         Ze�dd^„¦   «         Zej        �dd`„¦   «         Ze�dda„¦   «         Zej        �ddb„¦   «         Z�ddc„Z�ddd„Ze�dde„¦   «         Zej        �ddf„¦   «         Ze�ddg„¦   «         Ze�d	di„¦   «         Ze�ddj„¦   «         Ze�d
dl„¦   «         Ze�ddm„¦   «         Ze�ddn„¦   «         Z e j        �ddo„¦   «         Z �ddp„Z!�ddq„Z"e�ddr„¦   «         Z#e#j        �dds„¦   «         Z#�ddt„Z$�ddu„Z%e�ddv„¦   «         Z&e&j        �ddx„¦   «         Z&�ddy„Z'�ddz„Z(e�dd{„¦   «         Z)e)j        �dd|„¦   «         Z)e�dd}„¦   «         Z*e*j        �dd~„¦   «         Z*e�dd„¦   «         Z+e+j        �dd€„¦   «         Z+e�dd�„¦   «         Z,e�dd‚„¦   «         Z-e�ddƒ„¦   «         Z.e�dd…„¦   «         Z/e/j        �dd†„¦   «         Z/e�dd‡„¦   «         Z0edþdˆ„¦   «         Z1e�dd‹„¦   «         Z2dþdŒ„Z3	 �d�ddŽ„Z4�dd�„Z5�dd’„Z6dûd“„Z7�dd•„Z8�dd–„Z9e�dd—„¦   «         Z:e�dd˜„¦   «         Z;e	 �d�dd�„¦   «         Z<�dd „Z=�dd£„Z>�dd¥„Z?�dd¨„Z@dþd©„ZAdþdª„ZBdþd«„ZC�dd®„ZD�dd±„ZE�dd²„ZFedþd³„¦   «         ZG�d�dd´„ZH�dd¶„ZIedþd·„¦   «         ZJeJZKd¸eLd¹<   e	 	 	 	 	 	 	 	 �d�d d¿„¦   «         ZMe	 	 	 �d!�d"dÆ„¦   «         ZNe	 	 	 	 	 �d#�d$dÊ„¦   «         ZOedþdË„¦   «         ZPedþdÌ„¦   «         ZQe�ddÍ„¦   «         ZRe�d%dÏ„¦   «         ZSe	 	 	 �d&�d'dÑ„¦   «         ZT�d(dÔ„ZUe	 �d)�d*d×„¦   «         ZVe�d+dÛ„¦   «         ZWe	 	 	 �d,�d-dã„¦   «         ZXe�d.dä„¦   «         ZYe�d.då„¦   «         ZZe�d/dç„¦   «         Z[�d0dê„Z\e�d1dë„¦   «         Z]e�d2�d3dí„¦   «         Z^e�d4dï„¦   «         Z_e�d5dñ„¦   «         Z`e�d6dó„¦   «         Zae�d7dô„¦   «         Zbe	 	 	 	 	 	 	 	 	 	 �d8�d9dù„¦   «         ZcdS (:  r   z'Defines the MySQL connection interface.NÚ z	127.0.0.1iê  FÚallow_local_infileÚallow_local_infile_in_pathÚconnect_timeoutÚread_timeoutÚwrite_timeoutTÚssl_disabled)-ÚuserÚpasswordÚhostÚportÚdatabaseÚ	password1Ú	password2Ú	password3rW   Ú	collationrY   Úclient_flagsÚcompressÚconsume_resultsÚ
autocommitÚ	time_zoneÚ
conn_attrsÚsql_modeÚinit_commandÚget_warningsÚraise_on_warningsÚbufferedÚrawÚkerberos_auth_modeÚkrb_service_principalÚopenid_token_fileÚwebauthn_callbackr|   r}   Úconverter_classÚconverter_str_fallbackÚconnection_timeoutr   r€   Úunix_socketÚuse_unicodeÚssl_caÚssl_certÚssl_keyÚssl_verify_certÚssl_verify_identityr�   Útls_versionsÚtls_ciphersuitesÚloopr‚   úOptional[str]rƒ   rR   r„   r…   rP   r†   r‡   rˆ   r‰   rW   rŠ   rY   r‹   úOptional[int]rŒ   r]   r�   rŽ   r�   r�   úDict[str, str]r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   ú+Optional[Union[str, Callable[[str], None]]]r›   úOptional[MySQLConverter]rœ   r�   rž   rŸ   úOptional[bool]r    r¡   r¢   r£   r¤   r¥   úOptional[List[str]]r¦   r§   ú#Optional[asyncio.AbstractEventLoop]c       -        óR  — d | _         	 || _        || _        || _        || _        || _        || _        || _        || _        |#| _	        | | _
        |!| _        |"| _        || _        || _        || _        || _        || _        || _        || _        t)          ¦   «         | _        d | _        |	| _        	 |
| _        	 d| _        |*| _        |%| _        |&| _        |'| _        |(| _        |)| _        |+| _         |,| _!        || _"        d | _#        d | _$        |-ptK          j&        ¦   «         | _'        |ptQ          j)        ¦   «         | _*        d | _+        tY          j-        ¦   «         | _.        i | _/        d| _0        g | _1        te          ¦   «         | _3        |pth          | _5        || _6        || _7        || _8        || _9        || _:        || _;        || _<        || _=        || _>        || _?        |$| _@        d| _A        d| _B        d| _C        d | _D        d | _E        || _F        d | _G        |  H                    ¦   «          d S )NF)IÚ!_MySQLConnectionAbstract__charsetÚ_userÚ	_passwordÚ_hostÚ_portÚ	_databaseÚ
_password1Ú
_password2Ú
_password3Ú_unix_socketÚ_connection_timeoutÚ_read_timeoutÚ_write_timeoutÚ_connection_attrsÚ	_compressÚ_consume_resultsÚ_autocommitÚ
_time_zoneÚ	_sql_modeÚ_init_commandrJ   Ú	_protocolÚ_socketÚ_charset_nameÚ_charset_collationÚ_ssl_activeÚ_ssl_disabledÚ_ssl_caÚ	_ssl_certÚ_ssl_keyÚ_ssl_verify_certÚ_ssl_verify_identityÚ_tls_versionsÚ_tls_ciphersuitesÚ_auth_pluginÚ_auth_plugin_classÚ
_handshakeÚasyncioÚget_event_loopÚ_loopr.   Úget_defaultÚ_client_flagsÚ_server_infoÚweakrefÚWeakSetÚ_cursorsÚ_query_attrsÚ_query_attrs_supportedÚ_columns_descrG   Ú_authenticatorr/   Ú_converter_classÚ_converter_str_fallbackÚ_kerberos_auth_modeÚ_krb_service_principalÚ_openid_token_fileÚ_allow_local_infileÚ_allow_local_infile_in_pathÚ_get_warningsr”   Ú	_bufferedÚ_rawÚ_use_unicodeÚ_have_next_resultÚ_unread_resultÚ_in_transactionÚ_oci_config_fileÚ_oci_config_profileÚ_webauthn_callbackÚ	converterÚ_validate_connection_options).rp   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rW   rŠ   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§   s.                                                 rf   Ú__init__z MySQLConnectionAbstract.__init__¡   sH  € ðh -1ˆŒð	ð ˆŒ
Ø&ˆŒØˆŒ
ØˆŒ
Ø&ˆŒØ(ˆŒØ(ˆŒØ(ˆŒØ!,ˆÔØ(:ˆÔ Ø,8ˆÔØ-:ˆÔØ1;ˆÔØ'ˆŒØ&5ˆÔØ!+ˆÔØ)2ˆŒØ(0ˆŒØ,8ˆÔÝ(5©¬ˆŒØIMˆŒØ,3ˆÔØCØ1:ˆÔØ@Ø!&ˆÔØ#/ˆÔØ&,ˆŒØ(0ˆŒØ'.ˆŒØ0?ˆÔØ4GˆÔ!Ø2>ˆÔØ6FˆÔØ+6ˆÔØ15ˆÔØ37ˆŒàÐ,•GÔ*Ñ,Ô,ð 	Œ
ð #/Ð"Jµ*Ô2HÑ2JÔ2JˆÔØ26ˆÔÝ)0¬Ñ):Ô):ˆŒØ;=ˆÔØ+0ˆÔ#Ø46ˆÔÝ2DÑ2FÔ2FˆÔØ6EÐ6WÍˆÔØ-CˆÔ$Ø2DˆÔ Ø5JˆÔ#Ø1BˆÔØ);ˆÔ Ø:TˆÔ(Ø#/ˆÔØ'8ˆÔØ'ˆŒØˆŒ	Ø"-ˆÔØ',ˆÔØ$)ˆÔØ%*ˆÔØ/3ˆÔØ26ˆÔ àð 	Ôð 48ˆŒà×)Ò)Ñ+Ô+Ð+Ð+Ð+rh   r_   c              ƒ  óf   K  — |                       ¦   «         s|                      ¦   «         ƒ d {V —† | S rc   )Úis_socket_connectedÚconnect©rp   s    rf   Ú
__aenter__z"MySQLConnectionAbstract.__aenter__$  s?   è è € Ø×'Ò'Ñ)Ô)ð 	!Ø—,’,‘.”.Ð Ð Ð Ð Ð Ð Ð Øˆrh   Úexc_typeúOptional[Type[BaseException]]Ú	exc_valueúOptional[BaseException]Ú	tracebackúOptional[TracebackType]r`   c              ƒ  ó>   K  — |                       ¦   «         ƒ d {V —† d S rc   ©Úclose©rp   rû   rý   rÿ   s       rf   Ú	__aexit__z!MySQLConnectionAbstract.__aexit__)  ó.   è è € ð �jŠj‰lŒlÐÐÐÐÐÐÐÐÐrh   c                óÄ  — | j         rB	 | j                              ¦   «         | _         n"# t          $ r}t          d¦  «        |‚d}~ww xY w| j        r |                      t
          j        g¦  «         | j        r’t          j	         
                    | j        ¦  «        }|r>t          j	                             |¦  «        rt          j	                             |¦  «        rt          j	                             |¦  «        rt          d¦  «        ‚| j        s| j        r!|                      t
          j        g¦  «         n!|                      t
          j         g¦  «         | j        dk    rt#          d| j        › d�¦  «        ‚| j        rt          j        dk    rd| _        | j        r4| j        d	k    rt#          d
¦  «        ‚| j        dk    rt#          d¦  «        ‚t+          | j        t.          ¦  «        st#          d¦  «        ‚t1          | j        | j        | j        g¦  «        rƒt9          | j        | j        g¦  «        st          d¦  «        ‚| j        du | j        du k    rt          d¦  «        ‚| j        �|                      ¦   «          | j        �|                       ¦   «          t+          | j!        tD          ¦  «        st#          d¦  «        ‚| j!         #                    ¦   «         D ]Ý\  }}|tH          v rŒt+          |tJ          ¦  «        st#          d|› d| j!        › d�¦  «        ‚tM          |¦  «        dk    rt#          d|› d�¦  «        ‚| '                    d¦  «        rt#          d¦  «        ‚t+          |tJ          ¦  «        st#          d|› d|› d�¦  «        ‚tM          |¦  «        dk    rt#          d|› d|› d�¦  «        ‚ŒÞ| j(        t
          j)        z  r|  *                    ¦   «          | j+        rŒt+          | j+        tJ          ¦  «        st#          d¦  «        ‚| j+         ,                    ¦   «         }|dk    r't          j        dk    rt#          d ¦  «        ‚d!| _-        n|d"k    rd#| _-        nt#          d$¦  «        ‚| j.        r”t+          | j.        tJ          ¦  «        s"t#          t_          j0        d%¬&¦  «        ¦  «        ‚| j.        d'k    r"t#          t_          j0        d(¬&¦  «        ¦  «        ‚d)| j.        vr"t#          t_          j0        d*¬&¦  «        ¦  «        ‚| j1        r|  2                    d+| j1        d,¦  «         | j3        r¥t+          | j3        tJ          ¦  «        s"t#          ti          j0        d%¬&¦  «        ¦  «        ‚| j3        d'k    r"t#          ti          j0        d-¬&¦  «        ¦  «        ‚t          j	                             | j3        ¦  «        st#          d.| j3        › d/�¦  «        ‚| j5        �4t+          | j5        t.          ¦  «        r| j5        d0k     rt#          d1¦  «        ‚| j6        �4t+          | j6        t.          ¦  «        r| j6        d0k     rt#          d2¦  «        ‚dS dS )3zValidate connection options.z'user' must be a stringNz.allow_local_infile_in_path must be a directoryÚauthentication_webauthn_clientú'z5' cannot be used as the default authentication pluginrM   TÚmysql_clear_passwordzFClear password authentication is not supported over insecure  channelsÚ$authentication_openid_connect_clientzEOpenID Connect authentication is not supported over insecure channelsz'TCP/IP port number should be an integerz:ssl_key and ssl_cert need to be both specified, or neitherz4ssl_key and ssl_cert need to be both set, or neitherzconn_attrs must be of type dictz+Attribute name should be a string, found: 'z' in 'é    zAttribute name 'z"' exceeds 32 characters limit sizeÚ_zNKey names in connection attributes cannot start with '_', found: '{attr_name}'zAttribute 'z
' value: 'z' must be a string typei   z$' exceeds 1024 characters limit sizez('kerberos_auth_mode' must be of type strÚsspiÚntz6'kerberos_auth_mode=SSPI' is only available on WindowsÚMySQLSSPIKerberosAuthPluginÚgssapiÚMySQLKerberosAuthPluginz@Invalid 'kerberos_auth_mode' mode. Please use 'SSPI' or 'GSSAPI'zis not a string)Úerrorr{   zcan not be an empty stringú/zis incorrectly formattedÚwebauth_callbackrF   zcannot be an empty stringz
The path 'z1' provided via 'openid_token_file' does not existr   z.Option read_timeout must be a positive integerz/Option write_timeout must be a positive integer)7r²   ÚstripÚAttributeErrorr¿   Úset_client_flagsr.   ÚCOMPRESSrè   ÚosÚpathÚabspathÚexistsÚisdirÚislinkrç   ÚLOCAL_FILESrÒ   r2   rº   ÚnamerÊ   Ú
isinstancerµ   rP   ÚanyrË   rÌ   rÍ   ÚallrÐ   Ú_validate_tls_versionsrÑ   Ú_validate_tls_ciphersuitesr¾   ÚdictÚitemsr'   rR   ÚlenÚ
startswithrÙ   ÚCONNECT_ARGSÚ_add_default_conn_attrsrä   ÚlowerrÓ   rå   r    Úformatrò   Ú_validate_callableræ   r"   r¼   r½   )rp   ÚerrÚinfile_in_pathÚ	attr_nameÚ
attr_valuer—   s         rf   rô   z4MySQLConnectionAbstract._validate_connection_options1  sv  € àŒ:ð 	IðIØ!œZ×-Ò-Ñ/Ô/�”
�
øÝ!ð Ið Ið IÝ$Ð%>Ñ?Ô?ÀSÐHøøøøðIøøøð Œ>ð 	9Ø×!Ò!¥:Ô#6Ð"7Ñ8Ô8Ð8àÔ+ð 	WÝœWŸ_š_¨TÔ-MÑNÔNˆNàðWå”G—N’N >Ñ2Ô2ðWõ œŸš nÑ5Ô5ðWõ ”7—>’> .Ñ1Ô1ð	Wõ %Ð%UÑVÔVÐVØÔ#ð 	= tÔ'Gð 	=Ø×!Ò!¥:Ô#9Ð":Ñ;Ô;Ð;Ð;à×!Ò!¥JÔ$:Ð#:Ð";Ñ<Ô<Ð<ð ÔÐ @Ò@Ð@Ý ð�DÔ%ð ð ð ñô ð ð Ôð 	&¥¤¨GÒ!3Ð!3Ø!%ˆDÔàÔð 		ØÔ Ð$:Ò:Ð:Ý$ð ñô ð ð Ô Ð$JÒJÐJÝ$Ø[ñô ð õ ˜$œ*¥cÑ*Ô*ð 	LÝ Ð!JÑKÔKÐKå�”˜dœn¨d¬mÐ<Ñ=Ô=ð 	2å˜œ t¤~Ð6Ñ7Ô7ð Ý$ØPñô ð ð ” Ð%¨4¬>¸TÐ+AÒBÐBÝ$ØJñô ð ð Ô!Ð-Ø×+Ò+Ñ-Ô-Ð-àÔ%Ð1Ø×/Ò/Ñ1Ô1Ð1å˜$Ô0µ$Ñ7Ô7ð 	DÝ Ð!BÑCÔCÐCà%)Ô%;×%AÒ%AÑ%CÔ%Cð 	ð 	Ñ!ˆI�zØ�MÐ)Ð)Øå˜i­Ñ-Ô-ð Ý$ðCØ!ðCð CØ)-Ô)?ðCð Cð Cñô ð õ
 �9‰~Œ~ Ò"Ð"Ý$ØT yÐTÐTÐTñô ð ð ×#Ò# CÑ(Ô(ð Ý$ð0ñô ð õ
 ˜j­#Ñ.Ô.ð Ý$ð' )ð 'ð '°zð 'ð 'ð 'ñô ð õ
 �:‰Œ Ò%Ð%Ý$ð9 )ð 9ð 9°zð 9ð 9ð 9ñô ð ð &ð Ô¥
Ô 7Ñ7ð 	+Ø×(Ò(Ñ*Ô*Ð*àÔ#ð 	Ý˜dÔ6½Ñ<Ô<ð QÝ$Ð%OÑPÔPÐPØ!%Ô!9×!?Ò!?Ñ!AÔ!AÐØ! VÒ+Ð+Ý”7˜d’?�?Ý(ØPñô ð ð +H�Ô'Ð'Ø# xÒ/Ð/Ø*C�Ô'Ð'å$ØVñô ð ð Ô&ð 	Ý˜dÔ9½3Ñ?Ô?ð Ý$Ý/Ô6Ð=NÐOÑOÔOñô ð ð Ô*¨bÒ0Ð0Ý$Ý/Ô6Ø:ðñ ô ñô ð ð
 ˜$Ô5Ð5Ð5Ý$Ý/Ô6Ð=WÐXÑXÔXñô ð ð Ô"ð 	TØ×#Ò#Ð$6¸Ô8OÐQRÑSÔSÐSàÔ"ð 	Ý˜dÔ5µsÑ;Ô;ð Ý$Ý+Ô2Ð9JÐKÑKÔKñô ð ð Ô&¨"Ò,Ð,Ý$Ý+Ô2Ð9TÐUÑUÔUñô ð õ ”7—>’> $Ô"9Ñ:Ô:ð Ý$ð% Ô!8ð %ð %ð %ñô ð ð ÔÐ)Ý˜dÔ0µ#Ñ6Ô6ð W¸$Ô:LÈqÒ:PÐ:PÝ$Ð%UÑVÔVÐVØÔÐ*Ý˜dÔ1µ3Ñ7Ô7ð X¸4Ô;NÐQRÒ;RÐ;RÝ$Ð%VÑWÔWÐWð +Ð*Ø;RÐ;Rs   ‰( ¨
A²AÁAc                ó  — g }| j         }t          |t          ¦  «        r®|                     d¦  «        r|                     d¦  «        st          d|› d�¦  «        ‚|dd…                              d¦  «        }|st          d¦  «        ‚|D ]?}|                     ¦   «                              ¦   «         }|r| 	                    |¦  «         Œ@n<t          |t          t          f¦  «        rd	„ |D ¦   «         }nt          d
|› d�¦  «        ‚| j        €t          dd…         n| j        dd…         }|                     d¬¦  «         |d         }g g g}i }g }	t          dt          j        |¦  «        dz   …         D ]B}
|                     t"          |
         ¦  «         |	                     t&          |
         ¦  «         ŒC|D ]é}d|v rK||	v rG|t&          d         v r|d          	                    |¦  «         Œ5|d          	                    |¦  «         ŒQ||v r‚||         }||v r#t          t)          j        d|¬¦  «        ¦  «        ‚|t"          d         v r"|d          	                    ||         ¦  «         Œµ|d          	                    ||         ¦  «         Œ×t          d|› d�¦  «        ‚|d         s|d         st          d¦  «        ‚|d         D ]6}|t,          d                              ¦   «         v rt1          d|› d�¦  «        ‚Œ7|d         D ]6}|t,          d                              ¦   «         v rt1          d|› d�¦  «        ‚Œ7d                     |d         ¦  «        d                     |d         ¦  «        g| _         dS )z&Validates the tls_ciphersuites option.ú[ú]z)tls_ciphersuites must be a list, found: 'r	  rF   éÿÿÿÿú,z6No valid cipher suite found in 'tls_ciphersuites' listc                ó   — g | ]}|¯|‘ŒS ry   ry   )rd   Útls_css     rf   ú
<listcomp>zFMySQLConnectionAbstract._validate_tls_ciphersuites.<locals>.<listcomp>é  s   € ÐFÐFÐF¨6¸vÐF ÐFÐFÐFrh   zItls_ciphersuites should be a list with one or more ciphersuites. Found: 'NT)Úreverser   ú-úTLSv1.3r¦   ©ÚlistÚvaluezThe value 'z1' in tls_ciphersuites is not a valid cipher suitez:No valid cipher suite found in the 'tls_ciphersuites' listzTLSv1.2zCipher z( when used with TLSv1.2 is unacceptable.z( when used with TLSv1.3 is unacceptable.ú:)rÑ   r"  rR   r*  Úendswithr  Úsplitr  ÚupperÚappendr@  ÚsetrÐ   r-   ÚsortÚindexÚupdater,   Úextendr+   r   r.  r6   Úvaluesr4   Újoin)rp   r¦   r:  Útls_cssÚ_tls_csr¥   Únewer_tls_verÚtranslated_namesÚiani_cipher_suites_namesÚossl_cipher_suites_namesÚtls_verr!  Útranslated_nameÚcipher_as_ossls                 rf   r&  z2MySQLConnectionAbstract._validate_tls_ciphersuitesÔ  sm  € àÐØÔ'ˆå�f�cÑ"Ô"ð 	Ø×%Ò% cÑ*Ô*ð ¨v¯ª¸sÑ/CÔ/Cð Ý$ØIÀÐIÐIÐIñô ð ð ˜Q˜r˜T”l×(Ò(¨Ñ-Ô-ˆGØð Ý$ØLñô ð ð #ð 5ð 5�Ø Ÿ,š,™.œ.×.Ò.Ñ0Ô0�Øð 5Ø$×+Ò+¨GÑ4Ô4Ð4øð5õ
 ˜¥¥s Ñ,Ô,ð 	ØFÐF°VÐFÑFÔFÐÐå ð3Ø)/ð3ð 3ð 3ñô ð ð  $Ô1Ð9�L˜˜˜ŒOˆO¸tÔ?QÐRSÐRSÐRSÔ?Tð 	ð 	×Ò $ÐÑ'Ô'Ð'Ø$ Qœˆð .0°¨HÐØ#%Ð Ø.0Ð õ $Ð$K¥lÔ&8¸Ñ&GÔ&GÈ!Ñ&KÐ$KÔLð 	Gð 	GˆGØ$×+Ò+Õ,=¸gÔ,FÑGÔGÐGØ$×+Ò+Õ,<¸WÔ,EÑFÔFÐFÐFà$ð 	ð 	ˆDØ�dˆ{ˆ{˜tÐ'?Ð?Ð?ØÕ+¨IÔ6Ð6Ð6Ø$ QÔ'×.Ò.¨tÑ4Ô4Ð4Ð4à$ QÔ'×.Ò.¨tÑ4Ô4Ð4Ð4ØÐ1Ð1Ð1Ø":¸4Ô"@�Ø"Ð&6Ð6Ð6Ý(Ý0Ô7Ø!3¸?ðñ ô ñô ð ð
 Õ,¨YÔ7Ð7Ð7Ø$ QÔ'×.Ò.Ð/GÈÔ/MÑNÔNÐNÐNà$ QÔ'×.Ò.Ð/GÈÔ/MÑNÔNÐNÐNå$ð# $ð #ð #ð #ñô ð ð   Ô"ð 	Ð+;¸AÔ+>ð 	Ý ØLñô ð ð
 /¨qÔ1ð 	ð 	ˆNØÕ!>¸yÔ!I×!PÒ!PÑ!RÔ!RÐRÐRÝ'ØV˜nÐVÐVÐVñô ð ð Sð /¨qÔ1ð 	ð 	ˆNØÕ!>¸yÔ!I×!PÒ!PÑ!RÔ!RÐRÐRÝ'ØV˜nÐVÐVÐVñô ð ð Sð �HŠHÐ% aÔ(Ñ)Ô)Ø�HŠHÐ% aÔ(Ñ)Ô)ð"
ˆÔÐÐrh   c                ó¦  — g }| j         }t          |t          ¦  «        rì|                     d¦  «        r|                     d¦  «        st          d|› d�¦  «        ‚|dd…                              d¦  «        }|D ]Y}|                     ¦   «         }|dk    rŒ||v r#t          t          j	        d	|¬
¦  «        ¦  «        ‚| 
                    |¦  «         ŒZ|dgk    r.t          s't          t          j	        |t          ¦  «        ¦  «        ‚nÆt          |t          ¦  «        rS|st          d¦  «        ‚|D ]>}||v r#t          t          j	        d	|¬
¦  «        ¦  «        ‚| 
                    |¦  «         Œ?n^t          |t          ¦  «        r|D ]}| 
                    |¦  «         Œn.t          dd                     t          ¦  «        › d|› d�¦  «        ‚|st          d¦  «        ‚g }g }g }|D ]T}|t          v r| 
                    |¦  «         |t"          v r| 
                    |¦  «         Œ?| 
                    |¦  «         ŒU|r>|dgk    r.t          s't%          t          j	        |t          ¦  «        ¦  «        ‚|| _         dS |r't%          t'          j	        |t          ¦  «        ¦  «        ‚|r't          t)          j	        |t          ¦  «        ¦  «        ‚dS )z"Validates the tls_versions option.r5  r6  z%tls_versions must be a list, found: 'r	  rF   r7  r8  r{   r¥   r?  r>  zJAt least one TLS protocol version must be specified in 'tls_versions' listz>tls_versions should be a list with one or more of versions in z, z
. found: 'zdAt least one TLS protocol version must be specified in 'tls_versions' list when this option is givenN)rÐ   r"  rR   r*  rC  r  rD  r  r   r.  rF  r#   r$   r-   r@  rG  rM  r7   r4   r&   r%   )rp   r¥   Útls_versionÚtls_versrT  Úuse_tls_versionsÚunacceptable_tls_versionsÚinvalid_tls_versionss           rf   r%  z.MySQLConnectionAbstract._validate_tls_versions1  s«  € àˆØÔ(ˆå�k¥3Ñ'Ô'ð *	Ø×*Ò*¨3Ñ/Ô/ð °K×4HÒ4HÈÑ4MÔ4Mð Ý$ØJ¸KÐJÐJÐJñô ð ð # 1 R 4Ô(×.Ò.¨sÑ3Ô3ˆHØ#ð 
1ð 
1�Ø%Ÿmšm™oœo�Ø "Ò$Ð$ØØ ,Ð.Ð.Ý(Ý0Ô7Ø!/°{ðñ ô ñô ð ð
 ×#Ò# KÑ0Ô0Ð0Ð0Ø˜I˜;Ò&Ð&Õ/AÐ&Ý$Ý(Ô/°½\ÑJÔJñô ð øõ ˜¥TÑ*Ô*ð 	Øð Ý$ð*ñô ð ð 'ð -ð -�Ø˜lÐ*Ð*Ý(Ý0Ô7Ø!/°wðñ ô ñô ð ð
 ×#Ò# GÑ,Ô,Ð,Ð,ð-õ ˜¥SÑ)Ô)ð 	Ø&ð -ð -�Ø×#Ò# GÑ,Ô,Ð,Ð,ð-õ !ðIØ—i’i¥Ñ-Ô-ðIð IØ9EðIð Ið Iñô ð ð
 ð 	Ý ðCñô ð ð
 ÐØ$&Ð!Ø!ÐØ#ð 	5ð 	5ˆGØ�,Ð&Ð&Ø ×'Ò'¨Ñ0Ô0Ð0ØÕ3Ð3Ð3Ø)×0Ò0°Ñ9Ô9Ð9Ð9à$×+Ò+¨GÑ4Ô4Ð4Ð4àð 	RØ I ;Ò.Ð.Õ7IÐ.Ý'Ý(Ô/°½\ÑJÔJñô ð ð "2ˆDÔÐÐØ&ð 	RÝ#Ý.Ô5Ø-­|ñô ñô ð ð
 "ð 	RÝ Õ!2Ô!9¸'Å<Ñ!PÔ!PÑQÔQÐQð	Rð 	Rrh   r   Úoption_nameÚcallbackúUnion[str, Callable]Únum_argsc                óZ  — t          |t          ¦  «        r4	 t          |¦  «        }n## t          $ r}t	          |› ¦  «        |‚d}~ww xY wt          |¦  «        st	          d| › d�¦  «        ‚t          t          |¦  «        j        ¦  «        }||k    rt	          d| › d|› d|› �¦  «        ‚dS )aø  Validates if it's a Python callable.

         Args:
             option_name (str): Connection option name.
             callback (str or callable): The fully qualified path to the callable or
                                         a callable.
             num_args (int): Number of positional arguments allowed.

        Raises:
             ProgrammingError: If `callback` is not valid or wrong number of positional
                               arguments.

        .. versionadded:: 8.2.0
        NzExpected a callable for 'r	  z' requires z4 positional argument, but the callback provided has )	r"  rR   rE   Ú
ValueErrorr5   Úcallabler)  r   Ú
parameters)r]  r^  r`  r0  Ú
num_paramss        rf   r/  z*MySQLConnectionAbstract._validate_callable‚  sñ   € õ$ �h¥Ñ$Ô$ð 	:ð:Ý(¨Ñ2Ô2��øÝð :ð :ð :Ý&¨# xÑ0Ô0°cÐ9øøøøð:øøøõ ˜Ñ!Ô!ð 	OÝ"Ð#M¸{Ð#MÐ#MÐ#MÑNÔNÐNõ � 8Ñ,Ô,Ô7Ñ8Ô8ˆ
Ø˜Ò!Ð!Ý"ð6�Kð 6ð 6¨Hð 6ð 6Ø)3ð6ð 6ñô ð ð "Ð!s   —' §
A±AÁAc                ó   — dS )zMySQL connection ID.Nry   rù   s    rf   Úconnection_idz%MySQLConnectionAbstract.connection_id¥  ó   € € € rh   c                ó   — | j         S )z$User used while connecting to MySQL.)r²   rù   s    rf   r‚   zMySQLConnectionAbstract.userª  ó   € ð ŒzÐrh   c                ó   — | j         S )z MySQL server IP address or name.)r´   rù   s    rf   Úserver_hostz#MySQLConnectionAbstract.server_host¯  rj  rh   c                ó   — | j         S )zMySQL server TCP/IP port.)rµ   rù   s    rf   Úserver_portz#MySQLConnectionAbstract.server_port´  rj  rh   c                ó   — | j         S )z MySQL Unix socket file location.)rº   rù   s    rf   rž   z#MySQLConnectionAbstract.unix_socket¹  s   € ð Ô Ð rh   c                ó    — t          d¦  «        ‚)úGet the current database.zoThe use of async properties are not supported by Python. Use `await get_database()` to get the database instead©r5   rù   s    rf   r†   z MySQLConnectionAbstract.database¾  s   € õ ðEñ
ô 
ð 	
rh   rA  c                ó    — t          d¦  «        ‚)úSet the current database.zsThe use of async properties are not supported by Python. Use `await set_database(name)` to set the database insteadrr  ©rp   rA  s     rf   r†   z MySQLConnectionAbstract.databaseÆ  ó   € õ ðIñ
ô 
ð 	
rh   c                ó   — | j         S )a¸  
        Gets the connection context's timeout in seconds for each attempt
        to read any data from the server.

        `read_timeout` is number of seconds upto which the connector should wait
        for the server to reply back before raising an ReadTimeoutError. We can set
        this option to None, which would signal the connector to wait indefinitely
        till the read operation is completed or stopped abruptly.
        ©r¼   rù   s    rf   r   z$MySQLConnectionAbstract.read_timeoutÎ  ó   € ð Ô!Ð!rh   Útimeoutc                ól   — |�*t          |t          ¦  «        r|dk     rt          d¦  «        ‚|| _        dS )aß  
        Sets or updates the connection context's timeout in seconds for each attempt
        to read any data from the server.

        `read_timeout` is number of seconds upto which the connector should wait
        for the server to reply back before raising an ReadTimeoutError. We can set
        this option to None, which would signal the connector to wait indefinitely
        till the read operation is completed or stopped abruptly.

        Args:
            timeout: Accepts a non-negative integer which is the timeout to be set
                     in seconds or None.
        Raises:
            InterfaceError: If a positive integer or None is not passed via the
                            timeout parameter.
        Examples:
            The following will set the read_timeout of the current session to
            5 seconds:
            ```
            >>> cnx = await mysql.connector.aio.connect(user='scott')
            >>> cnx.read_timeout = 5
            ```
        Nr   ú6Option read_timeout must be a positive integer or None©r"  rP   r2   r¼   ©rp   rz  s     rf   r   z$MySQLConnectionAbstract.read_timeoutÛ  sI   € ð2 ÐÝ˜g¥sÑ+Ô+ð ¨w¸ª{¨{Ý$ØLñô ð ð %ˆÔÐÐrh   c                ó   — | j         S )a°  
        Gets the connection context's timeout in seconds for each attempt
        to send data to the server.

        `write_timeout` is number of seconds upto which the connector should spend to
        write to the server before raising an WriteTimeoutError. We can set this option
        to None, which would signal the connector to wait indefinitely till the write
        operation is completed or stopped abruptly.
        ©r½   rù   s    rf   r€   z%MySQLConnectionAbstract.write_timeoutû  ó   € ð Ô"Ð"rh   c                ól   — |�*t          |t          ¦  «        r|dk     rt          d¦  «        ‚|| _        dS )aÕ  
        Sets or updates the connection context's timeout in seconds for each attempt
        to send data to the server.

        `write_timeout` is number of seconds upto which the connector should spend to
        write to the server before raising an WriteTimeoutError. We can set this option
        to None, which would signal the connector to wait indefinitely till the write
        operation is completed or stopped abruptly.

        Args:
            timeout: Accepts a non-negative integer which is the timeout to be set in
                     seconds or None.
        Raises:
            InterfaceError: If a positive integer or None is not passed via the
                            timeout parameter.
        Examples:
            The following will set the write_timeout of the current
            session to 5 seconds:
            ```
            >>> cnx = await mysql.connector.connect(user='scott')
            >>> cnx.write_timeout = 5
            ```
        Nr   ú7Option write_timeout must be a positive integer or None©r"  rP   r2   r½   r~  s     rf   r€   z%MySQLConnectionAbstract.write_timeout  sI   € ð2 ÐÝ˜g¥sÑ+Ô+ð ¨w¸ª{¨{Ý$ØMñô ð ð &ˆÔÐÐrh   c              ƒ  óL   K  — |                       d¦  «        ƒ d{V —†}|d         S )rq  zSELECT DATABASE()Nr   ©Ú
info_query)rp   Úresults     rf   Úget_databasez$MySQLConnectionAbstract.get_database(  s4   è è € à—’Ð':Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;ˆØ�aŒyÐrh   c              ƒ  óF   K  — |                       d|› �¦  «        ƒ d{V —† dS )rt  zUSE N)Ú	cmd_queryru  s     rf   Úset_databasez$MySQLConnectionAbstract.set_database-  s6   è è € à�nŠn˜^ E˜^˜^Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,rh   c                ó   — | j         S )z"Returns whether to consume results)rÀ   rù   s    rf   Úcan_consume_resultsz+MySQLConnectionAbstract.can_consume_results1  s   € ð Ô$Ð$rh   c                óB   — t          |t          ¦  «        sJ ‚|| _        dS )zSet if can consume results.N)r"  r]   rÀ   ru  s     rf   rŽ  z+MySQLConnectionAbstract.can_consume_results6  s(   € õ ˜%¥Ñ&Ô&Ð&Ð&Ð&Ø %ˆÔÐÐrh   c                ó   — | j         S )z(MySQL session has started a transaction.)rï   rù   s    rf   Úin_transactionz&MySQLConnectionAbstract.in_transaction<  s   € ð Ô#Ð#rh   úasyncio.AbstractEventLoopc                ó   — | j         S )zReturn the event loop.)r×   rù   s    rf   r§   zMySQLConnectionAbstract.loopA  rj  rh   c                ó0   — | j         p| j        duot          S )z&Return True if is a secure connection.N)rÉ   rº   ÚIS_POSIXrù   s    rf   Ú	is_securez!MySQLConnectionAbstract.is_secureF  s   € ð ÔÐO DÔ$5¸TÐ$AÐ$NÅhÐOrh   ú$List[Tuple[str, BinaryProtocolType]]c                óN   — t          | j                             ¦   «         ¦  «        S )zReturns query attributes list.)r@  rÞ   r(  rù   s    rf   Úquery_attrsz#MySQLConnectionAbstract.query_attrsK  s!   € õ �DÔ%×+Ò+Ñ-Ô-Ñ.Ô.Ð.rh   c                ó   — | j         S )zReturn if have next result.)rí   rù   s    rf   Úhave_next_resultz(MySQLConnectionAbstract.have_next_resultP  s   € ð Ô%Ð%rh   c                ó    — t          d¦  «        ‚)ú$Get whether autocommit is on or off.zsThe use of async properties are not supported by Python. Use `await get_autocommit()` to get the autocommit insteadrr  rù   s    rf   rŽ   z"MySQLConnectionAbstract.autocommitU  rv  rh   c                ó    — t          d¦  «        ‚)úToggle autocommit.zxThe use of async properties are not supported by Python. Use `await set_autocommit(value)` to set the autocommit insteadrr  ru  s     rf   rŽ   z"MySQLConnectionAbstract.autocommit]  ó   € õ ðNñ
ô 
ð 	
rh   c              ƒ  óT   K  — |                       d¦  «        ƒ d{V —†}|d         dk    S )r�  zSELECT @@session.autocommitNr   rF   r†  ru  s     rf   Úget_autocommitz&MySQLConnectionAbstract.get_autocommite  s8   è è € à—o’oÐ&CÑDÔDÐDÐDÐDÐDÐDÐDˆØ�QŒx˜1Š}Ðrh   c              ƒ  ó`   K  — |rdnd}|                       d|› �¦  «        ƒ d{V —† || _        dS )rŸ  ÚONÚOFFzSET @@session.autocommit = N)r‹  rÁ   )rp   rA  Úswitchs      rf   Úset_autocommitz&MySQLConnectionAbstract.set_autocommitj  sO   è è € àÐ)�� EˆØ�nŠnÐC¸6ÐCÐCÑDÔDÐDÐDÐDÐDÐDÐDÐDØ ˆÔÐÐrh   c                ó    — t          d¦  «        ‚)úGets the current time zone.zqThe use of async properties are not supported by Python. Use `await get_time_zone()` to get the time zone insteadrr  rù   s    rf   r�   z!MySQLConnectionAbstract.time_zonep  s   € õ ðGñ
ô 
ð 	
rh   c                ó    — t          d¦  «        ‚)úSets the time zone.zxThe use of async properties are not supported by Python. Use `await get_autocommit(value)` to get the autocommit insteadrr  ru  s     rf   r�   z!MySQLConnectionAbstract.time_zonex  r   rh   c              ƒ  óL   K  — |                       d¦  «        ƒ d{V —†}|d         S )r©  zSELECT @@session.time_zoneNr   r†  ru  s     rf   Úget_time_zonez%MySQLConnectionAbstract.get_time_zone€  s3   è è € à—o’oÐ&BÑCÔCÐCÐCÐCÐCÐCÐCˆØ�QŒxˆrh   c              ƒ  óV   K  — |                       d|› d�¦  «        ƒ d{V —† || _        dS )r«  zSET @@session.time_zone = 'r	  N)r‹  rÂ   ru  s     rf   Úset_time_zonez%MySQLConnectionAbstract.set_time_zone…  sA   è è € à�nŠnÐC¸5ÐCÐCÐCÑDÔDÐDÐDÐDÐDÐDÐDÐDØˆŒˆˆrh   c              ƒ  ó$   K  — t          d¦  «        ‚)úGets the SQL mode.zoThe use of async properties are not supported by Python. Use `await get_sql_mode()` to get the SQL mode insteadrr  rù   s    rf   r‘   z MySQLConnectionAbstract.sql_modeŠ  s    è è € õ ðEñ
ô 
ð 	
rh   úUnion[str, Sequence[int]]c              ƒ  ó$   K  — t          d¦  «        ‚)á³  Sets the SQL mode.

        This method sets the SQL Mode for the current connection. The value
        argument can be either a string with comma separate mode names, or
        a sequence of mode names.

        It is good practice to use the constants class `SQLMode`:
        ```
        >>> from mysql.connector.constants import SQLMode
        >>> cnx.sql_mode = [SQLMode.NO_ZERO_DATE, SQLMode.REAL_AS_FLOAT]
        ```
        ztThe use of async properties are not supported by Python. Use `await set_sql_mode(value)` to set the SQL mode insteadrr  ru  s     rf   r‘   z MySQLConnectionAbstract.sql_mode’  s    è è € õ ðJñ
ô 
ð 	
rh   c              ƒ  ón   K  — | j         €&|                      d¦  «        ƒ d{V —†d         | _         | j         S )r±  NzSELECT @@session.sql_moder   )rÃ   r‡  rù   s    rf   Úget_sql_modez$MySQLConnectionAbstract.get_sql_mode¥  sB   è è € àŒ>Ð!Ø$(§O¢OÐ4OÑ$PÔ$PÐPÐPÐPÐPÐPÐPÐRSÔTˆDŒNØŒ~Ðrh   c              ƒ  ó¸   K  — t          |t          t          f¦  «        rd                     |¦  «        }|                      d|› d�¦  «        ƒ d{V —† || _        dS )r´  r8  zSET @@session.sql_mode = 'r	  N)r"  r@  rn   rM  r‹  rÃ   ru  s     rf   Úset_sql_modez$MySQLConnectionAbstract.set_sql_mode«  sh   è è € õ �e�d¥E˜]Ñ+Ô+ð 	$Ø—H’H˜U‘O”OˆEØ�nŠnÐB¸%ÐBÐBÐBÑCÔCÐCÐCÐCÐCÐCÐCÐCØˆŒˆˆrh   c                ó   — | j         S )z�Get whether this connection retrieves warnings automatically.

        This method returns whether this connection retrieves warnings automatically.
        )ré   rù   s    rf   r“   z$MySQLConnectionAbstract.get_warnings½  s   € ð Ô!Ð!rh   c                ó\   — t          |t          ¦  «        st          d¦  «        ‚|| _        dS )a  Set whether warnings should be automatically retrieved.

        The toggle-argument must be a boolean. When True, cursors for this connection
        will retrieve information about warnings (if any).

        Raises:
            ValueError: When the value is not a bool type.
        úExpected a boolean typeN)r"  r]   rb  ré   ru  s     rf   r“   z$MySQLConnectionAbstract.get_warningsÅ  s3   € õ ˜%¥Ñ&Ô&ð 	8ÝÐ6Ñ7Ô7Ð7Ø"ˆÔÐÐrh   c                ó   — | j         S )z­Get whether this connection raises an error on warnings.

        This method returns whether this connection will raise errors when MySQL
        reports warnings.
        )Ú_raise_on_warningsrù   s    rf   r”   z)MySQLConnectionAbstract.raise_on_warningsÓ  s   € ð Ô&Ð&rh   c                ór   — t          |t          ¦  «        st          d¦  «        ‚|| _        |r	|| _        dS dS )aÄ  Set whether warnings raise an error.

        The toggle-argument must be a boolean. When True, cursors for this connection
        will raise an error when MySQL reports warnings.

        Raising on warnings implies retrieving warnings automatically.
        In other words: warnings will be set to True. If set to False, warnings will
        be also set to False.

        Raises:
            ValueError: When the value is not a bool type.
        r»  N)r"  r]   rb  r½  ré   ru  s     rf   r”   z)MySQLConnectionAbstract.raise_on_warningsÜ  sM   € õ ˜%¥Ñ&Ô&ð 	8ÝÐ6Ñ7Ô7Ð7Ø"'ˆÔàð 	'Ø!&ˆDÔÐÐð	'ð 	'rh   c                ó   — | j         S )z§Get whether there is an unread result.

        This method is used by cursors to check whether another cursor still needs to
        retrieve its result set.
        )rî   rù   s    rf   Úunread_resultz%MySQLConnectionAbstract.unread_resultñ  ó   € ð Ô"Ð"rh   c                ó\   — t          |t          ¦  «        st          d¦  «        ‚|| _        dS )zýSet whether there is an unread result.

        This method is used by cursors to let other cursors know there is still a
        result set that needs to be retrieved.

        Raises:
            ValueError: When the value is not a bool type.
        r»  N)r"  r]   rb  rî   ru  s     rf   rÀ  z%MySQLConnectionAbstract.unread_resultú  s3   € õ ˜%¥Ñ&Ô&ð 	8ÝÐ6Ñ7Ô7Ð7Ø#ˆÔÐÐrh   c                ó   — | j         j        S )a   Returns the collation for current connection.

        This property returns the collation name of the current connection.
        The server is queried when the connection is active. If not connected,
        the configured collation name is returned.

        Returns a string.
        )Ú_charsetrŠ   rù   s    rf   rŠ   z!MySQLConnectionAbstract.collation  s   € ð Œ}Ô&Ð&rh   c                ó   — | j         j        S )a  Return the character set for current connection.

        This property returns the character set name of the current connection.
        The server is queried when the connection is active.
        If not connected, the configured character set name is returned.
        ©rÄ  r!  rù   s    rf   rW   zMySQLConnectionAbstract.charset  s   € ð Œ}Ô!Ð!rh   c                ó   — | j         j        S )z�The charset ID utilized during the connection phase.

        If the charset ID hasn't been set, the default charset ID is returned.
        )rÄ  Ú
charset_idrù   s    rf   rÈ  z"MySQLConnectionAbstract.charset_id  s   € ð Œ}Ô'Ð'rh   rH   c                óÈ   — | j         €U| j        €t          j        t          ¦  «        S t          j        | j        j        dk     rt          nt          ¦  «        | _         | j         S )úBThe charset object encapsulates charset and collation information.N)é   r   )r±   rÚ   rI   Ú	get_by_idr)   rU   r*   rù   s    rf   rÄ  z MySQLConnectionAbstract._charset&  se   € ð Œ>Ð!ØÔ Ð(õ
  Ô)Õ*EÑFÔFÐFå%Ô/ð Ô(Ô6¸Ò?Ð?õ 0Ð/å4ñ	ô ˆDŒNð Œ~Ðrh   c                ó   — || _         dS )rÊ  N)r±   ru  s     rf   rÄ  z MySQLConnectionAbstract._charset:  s   € ð ˆŒˆˆrh   c                óH   — | j         �| j         j        dv rdS | j         j        S )a^  Return the Python character set for current connection.

        This property returns the character set name of the current connection.
        Note that, unlike property charset, this checks if the previously set
        character set is supported by Python and if not, it returns the equivalent
        character set that Python supports.
        N)Úutf8mb4Úutf8mb3ÚbinaryÚutf8rÆ  rù   s    rf   Úpython_charsetz&MySQLConnectionAbstract.python_charset?  s4   € ð Œ=Ð  D¤MÔ$6ð ;
ð %
ð %
ð
 �6ØŒ}Ô!Ð!rh   c                ó   — dS )z&Add the default connection attributes.Nry   rù   s    rf   r,  z/MySQLConnectionAbstract._add_default_conn_attrsP  rh  rh   Úqueryr?   c              ƒ  ó
   K  — dS )zìExecute a query.

        This method simply calls cmd_query() after checking for unread result. If there
        are still unread result, an InterfaceError is raised. Otherwise whatever
        cmd_query() returns is returned.
        Nry   )rp   rÕ  s     rf   Ú_execute_queryz&MySQLConnectionAbstract._execute_queryT  ó
   è è € € € rh   c              ƒ  ó„  K  — |                       | j        j        ¬¦  «        ƒ d{V —† |                      | j        ¦  «        ƒ d{V —† | j        r |                      | j        ¦  «        ƒ d{V —† | j        r |                      | j        ¦  «        ƒ d{V —† | j	        r"|  
                    | j	        ¦  «        ƒ d{V —† dS dS )zøExecutes commands after connection has been established.

        This method executes commands after the connection has been established.
        Some setting like autocommit, character set, and SQL mode are set using this
        method.
        )rW   N)Úset_charset_collationrÄ  rÈ  r§  rÁ   rÂ   r¯  rÃ   r¸  rÄ   r×  rù   s    rf   Ú_post_connectionz(MySQLConnectionAbstract._post_connection]  s  è è € ð ×(Ò(°´Ô1IÐ(ÑJÔJÐJÐJÐJÐJÐJÐJÐJØ×!Ò! $Ô"2Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØŒ?ð 	6Ø×$Ò$ T¤_Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØŒ>ð 	4Ø×#Ò# D¤NÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØÔð 	:Ø×%Ò% dÔ&8Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð	:ð 	:rh   úOptional[Union[int, str]]c              ƒ  óÆ  K  — d}t          |t          t          f¦  «        s$|�"t          |                     d¦  «        ¦  «        ‚t          |t          ¦  «        s|�t          d¦  «        ‚|rM|rKt          |t          ¦  «        rt          j        |¦  «        j        n|}t          j        ||¦  «        | _	        nÄ|r€t          |t          ¦  «        rt          j        |¦  «        | _	        n“t          |t          ¦  «        rt          j
        |¦  «        | _	        ndt          |                     d¦  «        ¦  «        ‚|rt          j        |¦  «        | _	        n&t          d         }t          j
        |¦  «        | _	        |                      d| j	        j        › d| j	        j        › d�¦  «        ƒ d{V —† | j        r&| j                             | j	        j        ¦  «         dS dS )aè  Set the character set and collation for the current connection.

        This method sets the character set and collation to be used for the current
        connection. The charset argument can be either the name of a character set as
        a string, or the numerical equivalent as defined in constants.CharacterSet.

        When the collation is not given, the default will be looked up and used.

        Args:
            charset: Can be either the name of a character set, or the numerical
                     equivalent as defined in `constants.CharacterSet`.
            collation: When collation is `None`, the default collation for the
                       character set is used.

        Examples:
            The following will set the collation for the latin1 character set to
            `latin1_general_ci`:
            ```
            >>> cnx = mysql.connector.connect(user='scott')
            >>> cnx.set_charset_collation('latin1', 'latin1_general_ci')
            ```
        z+{} should be either integer, string or NoneNrW   z)collation should be either string or NonezSET NAMES 'z' COLLATE 'r	  )r"  rP   rR   rb  r.  rI   rÌ  r!  Úget_by_name_and_collationrÄ  Úget_by_nameÚget_by_collationr(   r‹  rŠ   ró   Úset_charset)rp   rW   rŠ   Úerr_msgÚcharset_strs        rf   rÚ  z-MySQLConnectionAbstract.set_charset_collationm  sñ  è è € ð2 @ˆÝ˜'¥C­ :Ñ.Ô.ð 	8°7Ð3FÝ˜WŸ^š^¨IÑ6Ô6Ñ7Ô7Ð7Ý˜)¥SÑ)Ô)ð 	J¨iÐ.CÝÐHÑIÔIÐIàð 	:�yð 	:õ ˜g¥sÑ+Ô+ð•Ô" 7Ñ+Ô+Ô0Ð0àð õ
 %Ô>¸{ÈIÑVÔVˆDŒMˆMØð 	:Ý˜'¥3Ñ'Ô'ð <Ý (Ô 2°7Ñ ;Ô ;�”�Ý˜G¥SÑ)Ô)ð <Ý (Ô 4°WÑ =Ô =�”�å  §¢°	Ñ!:Ô!:Ñ;Ô;Ð;Øð 	:Ý$Ô5°iÑ@Ô@ˆDŒMˆMå+¨IÔ6ˆGÝ$Ô0°Ñ9Ô9ˆDŒMà�nŠnØS˜$œ-Ô,ÐSÐS¸¼Ô9PÐSÐSÐSñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Œ>ð 	;ØŒN×&Ò& t¤}Ô'9Ñ:Ô:Ð:Ð:Ð:ð	;ð 	;rh   Úflagc                ó   — | j         |z  dk    S )z|Checks if a client flag is set.

        Returns:
            `True` if the client flag was set, `False` otherwise.
        r   )rÙ   )rp   rä  s     rf   Úisset_client_flagz)MySQLConnectionAbstract.isset_client_flag§  s   € ð Ô" TÑ)¨QÒ.Ð.rh   r  c                ó   — || _         dS )zySet the path that user can upload files.

        Args:
            path (str): Path that user can upload files.
        N)rè   )rp   r  s     rf   Úset_allow_local_infile_in_pathz6MySQLConnectionAbstract.set_allow_local_infile_in_path¯  s   € ð ,0ˆÔ(Ð(Ð(rh   c                ó   — | S )z‰Return self for weakref.proxy.

        This method is used when the original object is needed when using
        weakref.proxy.
        ry   rù   s    rf   Úget_selfz MySQLConnectionAbstract.get_self¸  s	   € ð ˆrh   úOptional[Tuple[int, ...]]c                ó,   — | j         �| j         j        S dS )z£Gets the MySQL version.

        Returns:
            The MySQL server version as a tuple. If not previously connected, it will
            return `None`.
        N)rÚ   rU   rù   s    rf   Úget_server_versionz*MySQLConnectionAbstract.get_server_versionÀ  s   € ð ÔÐ(ØÔ$Ô2Ð2Øˆtrh   c                óN   — 	 | j         d         S # t          t          f$ r Y dS w xY w)z¶Gets the original MySQL version information.

        Returns:
            The original MySQL server as text. If not previously connected, it will
            return `None`.
        Úserver_version_originalN)rÔ   Ú	TypeErrorÚKeyErrorrù   s    rf   Úget_server_infoz'MySQLConnectionAbstract.get_server_infoË  s<   € ð	Ø”?Ð#<Ô=Ð=øÝ�8Ð$ð 	ð 	ð 	Ø�4�4ð	øøøs   ‚ �$£$c                ó   — dS )z«Reports whether the socket is connected.

        Instead of ping the server like ``is_connected()``, it only checks if the
        socket connection flag is set.
        Nry   rù   s    rf   r÷   z+MySQLConnectionAbstract.is_socket_connected×  rh  rh   c              ƒ  ó
   K  — dS )a  Reports whether the connection to MySQL Server is available.

        This method checks whether the connection to MySQL is available.
        It is similar to ``ping()``, but unlike the ``ping()`` method, either `True`
        or `False` is returned and no exception is raised.
        Nry   rù   s    rf   Úis_connectedz$MySQLConnectionAbstract.is_connectedß  rØ  rh   rF   Ú	reconnectÚattemptsÚdelayc              ƒ  ó
   K  — dS )a  Check availability of the MySQL server.

        When reconnect is set to `True`, one or more attempts are made to try to
        reconnect to the MySQL server using the ``reconnect()`` method.

        ``delay`` is the number of seconds to wait between each retry.

        When the connection is not available, an InterfaceError is raised. Use the
        ``is_connected()`` method if you just want to check the connection without
        raising an error.

        Raises:
            InterfaceError: On errors.
        Nry   )rp   rö  r÷  rø  s       rf   ÚpingzMySQLConnectionAbstract.pingè  rØ  rh   ÚflagsúUnion[int, Sequence[int]]c                ó"  — t          |t          ¦  «        r|dk    r|| _        nft          |t          t          f¦  «        r;|D ]7}|dk     r| xj        t          |¦  «         z  c_        Œ'| xj        |z  c_        Œ8nt          d¦  «        ‚| j        S )að  Set the client flags.

        The flags-argument can be either an int or a list (or tuple) of ClientFlag
        values. If it is an integer, it will set client_flags to flags as is.
        If flags is a list or tuple, each flag will be set or unset when it's negative.

        set_client_flags([ClientFlag.FOUND_ROWS,-ClientFlag.LONG_FLAG])

        Raises:
            ProgrammingError: When the flags argument is not a set or an integer bigger
                              than 0.
        r   z+set_client_flags expect integer (>0) or set)r"  rP   rÙ   rn   r@  Úabsr5   )rp   rû  rä  s      rf   r  z(MySQLConnectionAbstract.set_client_flagsû  s®   € õ �e�SÑ!Ô!ð 		R e¨a¢i iØ!&ˆDÔÐÝ˜¥¥t˜}Ñ-Ô-ð 	RØð /ð /�Ø˜!’8�8ØÐ&Ô&­3¨t©9¬9¨*Ñ4Ð&Ô&Ð&àÐ&Ô&¨$Ñ.Ð&Ô&Ð&ð	/õ #Ð#PÑQÔQÐQØÔ!Ð!rh   Ú	convclassúOptional[Type[MySQLConverter]]c                óÂ   — |rOt          |t          ¦  «        r:|| _         || j        j        | j        ¦  «        | _        | j        | j        _        dS t          d¦  «        ‚)zûSet the converter class to be used.

        This should be a class overloading methods and members of
        conversion.MySQLConverter.

        Raises:
            TypeError: When the class is not a subclass of `conversion.MySQLConverter`.
        zAConverter class should be a subclass of conversion.MySQLConverterN)
Ú
issubclassr0   râ   rÄ  r!  rì   ró   rã   Ústr_fallbackrð  )rp   rÿ  s     rf   Úset_converter_classz+MySQLConnectionAbstract.set_converter_class  si   € ð ð 	� IÕ/AÑBÔBð 	Ø$-ˆDÔ!Ø&˜Y t¤}Ô'9¸4Ô;LÑMÔMˆDŒNØ*.Ô*FˆDŒNÔ'Ð'Ð'åØSñô ð rh   úTuple[str, BinaryProtocolType]c                ó:   — |\  }}|| j         vr|| j         |<   dS dS )a  Add element to the query attributes list on the connector's side.

        If an element in the query attributes list already matches
        the attribute name provided, the new element will NOT be added.

        Args:
            value: key-value as a 2-tuple.
        N©rÞ   )rp   rA  r2  r3  s       rf   Úquery_attrs_appendz*MySQLConnectionAbstract.query_attrs_append&  s7   € ð !&Ñˆ	�:Ø˜DÔ-Ð-Ð-Ø+5ˆDÔ˜iÑ(Ð(Ð(ð .Ð-rh   r!  r8   c                ó8   — | j                              |d¦  «        S )z¾Remove element by name from the query attributes list.

        If no match, `None` is returned, else the corresponding value is returned.

        Args:
            name: key name.
        N)rÞ   Úpop©rp   r!  s     rf   Úquery_attrs_removez*MySQLConnectionAbstract.query_attrs_remove3  s   € ð Ô ×$Ò$ T¨4Ñ0Ô0Ð0rh   c                ó   — i | _         dS )z5Clears query attributes list on the connector's side.Nr  rù   s    rf   Úquery_attrs_clearz)MySQLConnectionAbstract.query_attrs_clear=  s   € àˆÔÐÐrh   c              ƒ  ó|   K  — | j         r|                      ¦   «         ƒ d{V —† dS | j        rt          d¦  «        ‚dS )z¿Handle unread result.

        Consume pending results if is configured for it.

        Raises:
            InternalError: When there are pending results and they were not consumed.
        NzUnread result found)rÀ   r�   rÀ  r3   rù   s    rf   Úhandle_unread_resultz,MySQLConnectionAbstract.handle_unread_resultA  sa   è è € ð Ô ð 	7Ø×&Ò&Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔð 	7ÝÐ 5Ñ6Ô6Ð6ð	7ð 	7rh   c              ƒ  óP   K  — | j         r|                      ¦   «         ƒ d{V —† dS dS )zConsume pending results.N)rÀ  Úget_rowsrù   s    rf   r�   z'MySQLConnectionAbstract.consume_resultsN  sA   è è € àÔð 	"Ø—-’-‘/”/Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ð	"ð 	"rh   rB   úOptional[RowType]c              ƒ  ó&  K  — |                       d¬¦  «        ƒ d{V —†4 ƒd{V —†}|                     t          t          |¦  «        ¦  «        ƒ d{V —† |                     ¦   «         ƒ d{V —†cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS )z&Send a query which only returns 1 row.T)r•   N)ÚcursorÚexecuter   rR   Úfetchone)rp   rÕ  r  s      rf   r‡  z"MySQLConnectionAbstract.info_queryS  s4  è è € àŸš¨d˜Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+°vØ—.’.¥¥c¨5Ñ!1Ô!1Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ØŸšÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*ð	+ð 	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+s   ¥AB Â 
B
ÂB
r  r   c                ó:   — | j                              |¦  «         dS )zAdd cursor to the weakref set.N)rÝ   Úadd©rp   r  s     rf   Ú
add_cursorz"MySQLConnectionAbstract.add_cursorY  s   € àŒ×Ò˜&Ñ!Ô!Ð!Ð!Ð!rh   c                ó:   — | j                              |¦  «         dS )z#Remove cursor from the weakref set.N)rÝ   Úremover  s     rf   Úremove_cursorz%MySQLConnectionAbstract.remove_cursor]  s   € àŒ×Ò˜VÑ$Ô$Ð$Ð$Ð$rh   c              ƒ  ó
   K  — dS )zConnect to the MySQL server.Nry   rù   s    rf   rø   zMySQLConnectionAbstract.connecta  rØ  rh   c              ƒ  ó�  K  — d}||k    r»|dz   }	 |                       ¦   «         ƒ d{V —† |                      ¦   «         ƒ d{V —† |                      ¦   «         ƒ d{V —†rdS n<# t          t          f$ r(}||k    rd|› d|› �}t          |¦  «        |‚Y d}~nd}~ww xY w|dk    rt          j        |¦  «        ƒ d{V —† ||k    °¹dS dS )a›  Attempts to reconnect to the MySQL server.

        The argument `attempts` should be the number of times a reconnect is tried.
        The `delay` argument is the number of seconds to wait between each retry.

        You may want to set the number of attempts higher and use delay when you expect
        the MySQL server to be down for maintenance or when you expect the network to
        be temporary unavailable.

        Args:
            attempts: Number of attempts to make when reconnecting.
            delay: Use it (defined in seconds) if you want to wait between each retry.

        Raises:
            InterfaceError: When reconnection fails.
        r   rF   Nz!Can not reconnect to MySQL after z attempt(s): )Ú
disconnectrø   rõ  r1   ÚIOErrorr2   rÕ   Úsleep)rp   r÷  rø  Úcounterr0  Úmsgs         rf   rö  z!MySQLConnectionAbstract.reconnecte  sS  è è € ð" ˆØ˜Ò!Ð!Ø ‘kˆGð7Ø—o’oÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø—l’l‘n”nÐ$Ð$Ð$Ð$Ð$Ð$Ð$Ø×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,ð Ø�Eðøå�7Ð#ð 7ð 7ð 7Ø˜hÒ&Ð&ð-¸Hð -ð -Ø'*ð-ð -ð õ )¨Ñ-Ô-°3Ð6ð 'Ð&Ð&Ð&Ð&øøøøð7øøøð �qŠyˆyÝ”m EÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð ˜Ò!Ð!Ð!Ð!Ð!Ð!s   ‘AA" Á"BÁ3BÂBr   c              ƒ  ó   K  — t           ‚)ak  Shuts down connection to MySQL Server.

        This method closes the socket. It raises no exceptions.

        Unlike `disconnect()`, `shutdown()` closes the client connection without
        attempting to send a `QUIT` command to the server first. Thus, it will not
        block if the connection is disrupted for some reason such as network failure.
        )ÚNotImplementedErrorrù   s    rf   Úshutdownz MySQLConnectionAbstract.shutdownˆ  s   è è € õ "Ð!rh   c              ƒ  ó
   K  — dS )aƒ  Close the connection.

        It closes any opened cursor associated to this connection, and closes the
        underling socket connection.

        `MySQLConnection.close()` is a synonymous for `MySQLConnection.disconnect()`
        method name and more commonly used.

        This method tries to send a `QUIT` command and close the socket. It raises
        no exceptions.
        Nry   rù   s    rf   r  zMySQLConnectionAbstract.close“  rØ  rh   zCallable[[], Any]r!  ÚpreparedÚcursor_classú#Optional[Type[MySQLCursorAbstract]]Ú
dictionaryÚnamed_tuplec	              ƒ  ó
   K  — dS )aŸ  Instantiate and return a cursor.

        By default, MySQLCursor is returned. Depending on the options while
        connecting, a buffered and/or raw cursor is instantiated instead.
        Also depending upon the cursor options, rows can be returned as dictionary or
        named tuple.

        It is possible to also give a custom cursor through the cursor_class
        parameter, but it needs to be a subclass of
        mysql.connector.aio.abstracts.MySQLCursorAbstract.

        Raises:
            ProgrammingError: When cursor_class is not a subclass of
                              MySQLCursor.
            ValueError: When cursor is not available.
        Nry   )	rp   r•   r–   r*  r+  r-  r.  r   r€   s	            rf   r  zMySQLConnectionAbstract.cursor£  rØ  rh   rÑ  ÚcolumnsúOptional[List[DescriptionType]]Úkwargsr   ú1Tuple[Optional[RowType], Optional[EofPacketType]]c              ‹  ó
   K  — dS )a3  Get the next rows returned by the MySQL server.

        This method gets one row from the result set after sending, for example, the
        query command. The result is a tuple consisting of the row and the EOF packet.
        If no row was available in the result set, the row data will be None.
        Nry   )rp   rÑ  r0  r–   r2  s        rf   Úget_rowzMySQLConnectionAbstract.get_rowÀ  rØ  rh   ÚcountÚ	prep_stmtú-Tuple[List[RowType], Optional[EofPacketType]]c              ‹  ó
   K  — dS )zùGet all rows returned by the MySQL server.

        This method gets all rows returned by the MySQL server after sending, for
        example, the query command. The result is a tuple consisting of a list of rows
        and the EOF packet.
        Nry   )rp   r6  rÑ  r0  r–   r7  r2  s          rf   r  z MySQLConnectionAbstract.get_rowsÏ  rØ  rh   c              ƒ  ó
   K  — dS )zCommit current transaction.Nry   rù   s    rf   ÚcommitzMySQLConnectionAbstract.commità  rØ  rh   c              ƒ  ó
   K  — dS )zRollback current transaction.Nry   rù   s    rf   Úrollbackz MySQLConnectionAbstract.rollbackä  rØ  rh   c              ƒ  ó
   K  — dS )zÁResets the session state without re-authenticating.

        Reset command only works on MySQL server 5.7.3 or later.
        The result is True for a successful reset otherwise False.
        Nry   rù   s    rf   Úcmd_reset_connectionz,MySQLConnectionAbstract.cmd_reset_connectionè  rØ  rh   r=   c              ƒ  ó
   K  — dS )zÏChange the current database.

        This method changes the current (default) database by sending the INIT_DB
        command. The result is a dictionary containing the OK packet infawaitormation.
        Nry   )rp   r†   s     rf   Úcmd_init_dbz#MySQLConnectionAbstract.cmd_init_dbð  rØ  rh   Úraw_as_stringc              ‹  ó
   K  — dS )aã  Send a query to the MySQL server.

        This method send the query to the MySQL server and returns the result.

        If there was a text result, a tuple will be returned consisting of the number
        of columns and a list containing information about these columns.

        When the query doesn't return a text result, the OK or EOF packet information
        as dictionary will be returned. In case the result was an error, exception
        Error will be raised.
        Nry   )rp   rÕ  r–   r•   rB  r2  s         rf   r‹  z!MySQLConnectionAbstract.cmd_queryø  rØ  rh   Ú
statementsú!Generator[ResultType, None, None]c              ‹  ó
   K  — dS )ac  Send one or more statements to the MySQL server.

        Similar to the cmd_query method, but instead returns a generator
        object to iterate through results. It sends the statements to the
        MySQL server and through the iterator you can get the results.

        statement = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
        for result in await cnx.cmd_query(statement, iterate=True):
            if 'columns' in result:
                columns = result['columns']
                rows = await cnx.get_rows()
            else:
                # do something useful with INSERT result
        Nry   )rp   rD  r2  s      rf   Úcmd_query_iterz&MySQLConnectionAbstract.cmd_query_iter  rØ  rh   Ústatement_idÚrowsc              ‹  ó
   K  — dS )z´Fetch a MySQL statement Result Set.

        This method will send the FETCH command to MySQL together with the given
        statement id and the number of rows to fetch.
        Nry   )rp   rH  rI  r2  s       rf   Úcmd_stmt_fetchz&MySQLConnectionAbstract.cmd_stmt_fetch!  rØ  rh   Ú	statementrZ   ú/Mapping[str, Union[int, List[DescriptionType]]]c              ‹  ó
   K  — dS )zŠPrepare a MySQL statement.

        This method will send the PREPARE command to MySQL together with the given
        statement.
        Nry   )rp   rL  r2  s      rf   Úcmd_stmt_preparez(MySQLConnectionAbstract.cmd_stmt_prepare+  rØ  rh   ry   úUnion[int, CMySQLPrepStmt]ÚdataúSequence[BinaryProtocolType]rd  r   ú&Optional[Union[Dict[str, Any], Tuple]]c              ‹  ó
   K  — dS )z#Execute a prepared MySQL statement.Nry   )rp   rH  rQ  rd  rû  r2  s         rf   Úcmd_stmt_executez(MySQLConnectionAbstract.cmd_stmt_execute7  rØ  rh   c              ‹  ó
   K  — dS )z}Reset data for prepared statement sent as long data.

        The result is a dictionary with OK packet information.
        Nry   ©rp   rH  r2  s      rf   Úcmd_stmt_resetz&MySQLConnectionAbstract.cmd_stmt_resetB  rØ  rh   c              ‹  ó
   K  — dS )z¼Deallocate a prepared MySQL statement.

        This method deallocates the prepared statement using the statement_id.
        Note that the MySQL server does not return anything.
        Nry   rW  s      rf   Úcmd_stmt_closez&MySQLConnectionAbstract.cmd_stmt_closeM  rØ  rh   Úoptionsc              ƒ  ó
   K  — dS )a¡  Send the Refresh command to the MySQL server.

        This method sends the Refresh command to the MySQL server. The options
        argument should be a bitwise value using constants.RefreshOption.

        Typical usage example:
            ```
           RefreshOption = mysql.connector.RefreshOption
           refresh = RefreshOption.LOG | RefreshOption.INFO
           await cnx.cmd_refresh(refresh)
           ```

        Args:
            options: Bitmask value constructed using constants from
                     the `constants.RefreshOption` class.

        Returns:
            A dictionary representing the OK packet got as response when executing
            the command.

        Raises:
            ValueError: If an invalid command `refresh options` is provided.
            DeprecationWarning: If one of the options is deprecated for the server you
                                are connecting to.
        Nry   )rp   r[  s     rf   Úcmd_refreshz#MySQLConnectionAbstract.cmd_refreshU  rØ  rh   Úparam_idr   c              ‹  ó
   K  — dS )a  Send data for a column.

        This methods send data for a column (for example BLOB) for statement identified
        by statement_id. The param_id indicate which parameter the data belongs too.
        The data argument should be a file-like object.

        Since MySQL does not send anything back, no error is raised. When the MySQL
        server is not reachable, an OperationalError is raised.

        cmd_stmt_send_long_data should be called before cmd_stmt_execute.

        The total bytes send is returned.
        Nry   )rp   rH  r^  rQ  r2  s        rf   Úcmd_stmt_send_long_dataz/MySQLConnectionAbstract.cmd_stmt_send_long_dataq  rØ  rh   c              ƒ  ó
   K  — dS )zŠClose the current connection with the server.

        Send the QUIT command to the MySQL server, closing the current connection.
        Nry   rù   s    rf   Úcmd_quitz MySQLConnectionAbstract.cmd_quit†  rØ  rh   Úshutdown_typec              ƒ  ó
   K  — dS )z¼Shut down the MySQL Server.

        This method sends the SHUTDOWN command to the MySQL server.
        The `shutdown_type` is not used, and it's kept for backward compatibility.
        Nry   )rp   rc  s     rf   Úcmd_shutdownz$MySQLConnectionAbstract.cmd_shutdown�  rØ  rh   rA   c              ƒ  ó
   K  — dS )zÉSend the statistics command to the MySQL Server.

        This method sends the STATISTICS command to the MySQL server. The result is a
        dictionary with various statistical information.
        Nry   rù   s    rf   Úcmd_statisticsz&MySQLConnectionAbstract.cmd_statistics•  rØ  rh   Ú	mysql_pidc              ƒ  ó
   K  — dS )z½Kill a MySQL process.

        This method send the PROCESS_KILL command to the server along with the
        process ID. The result is a dictionary with the OK packet information.
        Nry   )rp   rh  s     rf   Úcmd_process_killz(MySQLConnectionAbstract.cmd_process_kill�  rØ  rh   r:   c              ƒ  ó
   K  — dS )a-  Send the DEBUG command.

        This method sends the DEBUG command to the MySQL server, which requires the
        MySQL user to have SUPER privilege. The output will go to the MySQL server
        error log and the result of this method is a dictionary with EOF packet
        information.
        Nry   rù   s    rf   Ú	cmd_debugz!MySQLConnectionAbstract.cmd_debug¥  rØ  rh   c              ƒ  ó
   K  — dS )zîSend the PING command.

        This method sends the PING command to the MySQL server. It is used to check
        if the the connection is still valid. The result of this method is dictionary
        with OK packet information.
        Nry   rù   s    rf   Úcmd_pingz MySQLConnectionAbstract.cmd_ping¯  rØ  rh   ÚusernameÚoci_config_fileÚoci_config_profileúOptional[OkPacketType]c              ƒ  ó
   K  — dS )aØ  Changes the current logged in user.

        It also causes the specified database to become the default (current)
        database. It is also possible to change the character set using the
        charset argument. The character set passed during initial connection
        is reused if no value of charset is passed via this method.

        Args:
            username: New account's username.
            password: New account's password.
            database: Database to become the default (current) database.
            charset: Client charset (see [1]), only the lower 8-bits.
            password1: New account's password factor 1 - it's used instead
                       of `password` if set (higher precedence).
            password2: New account's password factor 2.
            password3: New account's password factor 3.
            oci_config_file: OCI configuration file location (path-like string).
            oci_config_profile: OCI configuration profile location (path-like string).
            openid_token_file: OpenID Connect token file location (path-like string).

        Returns:
            ok_packet: Dictionary containing the OK packet information.

        Examples:
            ```
            >>> cnx.cmd_change_user(username='', password='', database='', charset=33)
            ```

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_basic_character_set.html#a_protocol_character_set
        Nry   )rp   ro  rƒ   r†   rW   r‡   rˆ   r‰   rp  rq  r™   s              rf   Úcmd_change_userz'MySQLConnectionAbstract.cmd_change_user¸  rØ  rh   )Zr‚   r¨   rƒ   rR   r„   rR   r…   rP   r†   r¨   r‡   rR   rˆ   rR   r‰   rR   rW   rR   rŠ   rR   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�   rP   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   ©NNN©rû   rü   rý   rþ   rÿ   r   r_   r`   rs   )r   )r]  rR   r^  r_  r`  rP   r_   r`   ©r_   r©   )r_   rR   ©r_   rP   ©r_   r¨   )rA  rR   r_   r`   ©rz  r©   r_   r`   ©r_   r]   )rA  r]   r_   r`   )r_   r’  )r_   r—  )rA  r²  r_   r`   )r_   rH   )rA  rH   r_   r`   )rÕ  rR   r_   r?   ©NN)rW   rÜ  rŠ   r¨   r_   r`   )rä  rP   r_   r]   )r  rR   r_   r`   )r_   rë  )FrF   r   )rö  r]   r÷  rP   rø  rP   r_   r]   )rû  rü  r_   rP   )rÿ  r   r_   r`   )rA  r  r_   r`   ©r!  rR   r_   r8   )rÕ  rB   r_   r  )r  r   r_   r`   )rF   r   )r÷  rP   rø  rP   r_   r`   )r_   r   )NNNNNNNN)r•   r­   r–   r­   r*  r­   r+  r,  r-  r­   r.  r­   r   r©   r€   r©   r_   r   )FNN)
rÑ  r]   r0  r1  r–   r­   r2  r   r_   r3  )NFNNN)r6  r©   rÑ  r]   r0  r1  r–   r­   r7  r   r2  r   r_   r8  )r†   rR   r_   r=   )FFF)rÕ  rB   r–   r]   r•   r]   rB  r]   r2  r   r_   r?   )rD  rB   r2  r   r_   rE  ©rF   )rH  rP   rI  rP   r2  r   r_   r`   )rL  rZ   r2  r   r_   rM  )ry   ry   r   )rH  rP  rQ  rR  rd  r   rû  rP   r2  r   r_   rS  )rH  rP   r2  r   r_   r`   )r[  rP   r_   r=   )
rH  rP   r^  rP   rQ  r   r2  r   r_   rP   )r_   rZ   rc   )rc  r©   r_   r`   )r_   rA   )rh  rP   r_   r=   )r_   r:   )r_   r=   )
r{   r{   r{   Nr{   r{   r{   r{   r{   r{   )ro  rR   rƒ   rR   r†   rR   rW   r©   r‡   rR   rˆ   rR   r‰   rR   rp  rR   rq  rR   r™   rR   r_   rr  )drt   ru   rv   rw   r(   rõ   rú   r  rô   r&  r%  Ústaticmethodr/  Úpropertyr   rg  r‚   rl  rn  rž   r†   Úsetterr   r€   r‰  rŒ  rŽ  r‘  r§   r–  r™  r›  rŽ   r¢  r§  r�   r­  r¯  r‘   r¶  r¸  r“   r”   rÀ  rŠ   rW   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!  rx   r  r5  r  r;  r=  r?  rA  r‹  rG  rK  rO  rU  rX  rZ  r]  r`  rb  re  rg  rj  rl  rn  rt  ry   rh   rf   r   r   ž   sß  € € € € € € Ø1Ð1ð
 #ØØØØ"&ØØØØØØ%)Ø&*ØØ %Ø Ø#'Ø%'Ø"&Ø&*Ø"Ø"'ØØØ,0Ø/3Ø+/ØIMØ#8Ð9MÔ#NØ4IØ(ô5
ð 59Ø',Ø"7Ð8IÔ"JØ&;¸NÔ&KØ'<¸_Ô'MØ%)Ø&*Ø $Ø"&Ø!%Ø*/Ø.3Ø'<¸^Ô'LØ,0Ø04Ø48ðcA,ð A,ð A,ð A,ð A,ð A,ðFð ð ð ð 37Ø-1Ø-1ð	ð ð ð ð ðaXð aXð aXð aXðF[
ð [
ð [
ð [
ðzORð ORð ORð ORðb àJKð ñ  ð  ð  ñ „\ð ðD Øñ#ð #ð #ñ „^ñ „Xð#ð ñð ð ñ „Xðð ñð ð ñ „Xðð ñð ð ñ „Xðð ñ!ð !ð !ñ „Xð!ð ñ
ð 
ð 
ñ „Xð
ð „_ñ
ð 
ð 
ñ „_ð
ð ñ
"ð 
"ð 
"ñ „Xð
"ð Ôñ%ð %ð %ñ Ôð%ð> ñ
#ð 
#ð 
#ñ „Xð
#ð Ôñ&ð &ð &ñ Ôð&ñ>ð ð ð ñ
-ð -ð -ð -ð ñ%ð %ð %ñ „Xð%ð Ôñ&ð &ð &ñ  Ôð&ð
 ñ$ð $ð $ñ „Xð$ð ñð ð ñ „Xðð ñPð Pð Pñ „XðPð ñ/ð /ð /ñ „Xð/ð ñ&ð &ð &ñ „Xð&ð ñ
ð 
ð 
ñ „Xð
ð Ôñ
ð 
ð 
ñ Ôð
ñð ð ð ñ
!ð !ð !ð !ð ñ
ð 
ð 
ñ „Xð
ð Ôñ
ð 
ð 
ñ Ôð
ñð ð ð ñ
 ð  ð  ð  ð
 ñ
ð 
ð 
ñ „Xð
ð „_ñ
ð 
ð 
ñ „_ð
ñ$ð ð ð ñð ð ð ð$ ñ"ð "ð "ñ „Xð"ð Ôñ#ð #ð #ñ Ôð#ð ñ'ð 'ð 'ñ „Xð'ð Ôñ'ð 'ð 'ñ Ôð'ð( ñ#ð #ð #ñ „Xð#ð Ôñ$ð $ð $ñ Ôð$ð ñ	'ð 	'ð 	'ñ „Xð	'ð ñ"ð "ð "ñ „Xð"ð ñ(ð (ð (ñ „Xð(ð ñð ð ñ „Xðð& „_ñð ð ñ „_ðð ñ"ð "ð "ñ „Xð"ð  ð5ð 5ð 5ñ „^ð5ð ñð ð ñ „^ðð:ð :ð :ð :ð" UYñ8;ñ 8;ð 8;ð 8;ð 8;ñt/ð /ð /ð /ñ0ð 0ð 0ð 0ðð ð ð ñ	ð 	ð 	ð 	ñ
ð 
ð 
ð 
ð ñð ð ñ „^ðð ñð ð ñ „^ðð àGHññ ð ð ñ „^ðñ$"ð "ð "ð "ñ2ð ð ð ñ$6ð 6ð 6ð 6ñ1ð 1ð 1ð 1ðð ð ð ð7ð 7ð 7ð 7ð"ð "ð "ð "ñ
+ð +ð +ð +ñ"ð "ð "ð "ñ%ð %ð %ð %ð ð+ð +ð +ñ „^ð+ñ!+ñ !+ð !+ð !+ð !+ñF	"ð 	"ð 	"ð 	"ð ðð ð ñ „^ðð %*€JÐ)Ð)Ð)Ñ)àð $(Ø"Ø#'Ø<@Ø%)Ø&*Ø&*Ø'+ññ ð ð ñ „^ðð8 ð Ø37Ø"ñ	ñ ð ð ñ „^ðð ð  $ØØ37Ø"Øññ ð ð ñ „^ðð  ð*ð *ð *ñ „^ð*ð ð,ð ,ð ,ñ „^ð,ð ñð ð ñ „^ðð ñð ð ñ „^ðð ð ØØ#ññ ð ð ñ „^ðñ(ð ð ð ð( à-.ññ ð ð ñ „^ðð ñ	ð 	ð 	ñ „^ð	ð ð .0Ø!Øñ2ñ 2ð 2ð 2ñ „^ð2ð ñð ð ñ „^ðð ñð ð ñ „^ðð ñð ð ñ „^ðñ6ð ð ð ð* ñð ð ñ „^ðð ññ ð ð ñ „^ðð ñð ð ñ „^ðð ñð ð ñ „^ðð ñð ð ñ „^ðð ñð ð ñ „^ðð ð ØØØ!%ØØØØ!Ø"$Ø!#ñ,ñ ,ð ,ð ,ñ „^ð,ð ,ð ,rh   r   c                  ó¤  — e Zd ZdZ	 	 dSdTd„ZdUd
„Z	 	 	 dVdWd„ZdXd„ZdYd„Ze	dZd„¦   «         Z
e
j        d[d„¦   «         Z
e	dZd„¦   «         Zej        d[d„¦   «         Ze	d\d„¦   «         Ze	d]d„¦   «         Ze	dZd „¦   «         Ze	d^d"„¦   «         Zd^d#„Ze	d]d$„¦   «         Ze	d_d&„¦   «         Ze	d`d(„¦   «         Ze	dad*„¦   «         Zedbd,„¦   «         Ze	 	 dcddd4„¦   «         Ze	 	 dcddd5„¦   «         Zeded8„¦   «         Zedfd:„¦   «         Zedgd<„¦   «         Zedhdid@„¦   «         ZdjdB„ZedkdD„¦   «         ZedadE„¦   «         Z dZdF„Z!dldmdJ„Z"dndL„Z#dodP„Z$dpdQ„Z%dqdR„Z&dS )rr   z#Defines the MySQL cursor interface.NÚ
connectionr   r   r©   r€   c                óN  — || _         |j        | _        d | _        d | _        d | _        d| _        d | _        g | _        g | _	        d| _
        d| _        d| _        d| _        d| _        d | _        d | _        d| _        || _        || _        | j                              | ¦  «         d S )Nr   Fr7  r|  rF   )Ú_connectionr§   r×   Ú_descriptionÚ_last_insert_idÚ	_warningsÚ_warning_countÚ	_executedÚ_executed_listÚ_stored_resultsÚ_binaryrë   Ú	_rowcountÚ_nextrowÚ	arraysizeÚ_stmt_partitionsÚ_stmt_partitionÚ_stmt_map_resultsr¼   r½   r  )rp   rƒ  r   r€   s       rf   rõ   zMySQLCursorAbstract.__init__ë  sÁ   € ð 5?ˆÔØ0:´ˆŒ
Ø=AˆÔØ.2ˆÔØ6:ˆŒØ#$ˆÔØ*.ˆŒØ+-ˆÔØ*,ˆÔØ"ˆŒØˆŒ	Ø ˆŒðL
ˆŒð  ˆŒð ð 	Ôð @DˆÔØ',ˆÔà,8ˆÔØ-:ˆÔØÔ×#Ò# DÑ)Ô)Ð)Ð)Ð)rh   r_   c              ƒ  ó
   K  — | S rc   ry   rù   s    rf   rú   zMySQLCursorAbstract.__aenter__  s   è è € Øˆrh   rû   rü   rý   rþ   rÿ   r   r`   c              ƒ  ó>   K  — |                       ¦   «         ƒ d {V —† d S rc   r  r  s       rf   r  zMySQLCursorAbstract.__aexit__  r  rh   úIterator[RowType]c              ƒ  ó
   K  — | S )z†Iterate over result set.

        Iteration over the result set which calls self.fetchone()
        and returns the next row.
        ry   rù   s    rf   Ú	__aiter__zMySQLCursorAbstract.__aiter__  s   è è € ð ˆrh   r@   c              ƒ  ó€   K  — 	 |                       ¦   «         ƒ d{V —†}n# t          $ r	 t          d‚w xY w|st          ‚|S )zm
        Used for iterating over the result set. Calles self.fetchone()
        to get the next row.
        N)r  r2   ÚStopAsyncIteration)rp   Úrows     rf   Ú__next__zMySQLCursorAbstract.__next__!  sb   è è € ð
	/ØŸš™œÐ'Ð'Ð'Ð'Ð'Ð'ˆCˆCøÝð 	/ð 	/ð 	/Ý$¨$Ð.ð	/øøøàð 	%Ý$Ð$Øˆ
s   „ Ÿ2c                ó   — | j         S )a´  
        Gets the cursor context's timeout in seconds for each attempt
        to read any data from the server.

        `read_timeout` is number of seconds upto which the connector should wait
        for the server to reply back before raising an ReadTimeoutError. We can set
        this option to None, which would signal the connector to wait indefinitely
        till the read operation is completed or stopped abruptly.
        rx  rù   s    rf   r   z MySQLCursorAbstract.read_timeout.  ry  rh   rz  c                ól   — |�*t          |t          ¦  «        r|dk     rt          d¦  «        ‚|| _        dS )a  
        Sets or updates the cursor context's timeout in seconds for each attempt
        to read any data from the server.

        `read_timeout` is number of seconds upto which the connector should wait
        for the server to reply back before raising an ReadTimeoutError. We can set
        this option to None, which would signal the connector to wait indefinitely
        till the read operation is completed or stopped abruptly.

        Args:
            timeout: Accepts a non-negative integer which is the timeout to be set
                     in seconds or None.
        Raises:
            InterfaceError: If a positive integer or None is not passed via the
                            timeout parameter.
        Examples:
            The following will set the read_timeout of the current session's cursor
            context to 5 seconds:
            ```
            >>> cnx = await mysql.connector.connect(user='scott')
            >>> cur = await cnx.cursor()
            >>> cur.read_timeout = 5
            ```
        Nr   r|  r}  r~  s     rf   r   z MySQLCursorAbstract.read_timeout;  sI   € ð4 ÐÝ˜g¥sÑ+Ô+ð ¨w¸ª{¨{Ý$ØLñô ð ð %ˆÔÐÐrh   c                ó   — | j         S )a¬  
        Gets the cursor context's timeout in seconds for each attempt
        to send data to the server.

        `write_timeout` is number of seconds upto which the connector should spend to
        write to the server before raising an WriteTimeoutError. We can set this option
        to None, which would signal the connector to wait indefinitely till the write
        operation is completed or stopped abruptly.
        r€  rù   s    rf   r€   z!MySQLCursorAbstract.write_timeout\  r�  rh   c                ól   — |�*t          |t          ¦  «        r|dk     rt          d¦  «        ‚|| _        dS )a  
        Sets or updates the cursor context's timeout in seconds for each attempt
        to send data to the server.

        `write_timeout` is number of seconds upto which the connector should spend to
        write to the server before raising an WriteTimeoutError. We can set this option
        to None, which would signal the connector to wait indefinitely till the write
        operation is completed or stopped abruptly.

        Args:
            timeout: Accepts a non-negative integer which is the timeout to be set in
                     seconds or None.
        Raises:
            InterfaceError: If a positive integer or None is not passed via the
                            timeout parameter.
        Examples:
            The following will set the write_timeout of the current session's cursor
            context to 5 seconds:
            ```
            >>> cnx = await mysql.connector.connect(user='scott')
            >>> cur = await cnx.cursor()
            >>> cur.write_timeout = 5
            ```
        Nr   rƒ  r„  r~  s     rf   r€   z!MySQLCursorAbstract.write_timeouti  sI   € ð4 ÐÝ˜g¥sÑ+Ô+ð ¨w¸ª{¨{Ý$ØMñô ð ð &ˆÔÐÐrh   r1  c                ó   — | j         S )aÂ  Return description of columns in a result.

        This property returns a list of tuples describing the columns in in a result
        set. A tuple is described as follows:

                (column_name,
                 type,
                 None,
                 None,
                 None,
                 None,
                 null_ok,
                 column_flags)  # Addition to PEP-249 specs

        Returns a list of tuples.
        )r†  rù   s    rf   ÚdescriptionzMySQLCursorAbstract.descriptionŠ  s   € ð$ Ô Ð rh   rP   c                ó   — | j         S )aÓ  Return the number of rows produced or affected.

        This property returns the number of rows produced by queries such as a
        SELECT, or affected rows when executing DML statements like INSERT or UPDATE.

        Note that for non-buffered cursors it is impossible to know the number of rows
        produced before having fetched them all. For those, the number of rows will
        be -1 right after execution, and incremented when fetching rows.
        )rŽ  rù   s    rf   ÚrowcountzMySQLCursorAbstract.rowcountž  s   € ð Œ~Ðrh   c                ó   — | j         S )zåReturn the value generated for an AUTO_INCREMENT column.

        Returns the value generated for an AUTO_INCREMENT column by the previous
        INSERT or UPDATE statement or None when there is no such value available.
        ©r‡  rù   s    rf   Ú	lastrowidzMySQLCursorAbstract.lastrowid«  s   € ð Ô#Ð#rh   úOptional[List[WarningType]]c                ó   — | j         S )zReturn warnings.©rˆ  rù   s    rf   ÚwarningszMySQLCursorAbstract.warnings´  s   € ð Œ~Ðrh   c                ó   — | j         S )zReturns Warnings.rª  rù   s    rf   Úfetchwarningsz!MySQLCursorAbstract.fetchwarnings¹  s
   € àŒ~Ðrh   c                ó   — | j         S )z•Return the number of warnings.

        This property returns the number of warnings generated by the previously
        executed operation.
        )r‰  rù   s    rf   Úwarning_countz!MySQLCursorAbstract.warning_count½  rÁ  rh   úTuple[str, ...]c                óh   — | j         st          ¦   «         S t          d„ | j         D ¦   «         ¦  «        S )z[Returns column names.

        This property returns the columns names as a tuple.
        c              3  ó&   K  — | ]}|d          V — ŒdS )r   Nry   )rd   Úds     rf   rg   z3MySQLCursorAbstract.column_names.<locals>.<genexpr>Î  s&   è è € Ð4Ð4˜a�Q�q”TÐ4Ð4Ð4Ð4Ð4Ð4rh   )r¢  rn   rù   s    rf   Úcolumn_namesz MySQLCursorAbstract.column_namesÆ  s8   € ð Ôð 	Ý‘7”7ˆNÝÐ4Ð4 4Ô#3Ð4Ñ4Ô4Ñ4Ô4Ð4rh   r¨   c                óô   — | j         €dS 	 | j                              ¦   «                              d¦  «        S # t          t          f$ r/ t          t          | j                              ¦   «         ¦  «        cY S w xY w)aŸ  Returns the latest executed statement.

        When a multiple statement is executed, the value of `statement`
        corresponds to the one that caused the current result set, provided
        the statement-result mapping was enabled. Otherwise, the value of
        `statement` matches the statement just as provided when calling
        `execute()` and it does not change as result sets are traversed.
        Nzutf-8)rŠ  r  Údecoder  ÚUnicodeDecodeErrorr   rR   rù   s    rf   rL  zMySQLCursorAbstract.statementÐ  s}   € ð Œ>Ð!Ø�4ð	5Ø”>×'Ò'Ñ)Ô)×0Ò0°Ñ9Ô9Ð9øÝÕ 2Ð3ð 	5ð 	5ð 	5Ý�˜Tœ^×1Ò1Ñ3Ô3Ñ4Ô4Ð4Ð4Ð4ð	5øøøs   ‹+7 ·=A7Á6A7r]   c                ó*   — t          | j        ¦  «        S )zÇReturns whether the cursor could have rows returned.

        This property returns True when column descriptions are available and possibly
        also rows, which will need to be fetched.
        )r]   r†  rù   s    rf   Ú	with_rowszMySQLCursorAbstract.with_rowsá  s   € õ �DÔ%Ñ&Ô&Ð&rh   úIterator[MySQLCursorAbstract]c                ó   — dS )zÓReturns an iterator for stored results.

        This method returns an iterator over results which are stored when callproc()
        is called. The iterator will provide MySQLCursorBuffered instances.
        Nry   rù   s    rf   Ústored_resultsz"MySQLCursorAbstract.stored_resultsê  rh  rh   ry   FÚ	operationrR   Úparamsú$Union[Sequence[Any], Dict[str, Any]]Úmap_resultsc              ƒ  ó
   K  — dS )a¢  Executes the given operation (a MySQL script) substituting any markers
        with the given parameters.

        For example, getting all rows where id is 5:
        ```
        cursor.execute("SELECT * FROM t1 WHERE id = %s", (5,))
        ```

        If you want each single statement in the script to be related
        to its corresponding result set, you should enable the `map_results`
        switch - see workflow example below.

        If the given script uses `DELIMITER` statements (which are not recognized
        by MySQL Server), the connector will parse such statements to remove them
        from the script and substitute delimiters as needed. This pre-processing
        may cause a performance hit when using long scripts. Note that when enabling
        `map_results`, the script is expected to use `DELIMITER` statements in order
        to split the script into multiple query strings.

        The following characters are currently not supported by the connector in
        `DELIMITER` statements: `"`, `'`, #`, `/*` and `*/`.

        If warnings were generated, and `connection.get_warnings` is
        `True`, then `self.warnings` will be a list containing these
        warnings.

        Args:
            operation: Operation to be executed - it can be a single or a
                       multi statement.
            params: The parameters found in the tuple or dictionary params are bound
                    to the variables in the operation. Specify variables using `%s` or
                    `%(name)s` parameter style (that is, using format or pyformat style).
            map_results: It is `False` by default. If `True`, it allows you to know what
                        statement caused what result set - see workflow example below.
                        Only relevant when working with multi statements.

        Returns:
            `None`.

        Example (basic usage):
            The following example runs many single statements in a
            single go and loads the corresponding result sets
            sequentially:

            ```
            sql_operation = '''
            SET @a=1, @b='2024-02-01';
            SELECT @a, LENGTH('hello'), @b;
            SELECT @@version;
            '''
            async with await cnx.cursor() as cur:
                await cur.execute(sql_operation)

                result_set = await cur.fetchall()
                # do something with result set
                ...

                while (await cur.nextset()):
                    result_set = await cur.fetchall()
                    # do something with result set
                    ...
            ```

            In case the operation is a single statement, you may skip the
            looping section as no more result sets are to be expected.

        Example (statement-result mapping):
            The following example runs many single statements in a
            single go and loads the corresponding result sets
            sequentially. Additionally, each result set gets related
            to the statement that caused it:

            ```
            sql_operation = '''
            SET @a=1, @b='2024-02-01';
            SELECT @a, LENGTH('hello'), @b;
            SELECT @@version;
            '''
            async with await cnx.cursor() as cur:
                await cur.execute(sql_operation, map_results=True)

                # statement 1 is `SET @a=1, @b='2024-02-01'`,
                # result set from statement 1 is `[]` - aka, an empty set.
                result_set, statement = await cur.fetchall(), cur.statement
                # do something with result set
                ...

                # 1st call to `nextset()` will laod the result set from statement 2,
                # statement 2 is `SELECT @a, LENGTH('hello'), @b`,
                # result set from statement 2 is `[(1, 5, '2024-02-01')]`.
                #
                # 2nd call to `nextset()` will laod the result set from statement 3,
                # statement 3 is `SELECT @@version`,
                # result set from statement 3 is `[('9.0.0-labs-mrs-8',)]`.
                #
                # 3rd call to `nextset()` will return `None` as there are no more sets,
                # leading to the end of the consumption process of result sets.
                while (await cur.nextset()):
                    result_set, statement = await cur.fetchall(), cur.statement
                    # do something with result set
                    ...
            ```

            In case the mapping is disabled (`map_results=False`), all result
            sets get related to the same statement, which is the one provided
            when calling `execute()`. In other words, the property `statement`
            will not change as result sets are consumed, which contrasts with
            the case in which the mapping is enabled. Note that we offer a
            new fetch-related API command which can be leveraged as a shortcut
            for consuming result sets - it is equivalent to the previous
            workflow.

            ```
            sql_operation = '''
            SET @a=1, @b='2024-02-01';
            SELECT @a, LENGTH('hello'), @b;
            SELECT @@version;
            '''
            async with await cnx.cursor() as cur:
                await cur.execute(sql_operation, map_results=True)
                async for statement, result_set in cur.fetchsets():
                    # do something with result set
            ```
        Nry   ©rp   r½  r¾  rÀ  s       rf   r  zMySQLCursorAbstract.executeò  rØ  rh   c              ƒ  ó
   K  — dS )aÈ  Executes the given operation (it can be a multi statement
        or a MySQL script) substituting any markers with the given parameters.

        **NOTE: `executemulti()` is deprecated and will be removed in a
        future release. Use `execute()` instead.**

        If you want each single statement in the script to be related
        to its corresponding result set, you should enable the `map_results`
        switch - see workflow example below. This capability reduces performance.

        **Unexpected behavior might happen if your script includes the following
        symbols as delimiters `"`, `'`, `#`, `/*` and `*/`. The use of these should
        be avoided for now**.

        Refer to the documentation of `execute()` to see the multi statement execution
        workflow.

        Args:
            operation: Operation to be executed - it can be a single or a
                       multi statement.
            params: The parameters found in the tuple or dictionary params are bound
                    to the variables in the operation. Specify variables using `%s` or
                    `%(name)s` parameter style (that is, using format or pyformat style).
            map_results: It is `False` by default. If `True`, it allows you to know what
                        statement caused what result set - see workflow example below.
                        Only relevant when working with multi statements.

        Returns:
            `None`.
        Nry   rÂ  s       rf   Úexecutemultiz MySQLCursorAbstract.executemultiv  rØ  rh   Ú
seq_paramsúSequence[ParamsSequenceType]c              ƒ  ó
   K  — dS )a=  Prepare and execute a MySQL Prepared Statement many times.

        This method will prepare the given operation and execute with each tuple found
        the list seq_params.

        If the cursor instance already had a prepared statement, it is first closed.

        executemany() simply calls execute().
        Nry   )rp   r½  rÅ  s      rf   ÚexecutemanyzMySQLCursorAbstract.executemanyœ  rØ  rh   r  c              ƒ  ó
   K  — dS )zÆReturn next row of a query result set.

        Raises:
            InterfaceError: If there is no result to fetch.

        Returns:
            tuple or None: A row from query result set.
        Nry   rù   s    rf   r  zMySQLCursorAbstract.fetchone¬  rØ  rh   úList[RowType]c              ƒ  ó
   K  — dS )zÖReturn all rows of a query result set.

        Raises:
            InterfaceError: If there is no result to fetch.

        Returns:
            list: A list of tuples with all rows of a query result set.
        Nry   rù   s    rf   ÚfetchallzMySQLCursorAbstract.fetchall·  rØ  rh   rF   ÚsizeúList[Sequence[Any]]c              ƒ  ó
   K  — dS )a<  Return the next set of rows of a query result set.

        When no more rows are available, it returns an empty list.
        The number of rows returned can be specified using the size argument, which
        defaults to one.

        Returns:
            list: The next set of rows of a query result set.
        Nry   )rp   rÍ  s     rf   Ú	fetchmanyzMySQLCursorAbstract.fetchmanyÂ  rØ  rh   ú9AsyncGenerator[tuple[Optional[str], list[RowType]], None]c               ó¢  K  — d}| j         s| j        }	 |                      ¦   «         ƒ d{V —†}n# t          $ r g }Y nw xY w| j         r| j        n||fW V — |                      ¦   «         ƒ d{V —†r_	 |                      ¦   «         ƒ d{V —†}n# t          $ r g }Y nw xY w| j         r| j        n||fW V — |                      ¦   «         ƒ d{V —†°]dS dS )aÙ  Generates the result sets stream caused by the last `execute*()`.

        Returns:
            A 2-tuple; the first element is the statement that caused the
            result set, and the second is the result set itself.

        Example:
            Consider the following example where multiple statements are executed in one
            go:

            ```
                sql_operation = '''
                SET @a=1, @b='2024-02-01';
                SELECT @a, LENGTH('hello'), @b;
                SELECT @@version;
                '''
                async with await cnx.cursor() as cur:
                    await cur.execute(sql_operation, map_results=True)

                    result_set, statement = await cur.fetchall(), cur.statement
                    # do something with result set
                    ...

                    while (await cur.nextset()):
                        result_set, statement = await cur.fetchall(), cur.statement
                        # do something with result set
                        ...
            ```

            In this case, as an alternative to loading the result sets with `nextset()`
            in combination with a `while` loop, you can use `fetchsets()` which is
            equivalent to the previous approach:

            ```
                sql_operation = '''
                SET @a=1, @b='2024-02-01';
                SELECT @a, LENGTH('hello'), @b;
                SELECT @@version;
                '''
                async with await cnx.cursor() as cur:
                    await cur.execute(sql_operation, map_results=True)
                    async for statement, result_set in cur.fetchsets():
                        # do something with result set
            ```
        N)r“  rL  rÌ  r2   Únextset)rp   Ústatement_cachedÚ
result_sets      rf   Ú	fetchsetszMySQLCursorAbstract.fetchsetsÎ  sr  è è € ðh  ÐØÔ%ð 	.Ø#œ~Ðð	Ø#Ÿ}š}™œÐ.Ð.Ð.Ð.Ð.Ð.ˆJˆJøÝð 	ð 	ð 	ØˆJˆJˆJð	øøøð #Ô4ÐJˆDŒNˆNÐ:JØðð 	ð 	ð 	ð 	ð —L’L‘N”NÐ"Ð"Ð"Ð"Ð"Ð"ð 	ð Ø#'§=¢=¡?¤?Ð2Ð2Ð2Ð2Ð2Ð2�
�
øÝ!ð  ð  ð  Ø�
�
�
ð øøøð #'Ô"8ÐN�”�Ð>NØðð ð ð ð ð —L’L‘N”NÐ"Ð"Ð"Ð"Ð"Ð"ð 	ð 	ð 	ð 	ð 	s   ”/ ¯>½>Á1B ÂBÂBr­   c              ƒ  ó
   K  — dS )aK  Makes the cursor skip to the next available set, discarding
        any remaining rows from the current set.

        This method should be used as part of the multi statement
        execution workflow - see example below.

        Returns:
            It returns `None` if there are no more sets. Otherwise, it returns
            `True` and subsequent calls to the `fetch*()` methods will return
            rows from the next result set.

        Example:
            The following example runs many single statements in a
            single go and loads the corresponding result sets
            sequentially:

            ```
            sql_operation = '''
            SET @a=1, @b='2024-02-01';
            SELECT @a, LENGTH('hello'), @b;
            SELECT @@version;
            '''
            async with await cnx.cursor() as cur:
                await cur.execute(sql_operation)

                result_set = await cur.fetchall()
                # do something with result set
                ...

                while (await cur.nextset()):
                    result_set = await cur.fetchall()
                    # do something with result set
                    ...
            ```

            In case the operation is a single statement, you may skip the
            looping section as no more result sets are to be expected.
        Nry   rù   s    rf   rÓ  zMySQLCursorAbstract.nextset	  rØ  rh   c              ƒ  ó
   K  — dS )zClose the cursor.Nry   rù   s    rf   r  zMySQLCursorAbstract.close?	  rØ  rh   c                ó   — | j         S )z·Return the value generated for an AUTO_INCREMENT column.

        Returns the value generated for an AUTO_INCREMENT column by the previous
        INSERT or UPDATE statement.
        r¦  rù   s    rf   Úgetlastrowidz MySQLCursorAbstract.getlastrowidC	  s   € ð Ô#Ð#rh   TÚfreer   c              ƒ  ó
   K  — dS )zReset the cursor to default.Nry   )rp   rÛ  s     rf   ÚresetzMySQLCursorAbstract.resetK	  rØ  rh   ú.Optional[List[Tuple[str, BinaryProtocolType]]]c                ó>   — t          | d¦  «        r| j        j        S dS )z„Gets a list of query attributes from the connector's side.

        Returns:
            List of existing query attributes.
        r…  N)Úhasattrr…  r™  rù   s    rf   Úget_attributesz"MySQLCursorAbstract.get_attributesN	  s'   € õ �4˜Ñ'Ô'ð 	0ØÔ#Ô/Ð/Øˆtrh   r!  rA  r8   c                óÚ   — t          |t          ¦  «        st          d¦  «        ‚|�(t          |t          ¦  «        st          d|› d�¦  «        ‚| j                             ||f¦  «         dS )aþ  Add a query attribute and its value into the connector's query attributes.

        Query attributes must be enabled on the server - they are disabled by default. A
        warning is logged when setting query attributes for a server connection
        that does not support them.

        Args:
            name: Key name used to identify the attribute.
            value: A value converted to the MySQL Binary Protocol.

        Raises:
            ProgrammingError: If the value's conversion fails.
        ú&Parameter `name` must be a string typeNzObject z$ cannot be converted to a MySQL type)r"  rR   r5   r!   r…  r  )rp   r!  rA  s      rf   Úadd_attributez!MySQLCursorAbstract.add_attributeX	  s~   € õ ˜$¥Ñ$Ô$ð 	MÝ"Ð#KÑLÔLÐLØÐ¥Z°µ~Ñ%FÔ%FÐÝ"ØE˜%ÐEÐEÐEñô ð ð 	Ô×+Ò+¨T°5¨MÑ:Ô:Ð:Ð:Ð:rh   c                ó~   — t          |t          ¦  «        st          d¦  «        ‚| j                             |¦  «        S )a'  Removes a query attribute by name from the connector's query attributes.

        If no match, `None` is returned, else the corresponding value is returned.

        Args:
            name: Key name used to identify the attribute.

        Returns:
            value: Attribute's value.
        rã  )r"  rR   r5   r…  r  r  s     rf   Úremove_attributez$MySQLCursorAbstract.remove_attributen	  s=   € õ ˜$¥Ñ$Ô$ð 	MÝ"Ð#KÑLÔLÐLØÔ×2Ò2°4Ñ8Ô8Ð8rh   c                ó8   — | j                              ¦   «          dS )z<Clears the list of query attributes on the connector's side.N)r…  r  rù   s    rf   Úclear_attributesz$MySQLCursorAbstract.clear_attributes}	  s   € àÔ×*Ò*Ñ,Ô,Ð,Ð,Ð,rh   r|  )rƒ  r   r   r©   r€   r©   )r_   r   ru  rv  )r_   r–  )r_   r@   rw  rz  )r_   r1  rx  )r_   r¨  )r_   r°  ry  r{  )r_   rº  )ry   F)r½  rR   r¾  r¿  rÀ  r]   r_   r`   )r½  rR   rÅ  rÆ  r_   r`   )r_   r  )r_   rÊ  r~  )rÍ  rP   r_   rÎ  )r_   rÑ  )r_   r­   )T)rÛ  r]   r_   r   )r_   rÞ  )r!  rR   rA  r8   r_   r`   r}  rs   )'rt   ru   rv   rw   rõ   rú   r  r˜  rœ  r€  r   r�  r€   r¢  r¤  r§  r«  r­  r¯  r´  rL  r¹  r   r¼  r  rÄ  rÈ  r  rÌ  rÐ  rÖ  rÓ  r  rÚ  rÝ  rá  rä  ræ  rè  ry   rh   rf   r   r   è  s  € € € € € Ø-Ð-ð
 '+Ø'+ð	!*ð !*ð !*ð !*ð !*ðFð ð ð ð
 37Ø-1Ø-1ð	ð ð ð ð ðð ð ð ðð ð ð ð ð
"ð 
"ð 
"ñ „Xð
"ð Ôð%ð %ð %ñ Ôð%ð@ ð
#ð 
#ð 
#ñ „Xð
#ð Ôð&ð &ð &ñ Ôð&ð@ ð!ð !ð !ñ „Xð!ð& ð
ð 
ð 
ñ „Xð
ð ð$ð $ð $ñ „Xð$ð ðð ð ñ „Xððð ð ð ð ð#ð #ð #ñ „Xð#ð ð5ð 5ð 5ñ „Xð5ð ð5ð 5ð 5ñ „Xð5ð  ð'ð 'ð 'ñ „Xð'ð ðð ð ñ „^ðð ð 8:Ø!ð	Að Að Að Añ „^ðAðF ð 8:Ø!ð	#ð #ð #ð #ñ „^ð#ðJ ðð ð ñ „^ðð ðð ð ñ „^ðð ðð ð ñ „^ðð ð	ð 	ð 	ð 	ñ „^ð	ðFð Fð Fð FðP ð&ð &ð &ñ „^ð&ðP ð ð  ð  ñ „^ð ð$ð $ð $ð $ð+ð +ð +ð +ð +ðð ð ð ð;ð ;ð ;ð ;ð,9ð 9ð 9ð 9ð-ð -ð -ð -ð -ð -rh   r   c                  ó   — e Zd ZdZdS )ÚCMySQLPrepStmtaP  Structure to represent a result from `CMySQLConnection.cmd_stmt_prepare`.
    It can be used consistently as a type hint.

    `_mysql_connector.MySQLPrepStmt` isn't available when the C-ext isn't built.

    In this regard, `CmdStmtPrepareResult` acts as a proxy/wrapper entity for a
    `_mysql_connector.MySQLPrepStmt` instance.
    N)rt   ru   rv   rw   ry   rh   rf   rê  rê  ‚	  s   € € € € € ðð ð ð rh   rê  )crw   Ú
__future__r   Ú__all__rÕ   r  rk   rÛ   Úabcr   r   Údataclassesr	   r
   Úinspectr   Útypesr   Útypingr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú	abstractsr   r    r!   r"   r#   r$   r%   r&   Ú	constantsr'   r(   r)   r*   r+   r,   r-   r.   Ú
conversionr/   r0   Úerrorsr1   r2   r3   r4   r5   Útls_ciphersr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   ÚutilsrD   rE   ÚauthenticationrG   rI   rH   rQ   rJ   ÚnetworkrK   rL   r!  r•  ÚWeakValueDictionaryrN   rx   r   r   r   rê  ry   rh   rf   ú<module>rû     s£  ðð@ 2Ð 1Ð 1à "Ð "Ð "Ð "Ð "Ð "à
JÐ
JÐ
J€à €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€à #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð(	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ðð ð ð ð ð ð ð ð ð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ Rðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 2Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø .Ð .Ð .Ð .Ð .Ð .Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø #Ð #Ð #Ð #Ð #Ð #àð 9Ø8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð Œ7�gÒ€Ø;V¸7Ô;VÑ;XÔ;XÐ Ð XÐ XÐ XÑ Xð ð%ð %ð %ð %ð %ñ %ô %ñ „ð%ðDGð Gð Gð Gð G˜cñ Gô Gð GðT2W
-ð W
-ð W
-ð W
-ð W
-˜#ñ W
-ô W
-ð W
-ðtð ð ð ð �^ñ ô ð ð ð rh   