§
    >Ä³g¦  ã                  óP  — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZ ddlmZ dd	lmZmZmZmZmZ dd
lmZ ddlmZm Z m!Z!m"Z" ddl#m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 erddl1m2Z2 dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ: G d„ d¦  «        Z;dS )z,Implements the MySQL Client/Server protocol.é    )ÚannotationsN)Údeque)ÚDecimalÚDecimalException)	ÚTYPE_CHECKINGÚAnyÚDequeÚDictÚListÚOptionalÚSequenceÚTupleÚUnioné   )Úutils)ÚPARAMETER_COUNT_AVAILABLEÚ
ClientFlagÚ	FieldFlagÚ	FieldTypeÚ	ServerCmd)ÚMySQLConverter)ÚDatabaseErrorÚInterfaceErrorÚProgrammingErrorÚget_exception)Úlogger)ÚMySQLAuthPluginÚget_auth_plugin)Ú"MySQLCachingSHA2PasswordAuthPlugin)ÚBinaryProtocolTypeÚDescriptionTypeÚEofPacketTypeÚHandShakeTypeÚOkPacketTypeÚStatsPacketTypeÚ
StrOrBytes)ÚMySQLSocketé
   éþ   é   éÿ   é-   i   @c                  óæ  — e Zd ZdZedtd„¦   «         Zedud„¦   «         Zedud„¦   «         Zedvd„¦   «         Zedwd„¦   «         Z	e	 	 	 dxdyd„¦   «         Z
edededdddddf
dzd&„¦   «         Zeedefd{d'„¦   «         Zed|d}d+„¦   «         Zed~dd/„¦   «         Zed€d1„¦   «         Zed�d3„¦   «         Zed‚d5„¦   «         Zedƒd„d9„¦   «         Zd…d;„Zed†d‡d?„¦   «         Z	 	 dˆd‰dG„ZedŠdJ„¦   «         Zed‹dL„¦   «         Ze	 dŒd�dO„¦   «         ZedŽdR„¦   «         Zed�dT„¦   «         Z	 dƒd�dX„Z	 	 	 d‘d’d[„Zed“d]„¦   «         Zed”d`„¦   «         Z ed•db„¦   «         Z!ed–dd„¦   «         Z"ed—dh„¦   «         Z#	 	 	 	 	 	 	 d˜d™ds„Z$dS )šÚMySQLProtocolzRImplements MySQL client/server protocol

    Create and parses MySQL packets.
    ÚpktÚbytesÚreturnc                óV   — | d         t           k    st          d¦  «        ‚| dd…         S )a  Parse a MySQL auth more data packet.

        Args:
            pkt: Packet representing an `auth more data` response.

        Returns:
            auth_data: Authentication method data (see [1]).

        Raises:
            InterfaceError: If packet's status tag doesn't
                            match `protocol.EXCHANGE_FURTHER_STATUS`.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_auth_more_data.html
        é   z"Failed parsing AuthMoreData packeté   N)ÚEXCHANGE_FURTHER_STATUSr   )r/   s    úV/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/mysql/connector/protocol.pyÚparse_auth_more_dataz"MySQLProtocol.parse_auth_more_data\   s0   € ð$ �1ŒvÕ0Ò0Ð0Ý Ð!EÑFÔFÐFØ�1�2�2Œwˆó    úTuple[str, bytes]c                óà   — | d         t           k    rt          d¦  «        ‚t          j        | dd…         d¬¦  «        \  } }| r| d         dk    r
| dd…         } |                     ¦   «         | fS )	a|  Parse a MySQL auth switch request packet.

        Args:
            pkt: Packet representing an `auth switch request` response.

        Returns:
            plugin_name: Name of the client authentication plugin to switch to.
            plugin_provided_data: Plugin provided data (see [1]).

        Raises:
            InterfaceError: If packet's status tag doesn't
                            match `protocol.AUTH_SWITCH_STATUS`.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/                latest/page_protocol_connection_phase_packets_protocol_
                auth_switch_request.html
        r3   z'Failed parsing AuthSwitchRequest packetr4   Nó    ©Úendéÿÿÿÿr   )ÚAUTH_SWITCH_STATUSr   r   Úread_stringÚdecode)r/   Úplugin_names     r6   Úparse_auth_switch_requestz'MySQLProtocol.parse_auth_switch_requestr   s}   € ð( ˆqŒ6Õ'Ò'Ð'Ý Ð!JÑKÔKÐKÝ Ô,¨S°°°¬W¸'ÐBÑBÔBÑˆˆ[Øð 	�3�r”7˜a’<�<Ø�c�r�c”(ˆCØ×!Ò!Ñ#Ô# SÐ(Ð(r8   c                óÔ   — t          j        | dd…         d¦  «        \  } }|t          k    rt          d¦  «        ‚t          j        | d¬¦  «        \  } }|                     ¦   «         | fS )a¦  Parse a MySQL auth next factor packet.

        Args:
            pkt: Packet representing an `auth next factor` response.

        Returns:
            plugin_name: Name of the client authentication plugin.
            plugin_provided_data: Initial authentication data for that
                                  client plugin (see [1]).

        Raises:
            InterfaceError: If packet's packet type doesn't
                            match `protocol.MFA_STATUS`.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_auth_                next_factor_request.html
        r3   Nr   z.Failed parsing AuthNextFactor packet (invalid)r;   r<   )r   Úread_intÚ
MFA_STATUSr   r@   rA   )r/   ÚstatusrB   s      r6   Úparse_auth_next_factorz$MySQLProtocol.parse_auth_next_factor�   sl   € õ* ”n S¨¨¨¤W¨aÑ0Ô0‰ˆˆVØ•ZÒÐÝ Ð!QÑRÔRÐRÝ Ô,¨S°gÐ>Ñ>Ô>Ñˆˆ[Ø×!Ò!Ñ#Ô# SÐ(Ð(r8   Ú
conn_attrsúDict[str, str]c           
     óÎ  ‡ — ‰ D ]}‰ |         €d‰ |<   Œt          ˆ fd„‰ D ¦   «         ¦  «        t          ‰                      ¦   «         ¦  «        z   t          ‰                      ¦   «         ¦  «        z   }t	          j        d|¦  «        g}‰ D ]Æ}|                     t	          j        dt          |¦  «        ¦  «        ¦  «         |                     |                     ¦   «         ¦  «         |                     t	          j        dt          ‰ |         ¦  «        ¦  «        ¦  «         |                     ‰ |                              ¦   «         ¦  «         ŒÇd                     |¦  «        S )az  Encode the connection attributes.

        Args:
            conn_attrs: Connection attributes.

        Returns:
            serialized_conn_attrs: Serialized connection attributes as per [1].

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_handshake_response.html
        NÚ c              3  ób   •K  — | ])}t          |¦  «        t          ‰|         ¦  «        z   V — Œ*d S ©N)Úlen)Ú.0ÚxrI   s     €r6   ú	<genexpr>z0MySQLProtocol.make_conn_attrs.<locals>.<genexpr>º   s:   øè è € Ð@Ð@°•�A‘”�˜Z¨œ]Ñ+Ô+Ñ+Ð@Ð@Ð@Ð@Ð@Ð@r8   ú<Br8   )	ÚsumrO   ÚkeysÚvaluesÚstructÚpackÚappendÚencodeÚjoin)rI   Ú	attr_nameÚconn_attrs_lenÚconn_attrs_packets   `   r6   Úmake_conn_attrszMySQLProtocol.make_conn_attrs¨   s[  ø€ ð $ð 	+ð 	+ˆIØ˜)Ô$Ð,Ø(*�
˜9Ñ%øåÐ@Ð@Ð@Ð@°ZÐ@Ñ@Ô@Ñ@Ô@Ý�*—/’/Ñ#Ô#Ñ$Ô$ñ%å�*×#Ò#Ñ%Ô%Ñ&Ô&ñ'ð 	õ $œ[¨¨~Ñ>Ô>Ð?ÐØ#ð 	Eð 	EˆIØ×$Ò$¥V¤[°µs¸9±~´~Ñ%FÔ%FÑGÔGÐGØ×$Ò$ Y×%5Ò%5Ñ%7Ô%7Ñ8Ô8Ð8Ø×$Ò$¥V¤[°µs¸:ÀiÔ;PÑ7QÔ7QÑ%RÔ%RÑSÔSÐSØ×$Ò$ Z°	Ô%:×%AÒ%AÑ%CÔ%CÑDÔDÐDÐDØ�xŠxÐ)Ñ*Ô*Ð*r8   Úclient_flagsÚintÚdatabaseúOptional[str]c                óV   — | t           j        z  r|r|                     ¦   «         dz   ndS )aÙ  Prepare database string for handshake response.

        Args:
            client_flags: Integer representing client capabilities flags.
            database: Initial database name for the connection.

        Returns:
            serialized_database: Serialized database name as per [1].

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_handshake_response.html
        r;   )r   ÚCONNECT_WITH_DBrZ   )r`   rb   s     r6   Úconnect_with_dbzMySQLProtocol.connect_with_dbÇ   s8   € ð" �jÔ8Ñ8ðØ=EðˆH�OŠOÑÔ Ñ'Ð'àð	
r8   NFÚ	auth_dataÚusernameÚstrÚpasswordÚauth_pluginÚauth_plugin_classÚssl_enabledÚboolÚplugin_configúOptional[Dict[str, Any]]úTuple[bytes, MySQLAuthPlugin]c                ót  — |s|dk    rdt          |||¬¦  «        fS |€i }	  t          ||¦  «        |||¬¦  «        } |j        | fi |¤Ž}n,# t          t          f$ r}	t	          d|	› �¦  «        |	‚d}	~	ww xY w|€t	          d|j        › �¦  «        ‚t          j        t          |¦  «        ¦  «        |z   }||fS )a  Prepare the first authentication response.

        Args:
            auth_data: Authorization data from initial handshake.
            username: Account's username.
            password: Account's password.
            client_flags: Integer representing client capabilities flags.
            auth_plugin: Authorization plugin name.
            auth_plugin_class: Authorization plugin class (has higher precedence
                               than the authorization plugin name).
            ssl_enabled: Whether SSL is enabled or not.
            plugin_config: Custom configuration to be passed to the auth plugin
                           when invoked. The parameters defined here will override
                           the ones defined in the auth plugin itself.

        Returns:
            auth_response: Authorization plugin response.
            auth_strategy: Authorization plugin instance created based
                           on the provided `auth_plugin` and `auth_plugin_class`
                           parameters.

        Raises:
            InterfaceError: If authentication fails or when got a NULL auth response.
        rL   r;   )rm   NzFailed authentication: z8Got NULL auth response while authenticating with plugin )	r   r   Úauth_responseÚ	TypeErrorr   Únamer   Úlc_intrO   )
rg   rh   rj   rk   rl   rm   ro   Úauth_strategyrs   Úerrs
             r6   Úauth_plugin_first_responsez(MySQLProtocol.auth_plugin_first_responseÜ   s/  € ðD ð 	˜K¨2Ò-Ð-àÕ>Ø˜(°ðñ ô ð ð ð Ð ØˆMð	KØK�O¨KÐ9JÑKÔKØ˜(°ðñ ô ˆMð 8˜MÔ7¸	ÐSÐSÀ]ÐSÐSˆMˆMøÝ�>Ð*ð 	Kð 	Kð 	KÝ Ð!@¸3Ð!@Ð!@ÑAÔAÀsÐJøøøøð	Køøøð Ð Ý ð/Ø'Ô,ð/ð /ñô ð õ
 œ¥S¨Ñ%7Ô%7Ñ8Ô8¸=ÑHˆà˜mÐ+Ð+s   ¢*A ÁA6ÁA1Á1A6r   Ú	handshaker#   ÚcharsetÚmax_allowed_packetúOptional[Dict[str, str]]Úis_change_user_requestc           	     óä  — |                      ¦   «         }g }|
rt          j        d¦  «         t          j        d¦  «         | €t          d¦  «        d‚|                      d¦  «        €t          d¦  «        d‚	 |p| d         }n-# t
          t          f$ r}t          d|› d	�¦  «        d‚d}~ww xY wt          j        d
|¦  «         |
rE|                     t          j	        dt          |¦  «        › d�t          j        |¦  «        ¦  «         n@d}|                     t          j	        d|› t          |¦  «        › d�||||¦  «        ¦  «         t                               | d         ||||||¬¦  «        \  }}|                     |¦  «         |                     t                               ||¦  «        ¦  «         |
r(|                     t          j	        d|¦  «        ¦  «         |t           j        z  r*|                     |                      ¦   «         dz   ¦  «         |t           j        z  r/|	�-|                     t                               |	¦  «        ¦  «         d                     |¦  «        |fS )a²  Make a MySQL Authentication packet.

        Args:
            handshake: Initial handshake.
            username: Account's username.
            password: Account's password.
            database: Initial database name for the connection
            charset: Client charset (see [2]), only the lower 8-bits.
            client_flags: Integer representing client capabilities flags.
            max_allowed_packet: Maximum packet size.
            auth_plugin: Authorization plugin name.
            auth_plugin_class: Authorization plugin class (has higher precedence
                               than the authorization plugin name).
            conn_attrs: Connection attributes.
            is_change_user_request: Whether is a `change user request` operation or not.
            ssl_enabled: Whether SSL is enabled or not.
            plugin_config: Custom configuration to be passed to the auth plugin
                           when invoked. The parameters defined here will override
                           the one defined in the auth plugin itself.

        Returns:
            handshake_response: Handshake response as per [1].
            auth_strategy: Authorization plugin instance created based
                           on the provided `auth_plugin` and `auth_plugin_class`.

        Raises:
            ProgrammingError: Handshake misses authentication info.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_handshake_response.html

            [2]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_basic_character_set.html#a_protocol_character_set
        zGot a `change user` requestzStarting authorization phaseNzGot a NULL handshakerg   z$Handshake misses authentication infork   z-Handshake misses authentication plugin info (ú)z#The provided initial strategy is %srS   ÚsxÚxxxxxxxxxxxxxxxxxxxxxxxz<IIB)rg   rh   rj   rk   rl   rm   ro   ú<Hr;   r8   )rZ   r   Údebugr   Úgetrt   ÚKeyErrorrY   rW   rX   rO   r   ÚCHANGE_USERr.   ry   rf   r   ÚPLUGIN_AUTHÚCONNECT_ARGSr_   r[   )rz   rh   rj   rb   r{   r`   r|   rk   rl   rI   r~   rm   ro   Ú
b_usernameÚresponse_payloadrx   Úfillerrs   rw   s                      r6   Ú	make_authzMySQLProtocol.make_auth  sÂ  € ðf —_’_Ñ&Ô&ˆ
ØÐà!ð 	8ÝŒLÐ6Ñ7Ô7Ð7åŒÐ3Ñ4Ô4Ð4ØÐÝ"Ð#9Ñ:Ô:ÀÐDà�=Š=˜Ñ%Ô%Ð-Ý"Ð#IÑJÔJÐPTÐTð	Ø%ÐA¨°=Ô)AˆKˆKøÝ�8Ð$ð 	ð 	ð 	Ý"ØFÀÐFÐFÐFñô àðøøøøð	øøøõ
 	ŒÐ:¸KÑHÔHÐHà!ð 	Ø×#Ò#Ý”Ø,�˜Z™œÐ,Ð,Ð,ÝÔ)Øñô ñô ð ð ð ˆFØ×#Ò#Ý”Ø6˜6Ð6¥3 z¡?¤?Ð6Ð6Ð6Ø Ø&ØØñô ñô ð õ (5×'OÒ'OØ Ô,ØØØ#Ø/Ø#Ø'ð (Pñ (
ô (
Ñ$ˆ�}ð 	×Ò Ñ.Ô.Ð.ð 	×Ò¥× =Ò =¸lÈHÑ UÔ UÑVÔVÐVð "ð 	@Ø×#Ò#¥F¤K°°gÑ$>Ô$>Ñ?Ô?Ð?ð �*Ô0Ñ0ð 	DØ×#Ò# K×$6Ò$6Ñ$8Ô$8¸7Ñ$BÑCÔCÐCð �:Ô2Ñ2ð 	O¸
Ð8NØ×#Ò#¥M×$AÒ$AÀ*Ñ$MÔ$MÑNÔNÐNà�xŠxÐ(Ñ)Ô)¨=Ð8Ð8s   Á9
B ÂB.ÂB)Â)B.c                ó    — d                      t          j        |¦  «        t          j        |¦  «        t          j        | ¦  «        dg¦  «        S )a“  Make a SSL authentication packet (see [1]).

        Args:
            charset: Client charset (see [2]), only the lower 8-bits.
            client_flags: Integer representing client capabilities flags.
            max_allowed_packet: Maximum packet size.

        Returns:
            ssl_request_pkt: SSL connection request packet.

        References:
            [1]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_connection_phase_packets_protocol_ssl_request.html

            [2]: https://dev.mysql.com/doc/dev/mysql-server/latest/                page_protocol_basic_character_set.html#a_protocol_character_set
        r8   s                          )r[   r   Ú	int4storeÚ	int1store)r{   r`   r|   s      r6   Úmake_auth_sslzMySQLProtocol.make_auth_ssl“  sJ   € ð0 �xŠxå” Ñ-Ô-Ý”Ð 2Ñ3Ô3Ý” Ñ(Ô(Øð	ñ
ô 
ð 	
r8   ÚcommandÚargumentúOptional[bytes]c                ó<   — t          j        | ¦  «        }|€|n||z   S )z(Make a MySQL packet containing a command)r   r�   )r’   r“   Údatas      r6   Úmake_commandzMySQLProtocol.make_command´  s&   € õ Œ˜wÑ'Ô'ˆØÐ'ˆtˆt¨T°H©_Ð<r8   r   Ústatement_idÚrowsc                óT   — t          j        | ¦  «        t          j        |¦  «        z   S )z0Make a MySQL packet with Fetch Statement command)r   r�   )r˜   r™   s     r6   Úmake_stmt_fetchzMySQLProtocol.make_stmt_fetchº  s#   € õ Œ˜|Ñ,Ô,­u¬¸tÑ/DÔ/DÑDÐDr8   Úpacketc           	     ó„  — i }t          j        d| dd…         ¦  «        d         |d<   |d         t          k    r t          d|d         › dt          › �¦  «        ‚t	          j        | dd…         d¬	¦  «        \  } |d
<   t          j        d| dd…         ¦  «        \  |d<   }}|d<   |d<   }}|d
                              ¦   «         |d
<   | dd…         } t	          j        ||z   ¦  «        }d}|t          j	        z  rA|rt          d|dz
  ¦  «        nd}| d|…         }| |d…         } |d         dk    r
|dd…         }|t          j        z  rcd| vr$|d
                              d¦  «        r	d| c} |d<   nt	          j        | d¬	¦  «        \  } |d<   |d                              d¦  «        |d<   nd|d<   ||z   |d<   ||d<   |S )zParse a MySQL Handshake-packet.ú<xxxxBr   r4   Úprotocolz$Protocol mismatch; server version = z, client version = Nr;   r<   Úserver_version_originalz<I8sx2sBH2sBxxxxxxxxxxé   Úserver_threadidr{   Úserver_statusr8   é   é   r>   z5.5.8rk   úutf-8Úmysql_native_passwordrg   Úcapabilities)rW   ÚunpackÚPROTOCOL_VERSIONr   r   r@   rA   Úintreadr   ÚSECURE_CONNECTIONÚminrˆ   Ú
startswith)	rœ   ÚresÚ
auth_data1Úcapabilities1Úcapabilities2Úauth_data_lengthr¨   Ú
auth_data2Úsizes	            r6   Úparse_handshakezMySQLProtocol.parse_handshake¿  sA  € ð ˆÝ œ-¨°&¸¸1¸´+Ñ>Ô>¸qÔAˆˆJ‰ØˆzŒ?Õ.Ò.Ð.Ýð7°s¸:´ð 7ð 7Ý$4ð7ð 7ñô ð õ 27Ô1BØ�1�2�2ŒJ˜Gð2
ñ 2
ô 2
Ñ.ˆ�Ð-Ñ.õ ŒMÐ2°F¸1¸R¸4´LÑAÔAñ	
ØÐ!Ñ"ØØØ�	‰NØ�Ñ ØØà),Ð-FÔ)G×)NÒ)NÑ)PÔ)PˆÐ%Ñ&à˜˜˜”ˆå”} ]°]Ñ%BÑCÔCˆØˆ
Ø�*Ô6Ñ6ð 	-Ø4DÐL•3�rÐ+¨aÑ/Ñ0Ô0Ð0È"ˆDØ  $ œˆJØ˜D˜E˜E”]ˆFØ˜"Œ~ Ò"Ð"Ø'¨¨¨œ_�
à�*Ô0Ñ0ð 
	9Ø˜fÐ$Ð$¨Ð-FÔ)G×)RÒ)RØñ*ô *Ð$ð 14°VÐ,�˜˜]Ñ+Ð+å/4Ô/@ÀÈWÐ/UÑ/UÔ/UÑ,�˜˜]Ñ+Ø!$ ]Ô!3×!:Ò!:¸7Ñ!CÔ!CˆC�ÑÐà!8ˆC�Ñà%¨
Ñ2ˆˆKÑØ*ˆˆNÑØˆ
r8   r$   c                ó   — | d         dk    st          d¦  «        ‚i }	 t          j        d| dd…         ¦  «        d         |d<   t          j        | dd…         ¦  «        \  } |d<   t          j        | ¦  «        \  } |d	<   t          j        d
| dd…         ¦  «        \  |d<   |d<   | dd…         } | r8t          j        | ¦  «        \  } |d<   |d                              d¦  «        |d<   n"# t          $ r}t          d¦  «        |‚d}~ww xY w|S )zParse a MySQL OK-packetr3   r   z#Failed parsing OK packet (invalid).rž   r4   Úfield_countNÚaffected_rowsÚ	insert_idz<HHÚstatus_flagÚwarning_countÚinfo_msgr¦   zFailed parsing OK packet.)r   rW   r©   r   Úread_lc_intÚread_lc_stringrA   Ú
ValueError)rœ   Ú	ok_packetrx   s      r6   Úparse_okzMySQLProtocol.parse_okó  s@  € ð �aŒy˜AŠ~ˆ~Ý Ð!FÑGÔGÐGàˆ	ð	GÝ'-¤}°X¸vÀaÈÀc¼{Ñ'KÔ'KÈAÔ'NˆI�mÑ$Ý16Ô1BÀ6È!È"È"Ä:Ñ1NÔ1NÑ.ˆF�I˜oÑ.Ý-2Ô->¸vÑ-FÔ-FÑ*ˆF�I˜kÑ*õ ”˜e V¨A¨a¨C¤[Ñ1Ô1ñØ˜-Ñ(Ø˜/Ñ*à˜A˜B˜B”ZˆFØð NÝ05Ô0DÀVÑ0LÔ0LÑ-�˜	 *Ñ-Ø(1°*Ô(=×(DÒ(DÀWÑ(MÔ(M�	˜*Ñ%øøÝð 	Gð 	Gð 	GÝ Ð!<Ñ=Ô=À3ÐFøøøøð	GøøøàÐs   ŸCC, Ã,
DÃ6DÄDúOptional[int]c                ó¨   — 	 t          j        | dd…         ¦  «        d         }|S # t          j        t          f$ r}t          d¦  «        |‚d}~ww xY w)z=Parse a MySQL packet with the number of columns in result setr3   Nr   zFailed parsing column count)r   r¾   rW   ÚerrorrÀ   r   )rœ   Úcountrx   s      r6   Úparse_column_countz MySQLProtocol.parse_column_count
  se   € ð	IÝÔ% f¨Q¨R¨R¤jÑ1Ô1°!Ô4ˆEØˆLøÝ”�jÐ)ð 	Ið 	Ið 	IÝ Ð!>Ñ?Ô?ÀSÐHøøøøð	Iøøøs   ‚#& ¦A¼AÁAr¦   Úencodingr!   c           	     óþ  — t          j        | dd…         ¦  «        \  } }t          j        | ¦  «        \  } }t          j        | ¦  «        \  } }t          j        | ¦  «        \  } }t          j        | ¦  «        \  } }t          j        | ¦  «        \  } }	 t          j        d| ¦  «        \  }}}}}n## t          j        $ r t          d¦  «        d‚w xY w|                     |¦  «        |dddd| t          j        z  ||f	S )zParse a MySQL column-packet.r3   Nz	<xHIBHBxxz!Failed parsing column information)	r   r¿   rW   r©   rÅ   r   rA   r   ÚNOT_NULL)rœ   rÈ   Ú_ru   r{   Úcolumn_typeÚflagss          r6   Úparse_columnzMySQLProtocol.parse_column  s   € õ Ô(¨°°°¬Ñ4Ô4‰	ˆ�ÝÔ(¨Ñ0Ô0‰	ˆ�ÝÔ(¨Ñ0Ô0‰	ˆ�ÝÔ(¨Ñ0Ô0‰	ˆ�ÝÔ+¨FÑ3Ô3‰ˆ�ÝÔ(¨Ñ0Ô0‰	ˆ�ð		Põ ”˜k¨6Ñ2Ô2ñØØØØØ�øåŒ|ð 	Pð 	Pð 	PÝ Ð!DÑEÔEÈ4ÐOð	Pøøøð �KŠK˜Ñ!Ô!ØØØØØØˆF•YÔ'Ñ'ØØð

ð 
	
s   ÂB0 Â0 Cr"   c                óT  — |d         dk    r|                       |¦  «        S d}i }	 t          j        d|¦  «        }n'# t          j        $ r}t	          |¦  «        |‚d}~ww xY w|d         dk    rt          |¦  «        dk    st	          |¦  «        ‚|d	         |d
<   |d         |d<   |S )zParse a MySQL EOF-packetr3   r   zFailed parsing EOF packet.z<xxxBBHHNr   r)   é	   r*   r¼   é   r»   )rÂ   rW   r©   rÅ   r   rO   )Úselfrœ   Úerr_msgr¯   Úunpackedrx   s         r6   Ú	parse_eofzMySQLProtocol.parse_eof4  sÄ   € à�!Œ9˜Š>ˆ>à—=’= Ñ(Ô(Ð(à.ˆØˆð	3Ý”} Z°Ñ8Ô8ˆHˆHøÝŒ|ð 	3ð 	3ð 	3Ý  Ñ)Ô)¨sÐ2øøøøð	3øøøð ˜”˜sÒ"Ð"¥s¨6¡{¤{°aÒ'7Ð'7Ý  Ñ)Ô)Ð)à'¨œ{ˆˆOÑØ% aœ[ˆˆMÑØˆ
s   §= ½A!ÁAÁA!TÚwith_headerr%   c                óV  — d}i }dg}d}|r| dd…                               d¦  «        }n|                       d¦  «        }|D ]ç}	 d„ |                      dd¦  «        D ¦   «         \  }}n"# t          $ r}t          |¦  «        |‚d}~ww xY w|                     d	¦  «        }	 t	          |¦  «        ||<   Œr# t
          t          f$ rb 	 t          |                     d	¦  «        ¦  «        ||<   n8# t          $ r+}t          |› d
|› dt          |¦  «        › d�¦  «        |‚d}~ww xY wY Œäw xY w|S )zParse the statistics packetz)Failed getting COM_STATISTICS informationr8   r3   Ns     c                ó6   — g | ]}|                      ¦   «         ‘ŒS © )Ústrip)rP   Úvs     r6   ú
<listcomp>z2MySQLProtocol.parse_statistics.<locals>.<listcomp>V  s    € ÐCÐCÐC¨!˜AŸGšG™IœIÐCÐCÐCr8   ó   :r*   r¦   z (ú:r€   )	ÚsplitrÀ   r   rA   ra   r†   r   r   Úrepr)	rœ   rÖ   Úerrmsgr¯   ÚpairsÚlblÚpairÚvalrx   s	            r6   Úparse_statisticszMySQLProtocol.parse_statisticsH  s�  € ð =ˆØ.0ˆà�ˆØˆØð 	.Ø˜1˜2˜2”J×$Ò$ [Ñ1Ô1ˆEˆEà—L’L Ñ-Ô-ˆEØð 	Sð 	SˆDð6ØCÐC¨t¯zªz¸$ÀÑ/BÔ/BÐCÑCÔC‘��S�SøÝð 6ð 6ð 6Ý$ VÑ,Ô,°#Ð5øøøøð6øøøð —*’*˜WÑ%Ô%ˆCðSÝ˜s™8œ8��C‘�øÝ�jÐ)ð Sð Sð SðSÝ& s§z¢z°'Ñ':Ô':Ñ;Ô;�C˜‘H�HøÝ'ð Sð Sð SÝ(¨FÐ)HÐ)H°cÐ)HÐ)H½DÀ¹I¼IÐ)HÐ)HÐ)HÑIÔIÈsÐRøøøøðSøøøð �HðSøøøð
 ˆ
sN   Á#A(Á(
BÁ2BÂBÂ B3Â3D&Ã%C+Ã*D&Ã+
D Ã5&DÄD Ä D&Ä%D&Úsockr'   ÚversionúTuple[int, ...]rÆ   Úread_timeoutúATuple[List[Tuple[Optional[bytes], ...]], Optional[EofPacketType]]c                ó(  — |}g }d}d}d}		 |s|	|k    r�nz|                      |¦  «        }
|
                     d¦  «        rÁ|
dd…         g}|                      |¦  «        }
|
                     d¦  «        rG|                     |
dd…         ¦  «         |                      |¦  «        }
|
                     d¦  «        °G|                     |
dd…         ¦  «         t          j        d                     |¦  «        ¦  «        }n[|
d         dk    r$|
d         dk     r|                      |
¦  «        }d}n+d}t          j        t          |
dd…         ¦  «        ¦  «        }|€|�|                     |¦  «         n|€|€t          |
¦  «        ‚|	d	z  }	�Œ„||fS )
z¶Read MySQL text result

        Reads all or given number of rows from the socket.

        Returns a tuple with 2 elements: a list with all rows and
        the EOF packet.
        Nr   Ts   ÿÿÿr3   r8   r)   é   r   )	Úrecvr®   rY   r   Úread_lc_string_listr[   rÕ   r0   r   )rÒ   rç   rè   rÆ   rê   rË   r™   ÚeofÚrowdataÚirœ   Údatass               r6   Úread_text_resultzMySQLProtocol.read_text_resulte  s¶  € ð$ ˆØˆØˆØˆØˆð	Øð �a˜5’j�jÙØ—Y’Y˜|Ñ,Ô,ˆFØ× Ò  Ñ1Ô1ð GØ   œ˜�ØŸš <Ñ0Ô0�Ø×'Ò'¨Ñ8Ô8ð 5Ø—L’L ¨¨¨¤Ñ,Ô,Ð,Ø!ŸYšY |Ñ4Ô4�Fð ×'Ò'¨Ñ8Ô8ð 5ð —’˜V A B BœZÑ(Ô(Ð(ÝÔ3°C·H²H¸U±O´OÑDÔD��Ø˜”˜cÒ!Ð! f¨Q¤i°!¢m mØ—n’n VÑ,Ô,�Ø��à�ÝÔ3µE¸&ÀÀÀ¼*Ñ4EÔ4EÑFÔF�Øˆ{˜wÐ2Ø—’˜GÑ$Ô$Ð$Ð$Ø�  Ý# FÑ+Ô+Ð+Ø�‰FˆAñ-	ð. �SˆyÐr8   ÚfieldúTuple[bytes, int]c                ó¸  — |d         t           j        k    rd}d}nj|d         t           j        k    rd}d}nO|d         t           j        t           j        fv rd}d}n*|d         t           j        k    rd}d}nt          d	¦  «        ‚|d
         t          j        z  r| 	                    ¦   «         }| |d…         t          j        || d|…         ¦  «        d         fS )z%Parse an integer from a binary packetr   ú<bú<hr*   ú<ir3   ú<qr¥   zUnknown integer typerí   Nr   )r   ÚTINYÚSHORTÚINT24ÚLONGÚLONGLONGrÀ   r   ÚUNSIGNEDÚupperrW   r©   )rœ   rõ   Úformat_Úlengths       r6   Ú_parse_binary_integerz#MySQLProtocol._parse_binary_integer•  sß   € ð
 �Œ8•y”~Ò%Ð%ØˆGØˆFˆFØ�1ŒX�œÒ(Ð(ØˆGØˆFˆFØ�1ŒX�)œ/­9¬>Ð:Ð:Ð:ØˆGØˆFˆFØ�1ŒX�Ô+Ò+Ð+ØˆGØˆFˆFõ Ð3Ñ4Ô4Ð4à�Œ8•iÔ(Ñ(ð 	&Ø—m’m‘o”oˆGà�v�w�w”¥¤¨w¸¸qÀ¸xÔ8HÑ!IÔ!IÈ!Ô!LÐMÐMr8   úTuple[bytes, float]c                óš   — |d         t           j        k    rd}d}nd}d}| |d…         t          j        || d|…         ¦  «        d         fS )z)Parse a float/double from a binary packetr   r¥   ú<dr3   z<fNr   )r   ÚDOUBLErW   r©   )rœ   rõ   r  r  s       r6   Ú_parse_binary_floatz!MySQLProtocol._parse_binary_float¯  sY   € ð
 �Œ8•yÔ'Ò'Ð'ØˆFØˆGˆGàˆFØˆGà�v�w�w”¥¤¨w¸¸qÀ¸xÔ8HÑ!IÔ!IÈ!Ô!LÐMÐMr8   Úutf8úTuple[bytes, Decimal]c                óx   — t          j        | ¦  «        \  } }| t          |                     |¦  «        ¦  «        fS )z(Parse a New Decimal from a binary packet)r   r¿   r   rA   )rœ   r{   Úvalues      r6   Ú_parse_binary_new_decimalz'MySQLProtocol._parse_binary_new_decimal½  s7   € õ
  Ô.¨vÑ6Ô6‰ˆ�Ø� §¢¨WÑ 5Ô 5Ñ6Ô6Ð7Ð7r8   Ú
field_typeú?Tuple[bytes, Optional[Union[datetime.date, datetime.datetime]]]c           	     óV  — | d         }d}|dk    r}t          j        d| dd…         ¦  «        d         }| d         }| d         }|t          j        t          j        fv rt          j        |||¬¦  «        }n¦t          j        |||¬¦  «        }nŽ|dk    rˆd}|d	k    r&t          j        d
| d|dz   …         ¦  «        d         }t          j        t          j        d| dd…         ¦  «        d         | d         | d         | d         | d         | d         |¬¦  «        }| |dz   d…         |fS )z&Parse a timestamp from a binary packetr   Nr3   rƒ   r   rÑ   )ÚyearÚmonthÚdayrí   é   ú<Ir¥   r4   é   )r  r  r  ÚhourÚminuteÚsecondÚmicrosecond)rW   r©   r   ÚDATETIMEÚ	TIMESTAMPÚdatetimeÚdate)rœ   r  r  r  r  r  r  Úmcss           r6   Ú_parse_binary_timestampz%MySQLProtocol._parse_binary_timestampÅ  s?  € ð ˜”ˆØCGˆØ�QŠ;ˆ;Ý”=  v¨a°¨c¤{Ñ3Ô3°AÔ6ˆDØ˜1”IˆEØ˜”)ˆCØ�iÔ0µ)Ô2EÐFÐFÐFÝ Ô)¨t¸5ÀcÐJÑJÔJ��å œ¨4°uÀ#ÐFÑFÔF��Ø�qŠ[ˆ[ØˆCØ˜Š|ˆ|Ý”m D¨&°°V¸a±Z°Ô*@ÑAÔAÀ!ÔD�ÝÔ%Ý”] 4¨°°!°¬Ñ5Ô5°aÔ8Ø˜Q”iØ˜1”IØ˜A”YØ˜a”yØ˜a”yØðñ ô ˆEð �v ‘z�|�|Ô$ eÐ,Ð,r8   ú Tuple[bytes, datetime.timedelta]c                óœ  — | d         }|s| dd…         t          j        ¦   «         fS | d|dz   …         }d}|dk    r#t          j        d|dd…         ¦  «        d         }t          j        d|dd…         ¦  «        d         }|d         dk    r|dz  }t          j        ||d         ||d	         |d         ¬
¦  «        }| |dz   d…         |fS )z'Parse a time value from a binary packetr   r   Nr¥   r  r4   r>   rí   r  )ÚdaysÚsecondsÚmicrosecondsÚminutesÚhours)r  Ú	timedeltarW   r©   )rœ   r  r–   r!  r%  Útmps         r6   Ú_parse_binary_timez MySQLProtocol._parse_binary_timeå  sï   € ð ˜”ˆØð 	6Ø˜1˜2˜2”J¥Ô 2Ñ 4Ô 4Ð5Ð5Ø�a˜& 1™*�nÔ%ˆØˆØ�AŠ:ˆ:Ý”-  d¨1¨2¨2¤hÑ/Ô/°Ô2ˆCÝŒ}˜T 4¨¨!¨¤9Ñ-Ô-¨aÔ0ˆØ�Œ7�aŠ<ˆ<Ø�B‰JˆDÝÔ ØØ˜”GØØ˜”GØ�q”'ð
ñ 
ô 
ˆð �v ‘z�|�|Ô$ cÐ*Ð*r8   ÚfieldsúList[DescriptionType]úTuple[BinaryProtocolType, ...]c                óÀ  — t          |¦  «        dz   dz   dz  }d„ |d|…         D ¦   «         }||d…         }g }d}t          |¦  «        D �]\  }}	|t          |dz   dz  ¦  «                 d|dz   dz  z  z  r|                     d¦  «         ŒC|	d         t          j        t          j        t          j        t          j        t          j	        fv r/|  
                    ||	¦  «        \  }}|                     |¦  «         Œ³|	d         t          j        t          j        fv r0|                      ||	¦  «        \  }}|                     |¦  «         �Œ|	d         t          j        t          j        fv r0|                      ||¦  «        \  }}|                     |¦  «         �ŒS|	d         t          j        t          j        t          j        fv r6|                      ||	d         ¦  «        \  }}|                     |¦  «         �Œ´|	d         t          j        k    r/|                      |¦  «        \  }}|                     |¦  «         �Œù|	d         t          j        k    r@t1          j        |¦  «        \  }}|                     t5          j        |¦  «        ¦  «         �ŒO|	d         t8          j        k    s|	d         dk    r.t1          j        |¦  «        \  }}|                     |¦  «         �ŒŸt1          j        |¦  «        \  }}	 |                     |                     |¦  «        ¦  «         �Œá# t>          $ r |                     |¦  «         Y �Œw xY wtA          |¦  «        S )	z(Parse values from a binary result packetrí   r*   r¥   c                ó,   — g | ]}t          |¦  «        ‘ŒS rÙ   )ra   )rP   rò   s     r6   rÜ   z6MySQLProtocol._parse_binary_values.<locals>.<listcomp>  s   € ÐDÐDÐD !•s˜1‘v”vÐDÐDÐDr8   r   Nr   é?   )!rO   Ú	enumeratera   rY   r   rü   rý   rþ   rÿ   r   r  r	  ÚFLOATr
  ÚDECIMALÚ
NEWDECIMALr  r  ÚDATEr  r"  ÚTIMEr,  ÚVECTORr   r¿   r   Ú_vector_to_pythonr   ÚBINARYrA   ÚUnicodeDecodeErrorÚtuple)
rÒ   r-  rœ   r{   Únull_bitmap_lengthÚnull_bitmaprV   r  Úposrõ   s
             r6   Ú_parse_binary_valuesz"MySQLProtocol._parse_binary_valuesü  sE  € õ " &™kœk¨A™o°Ñ1°aÑ7ÐØDÐD v¨aÐ0BÐ.BÔ'CÐDÑDÔDˆØÐ*Ð+Ð+Ô,ˆàˆØ$(ˆÝ# FÑ+Ô+ð )	)ñ )	)‰JˆC�Ø�3  a¡¨1™}Ñ-Ô-Ô.°!¸¸a¹À1±}Ñ2DÑEð Ø—’˜dÑ#Ô#Ð#ØØ�QŒxÝ”Ý”Ý”Ý”ÝÔ"ðð ð ð !%× :Ò :¸6À5Ñ IÔ I‘�˜Ø—’˜eÑ$Ô$Ð$Ð$Ø�q”�iÔ.µ	´Ð@Ð@Ð@Ø $× 8Ò 8¸ÀÑ GÔ G‘�˜Ø—’˜eÑ$Ô$Ð$Ñ$Ø�q”�iÔ/µÔ1EÐFÐFÐFØ $× >Ò >¸vÀwÑ OÔ O‘�˜Ø—’˜eÑ$Ô$Ð$Ñ$Ø�q”ÝÔ"Ý”ÝÔ#ðð ð ð
 #'×">Ò">¸vÀuÈQÄxÑ"PÔ"P‘�˜Ø—’˜eÑ$Ô$Ð$Ñ$Ø�q”�Yœ^Ò+Ð+Ø"&×"9Ò"9¸&Ñ"AÔ"A‘�˜Ø—’˜eÑ$Ô$Ð$Ñ$Ø�q”�YÔ-Ò-Ð-å"'Ô"6°vÑ">Ô">‘�˜Ø—’�nÔ>¸uÑEÔEÑFÔFÐFÑFØ�q”�YÔ-Ò-Ð-°°q´¸R²°Ý"'Ô"6°vÑ">Ô">‘�˜Ø—’˜eÑ$Ô$Ð$Ñ$å"'Ô"6°vÑ">Ô">‘�˜ð)Ø—M’M %§,¢,¨wÑ"7Ô"7Ñ8Ô8Ð8Ñ8øÝ)ð )ð )ð )Ø—M’M %Ñ(Ô(Ð(Ð(Ñ(ð)øøøõ �V‰}Œ}Ðs   Ì(L+Ì+MÍMÚcolumnsúDTuple[List[Tuple[BinaryProtocolType, ...]], Optional[EofPacketType]]c                ó|  — g }d}d}d}		 |�n­|	|k    rn¦t          |                     |¦  «        ¦  «        }
|
d         dk    r|                      |
¦  «        }d}n-|
d         dk    r!d}|                      ||
dd…         |¦  «        }|€|�|                     |¦  «         n|€|€t          |
¦  «        ‚|	dz  }	Œ°||fS )zwRead MySQL binary protocol result

        Reads all or given number of binary resultset rows from the socket.
        Nr   Tr3   r)   r4   r   )r0   rî   rÕ   rA  rY   r   )rÒ   rç   rB  rÆ   r{   rê   r™   rð   rV   rò   rœ   s              r6   Úread_binary_resultz MySQLProtocol.read_binary_result6  sò   € ð ˆØˆØˆØˆð	ØˆØØ�EŠzˆzØÝ˜4Ÿ9š9 \Ñ2Ô2Ñ3Ô3ˆFØ�aŒy˜CÒÐØ—n’n VÑ,Ô,�Ø��Ø˜”˜a’�Ø�Ø×2Ò2°7¸FÀ1À2À2¼JÈÑPÔP�Øˆ{˜vÐ1Ø—’˜FÑ#Ô#Ð#Ð#Ø�  Ý# FÑ+Ô+Ð+Ø�‰FˆAð!	ð" �cˆ{Ðr8   úDict[str, int]c                ó„  — | d         dk    st          d¦  «        ‚i }	 t          j        | dd…         d¦  «        \  } |d<   t          j        | d¦  «        \  } |d<   t          j        | d¦  «        \  } |d	<   | d
d…         } t          j        | d¦  «        \  } |d<   n"# t          $ r}t          d¦  «        |‚d}~ww xY w|S )z(Parse a MySQL Binary Protocol OK packet.r3   r   zFailed parsing Binary OK packetr4   Nr˜   r*   Únum_columnsÚ
num_paramsr   r¼   )r   r   rE   rÀ   )rœ   Úok_pktrx   s      r6   Úparse_binary_prepare_okz%MySQLProtocol.parse_binary_prepare_ok\  sê   € ð �aŒy˜AŠ~ˆ~Ý Ð!BÑCÔCÐCàˆð	MÝ-2¬^¸FÀ1À2À2¼JÈÑ-JÔ-JÑ*ˆF�F˜>Ñ*Ý,1¬N¸6À1Ñ,EÔ,EÑ)ˆF�F˜=Ñ)Ý+0¬>¸&À!Ñ+DÔ+DÑ(ˆF�F˜<Ñ(Ø˜A˜B˜B”ZˆFÝ.3¬n¸VÀQÑ.GÔ.GÑ+ˆF�F˜?Ñ+Ð+øÝð 	Mð 	Mð 	MÝ Ð!BÑCÔCÈÐLøøøøð	Møøøð ˆs   ŸA>B Â
B=Â(B8Â8B=r  úTuple[bytes, int, int]c                ó€  — d}d}| dk     rN| dk    rd}t           j        }nˆ| dk    rd}t           j        }ns| dk    rd}t           j        }n^d	}t           j        }nOd
}| dk    rd}t           j        }n8| dk    rd}t           j        }n#| dk    rd}t           j        }nt           j        }d}t          j        || ¦  «        ||fS )z0Prepare an integer for the MySQL binary protocolNr   i€ÿÿÿrø   i €ÿÿrù   i   €rú   rû   é€   r+   rS   iÿÿ  rƒ   l   ÿÿ r  z<Q)r   rü   rý   rÿ   r   rW   rX   )r  r  rÍ   r  s       r6   Úprepare_binary_integerz$MySQLProtocol.prepare_binary_integern  sß   € ð ˆ
ØˆØ�1Š9ˆ9Ø˜Š}ˆ}Ø�Ý&œ^�
�
Ø˜&’�Ø�Ý&œ_�
�
Ø˜+Ò%Ð%Ø�Ý&œ^�
�
à�Ý&Ô/�
�
àˆEØ˜Š|ˆ|Ø�Ý&œ^�
�
Ø˜%’�Ø�Ý&œ_�
�
Ø˜*Ò$Ð$Ø�Ý&œ^�
�
å&Ô/�
Ø�Ý”˜G UÑ+Ô+¨Z¸Ð?Ð?r8   ú'Union[datetime.date, datetime.datetime]c                ó"  — t          | t          j        ¦  «        rt          j        }n6t          | t          j        ¦  «        rt          j        }nt          d¦  «        ‚t          j        | j	        ¦  «        t          j
        | j        ¦  «        t          j
        | j        ¦  «        g}t          | t          j        ¦  «        r”|                     t          j
        | j        ¦  «        t          j
        | j        ¦  «        t          j
        | j        ¦  «        g¦  «         | j        dk    r,|                     t          j        | j        ¦  «        ¦  «         d                     |¦  «        }t          j
        t+          |¦  «        ¦  «        |z   |fS )aƒ  Prepare a timestamp object for the MySQL binary protocol

        This method prepares a timestamp of type datetime.datetime or
        datetime.date for sending over the MySQL binary protocol.
        A tuple is returned with the prepared value and field type
        as elements.

        Raises ValueError when the argument value is of invalid type.

        Returns a tuple.
        z2Argument must a datetime.datetime or datetime.dater   r8   )Ú
isinstancer  r   r  r   r7  rÀ   r   Ú	int2storer  r�   r  r  Úextendr  r  r  r  rY   r�   r[   rO   )r  r  ÚchunksÚpackeds       r6   Úprepare_binary_timestampz&MySQLProtocol.prepare_binary_timestamp�  sG  € õ �e�XÔ.Ñ/Ô/ð 	SÝ"Ô+ˆJˆJÝ˜�xœ}Ñ-Ô-ð 	SÝ"œˆJˆJåÐQÑRÔRÐRõ ŒO˜EœJÑ'Ô'ÝŒO˜EœKÑ(Ô(ÝŒO˜EœIÑ&Ô&ð
ˆõ �e�XÔ.Ñ/Ô/ð 		BØ�MŠMå”O E¤JÑ/Ô/Ý”O E¤LÑ1Ô1Ý”O E¤LÑ1Ô1ðñô ð ð Ô  1Ò$Ð$Ø—’�eœo¨eÔ.?Ñ@Ô@ÑAÔAÐAà—’˜&Ñ!Ô!ˆåŒ�s 6™{œ{Ñ+Ô+¨fÑ4°jÐ@Ð@r8   ú(Union[datetime.timedelta, datetime.time]c                óH  — t          | t          j        t          j        f¦  «        st	          d¦  «        ‚t
          j        }d}d}t          g ¦  «        }t          | t          j        ¦  «        r³| j        dk     rd}t          | j
        d¦  «        \  }}t          |d¦  «        \  }}|                     t          j        t          | j        ¦  «        ¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        g¦  «         | j        }nw|                     t          j        d¦  «        t          j        | j        ¦  «        t          j        | j        ¦  «        t          j        | j        ¦  «        g¦  «         | j        }|r'|                     t          j        |¦  «        ¦  «         |                     t          j        |¦  «        ¦  «         d                     |¦  «        }	t          j        t1          |	¦  «        ¦  «        |	z   |fS )a�  Prepare a time object for the MySQL binary protocol

        This method prepares a time object of type datetime.timedelta or
        datetime.time for sending over the MySQL binary protocol.
        A tuple is returned with the prepared value and field type
        as elements.

        Raises ValueError when the argument value is of invalid type.

        Returns a tuple.
        z3Argument must a datetime.timedelta or datetime.timer   Nr   i  é<   r8   )rR  r  r*  ÚtimerÀ   r   r8  r   r%  Údivmodr&  rT  r   r�   Úabsr�   r'  r  r  r  r  rY   Ú
appendleftr[   rO   )
r  r  Únegativer!  rU  r)  Ú	remainderÚminsÚsecsrV  s
             r6   Úprepare_binary_timez!MySQLProtocol.prepare_binary_time»  sÏ  € õ ˜%¥(Ô"4µh´mÐ!DÑEÔEð 	TÝÐRÑSÔSÐSå”^ˆ
ØˆØˆÝ$ R™yœyˆå�e�XÔ/Ñ0Ô0ð 	$ØŒz˜AŠ~ˆ~Ø�Ý!'¨¬°tÑ!<Ô!<ÑˆU�IÝ! )¨RÑ0Ô0‰LˆT�4Ø�MŠMå”O¥C¨¬
¡O¤OÑ4Ô4Ý”O EÑ*Ô*Ý”O DÑ)Ô)Ý”O DÑ)Ô)ð	ñô ð ð Ô$ˆCˆCà�MŠMå”O AÑ&Ô&Ý”O E¤JÑ/Ô/Ý”O E¤LÑ1Ô1Ý”O E¤LÑ1Ô1ð	ñô ð ð Ô#ˆCØð 	0Ø�MŠM�%œ/¨#Ñ.Ô.Ñ/Ô/Ð/à×Ò�%œ/¨(Ñ3Ô3Ñ4Ô4Ð4à—’˜&Ñ!Ô!ˆåŒ�s 6™{œ{Ñ+Ô+¨fÑ4°jÐ@Ð@r8   Ú	statementÚparamr–   c                óz   — d                      t          j        | ¦  «        t          j        |¦  «        |g¦  «        S )zMPrepare long data for prepared statements

        Returns a string.
        r8   )r[   r   r�   rS  )rd  re  r–   s      r6   Úprepare_stmt_send_long_dataz)MySQLProtocol.prepare_stmt_send_long_dataó  s1   € ð �xŠx�œ¨Ñ3Ô3µU´_ÀUÑ5KÔ5KÈTÐRÑSÔSÐSr8   rÙ   úSequence[BinaryProtocolType]Ú
parametersr   rÍ   Úlong_data_usedú Optional[Dict[int, Tuple[bool]]]Úquery_attrsú.Optional[List[Tuple[str, BinaryProtocolType]]]Úconverter_str_fallbackc	           
     óð  — d}	dgt          |¦  «        dz   dz  z  }
g }g }d}t          |¦  «        }g }|s|n	|t          z   }|dk    rd}|€i }|rEt          |¦  «        }|D ]\  }}|                     |¦  «         Œdgt          |¦  «        dz   dz  z  }
|s|�r�|t          |¦  «        k    rt	          d	¦  «        ‚t          |¦  «        D �]Z\  }}d}|€`|
|dz  xx         d|dz  z  z  cc<   |                     t          j        t          j	        ¦  «        t          j        |¦  «        z   ¦  «         Œj||v r*||         d         rt          j
        }�n.t          j        }�n t          |t          ¦  «        r0|                      |¦  «        \  }}}|                     |¦  «         �nÛt          |t          ¦  «        rZ|                     |¦  «        }|                     t          j        t          |¦  «        ¦  «        |z   ¦  «         t          j        }�nlt          |t$          ¦  «        rE|                     t          j        t          |¦  «        ¦  «        |z   ¦  «         t          j        }�nt          |t&          ¦  «        r…|                     t          j        t          t          |¦  «                             |¦  «        ¦  «        ¦  «        t          |¦  «                             |¦  «        z   ¦  «         t          j        }�nxt          |t*          ¦  «        r6|                     t-          j        d
|¦  «        ¦  «         t          j        }�n-t          |t2          j        t2          j        f¦  «        r.|                      |¦  «        \  }}|                     |¦  «         nÙt          |t2          j        t2          j        f¦  «        r.|                      |¦  «        \  }}|                     |¦  «         n…|rft          |¦  «                             |¦  «        }|                     t          j        t          |¦  «        ¦  «        |z   ¦  «         t          j        }nt?          d|j         j!        › d�¦  «        ‚|                     t          j        |¦  «        t          j        |¦  «        z   ¦  «         |rd|dz   |k    r[|||z
           d                              |¦  «        }|                     t          j        t          |¦  «        ¦  «        |z   ¦  «         �Œ\t          j"        |¦  «        t          j        |¦  «        t          j"        |	¦  «        g}|�|t          |¦  «        z   }n|}|ré|�'|                     t          j        |¦  «        ¦  «         | #                    d„ |
D ¦   «         ¦  «         |                     t          j        d¦  «        ¦  «         d}|D ][}|                     |¦  «         |�=|dz   |k    r|                     |||z
           ¦  «         n|                     d¦  «         |dz  }Œ\|D ]}|                     |¦  «         Œd $                    |¦  «        S )z6Make a MySQL packet with the Statement Execute commandr   r   rí   r¥   r8   Úutf8mb4r  NzTFailed executing prepared statement: data values does not match number of parametersr  z&MySQL binary protocol can not handle 'z	' objectsc                ó8   — g | ]}t          j        d |¦  «        ‘ŒS )ÚB)rW   rX   )rP   Úbits     r6   rÜ   z3MySQLProtocol.make_stmt_execute.<locals>.<listcomp>l  s$   € ÐHÐHÐH°S�6œ; s¨CÑ0Ô0ÐHÐHÐHr8   r;   )%rO   r   ÚlistrY   r   r3  r   r�   r   ÚNULLÚBLOBÚSTRINGrR  ra   rO  ri   rZ   rv   r0   r   r5  ÚfloatrW   rX   r	  r  r   rW  r*  r[  rc  r   Ú	__class__Ú__name__r�   rT  r[   )rÒ   r˜   r–   ri  rÍ   rj  r{   rl  rn  Úiteration_countr?  rV   ÚtypesrV  Údata_lenÚquery_attr_namesrË   Úattr_valr@  r  Ú_flagsr  ru   rœ   Úparameter_countrÆ   Úa_typeÚa_values                               r6   Úmake_stmt_executezMySQLProtocol.make_stmt_executeû  sY  € ð ˆØ�c�c $™iœi¨!™m°Ñ1Ñ2ˆØ ˆØˆØˆÝ�t‘9”9ˆØ(*ÐØ(ÐO��¨eÕ6OÑ.Oˆà�iÒÐØˆGàÐ!ØˆNàð 	7Ý˜‘:”:ˆDØ*ð &ð &‘��8Ø—’˜HÑ%Ô%Ð%Ð%Ø˜#¥# d¡)¤)¨a¡-°AÑ!5Ñ6ˆKàð >	L˜ñ >	LØ�3˜z™?œ?Ò*Ð*Ý$ð2ñô ð õ (¨™oœoð 8Lñ 8L‘
��UØ�Ø�=Ø ¨¡Ð+Ð+Ô+¨q°S¸1±W©~Ñ=Ð+Ð+Ñ+Ø—L’LÝœ­	¬Ñ7Ô7½%¼/È&Ñ:QÔ:QÑQñô ð ð Ø˜.Ð(Ð(Ø% cÔ*¨1Ô-ð 6å%.¤^˜
™
õ &/Ô%5˜
™
Ý ¥sÑ+Ô+ð %ð
 ×3Ò3°EÑ:Ô:ñ	ØØ"Øà—M’M &Ñ)Ô)Ð)Ñ)Ý ¥sÑ+Ô+ð Ø!ŸLšL¨Ñ1Ô1�EØ—M’M¥%¤,­s°5©z¬zÑ":Ô":¸UÑ"BÑCÔCÐCÝ!*Ô!1�J‘JÝ ¥uÑ-Ô-ð Ø—M’M¥%¤,­s°5©z¬zÑ":Ô":¸UÑ"BÑCÔCÐCÝ!*Ô!1�J‘JÝ ¥wÑ/Ô/ð Ø—M’MÝœ¥S­¨U©¬×):Ò):¸7Ñ)CÔ)CÑ%DÔ%DÑEÔEÝ˜e™*œ*×+Ò+¨GÑ4Ô4ñ5ñô ð õ "+Ô!2�J‘JÝ ¥uÑ-Ô-ð Ø—M’M¥&¤+¨d°EÑ":Ô":Ñ;Ô;Ð;Ý!*Ô!1�J‘JÝ ­Ô(9½8¼=Ð'IÑJÔJð Ø+/×+HÒ+HÈÑ+OÔ+OÑ(�V˜ZØ—M’M &Ñ)Ô)Ð)Ð)Ý ­Ô(:½H¼MÐ'JÑKÔKð Ø+/×+CÒ+CÀEÑ+JÔ+JÑ(�V˜ZØ—M’M &Ñ)Ô)Ð)Ð)Ø+ð Ý ™JœJ×-Ò-¨gÑ6Ô6�EØ—M’M¥%¤,­s°5©z¬zÑ":Ô":¸UÑ"BÑCÔCÐCÝ!*Ô!1�J�Jå*ð@Ø!œOÔ4ð@ð @ð @ñô ð ð —’�Uœ_¨ZÑ8Ô8½5¼?È6Ñ;RÔ;RÑRÑSÔSÐSØð L 3¨¡7¨XÒ#5Ð#5Ø& s¨X¡~Ô6°qÔ9×@Ò@ÀÑIÔI�DØ$×+Ò+­E¬L½¸T¹¼Ñ,CÔ,CÀdÑ,JÑKÔKÐKùåŒO˜LÑ)Ô)ÝŒO˜EÑ"Ô"ÝŒO˜OÑ,Ô,ð
ˆð Ð"Ø&­¨[Ñ)9Ô)9Ñ9ˆOˆOà&ˆOØð 	'àÐ&Ø—’�eœl¨?Ñ;Ô;Ñ<Ô<Ð<à�MŠMÐHÐH¸KÐHÑHÔHÑIÔIÐIØ�MŠM�%œ/¨!Ñ,Ô,Ñ-Ô-Ð-àˆEØð ð �Ø—’˜fÑ%Ô%Ð%ð
 Ð*Ø˜q‘y 8Ò+Ð+ØŸšÐ&6°u¸xÑ7GÔ&HÑIÔIÐIÐIàŸš gÑ.Ô.Ð.Ø˜‘
��à!ð 'ð '�Ø—’˜gÑ&Ô&Ð&Ð&à�xŠx˜ÑÔÐr8   )r/   r0   r1   r0   )r/   r0   r1   r9   )rI   rJ   r1   r0   )r`   ra   rb   rc   r1   r0   )NFN)rg   r0   rh   ri   rj   ri   rk   ri   rl   rc   rm   rn   ro   rp   r1   rq   )rz   r#   rh   ri   rj   ri   rb   rc   r{   ra   r`   ra   r|   ra   rk   rc   rl   rc   rI   r}   r~   rn   rm   rn   ro   rp   r1   rq   )r{   ra   r`   ra   r|   ra   r1   r0   rN   )r’   ra   r“   r”   r1   r0   )r   )r˜   ra   r™   ra   r1   r0   )rœ   r0   r1   r#   )rœ   r0   r1   r$   )rœ   r0   r1   rÃ   )r¦   )rœ   r0   rÈ   ri   r1   r!   )rœ   r0   r1   r"   )T)rœ   r0   rÖ   rn   r1   r%   )r   N)
rç   r'   rè   ré   rÆ   ra   rê   rÃ   r1   rë   )rœ   r0   rõ   r!   r1   rö   )rœ   r0   rõ   r!   r1   r  )r  )rœ   r0   r{   ri   r1   r  )rœ   r0   r  ra   r1   r  )rœ   r0   r1   r#  )r-  r.  rœ   r0   r{   ri   r1   r/  )r   r¦   N)rç   r'   rB  r.  rÆ   ra   r{   ri   rê   rÃ   r1   rC  )rœ   r0   r1   rF  )r  ra   r1   rL  )r  rP  r1   rö   )r  rX  r1   rö   )rd  ra   re  ra   r–   r0   r1   r0   )rÙ   rÙ   r   Nr  NF)r˜   ra   r–   rh  ri  r   rÍ   ra   rj  rk  r{   ri   rl  rm  rn  rn   r1   r0   )%rz  Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr7   rC   rH   r_   rf   ry   ÚDEFAULT_CHARSET_IDÚDEFAULT_MAX_ALLOWED_PACKETr�   r‘   r—   r›   r¶   rÂ   rÇ   rÎ   rÕ   ræ   rô   r  r
  r  r"  r,  rA  rE  rK  rO  rW  rc  rg  r„  rÙ   r8   r6   r.   r.   V   s}  € € € € € ðð ð
 ðð ð ñ „\ðð* ð)ð )ð )ñ „\ð)ð4 ð)ð )ð )ñ „\ð)ð4 ð+ð +ð +ñ „\ð+ð< ð
ð 
ð 
ñ „\ð
ð( ð ,0Ø!Ø26ð:,ð :,ð :,ð :,ñ „\ð:,ðx ð
 #'Ø)ØØ"<Ø%)Ø+/Ø/3Ø',Ø!Ø26ðw9ð w9ð w9ð w9ñ „\ðw9ðr à)ØØ"<ð
ð 
ð 
ð 
ñ „\ð
ð@ ð=ð =ð =ð =ñ „\ð=ð
 ðEð Eð Eð Eñ „\ðEð ð1ð 1ð 1ñ „\ð1ðf ðð ð ñ „\ðð, ðIð Ið Iñ „\ðIð ð
ð 
ð 
ð 
ñ „\ð
ð@ð ð ð ð( ðð ð ð ñ „\ðð@ Ø&*ð.ð .ð .ð .ð .ð` ðNð Nð Nñ „\ðNð2 ðNð Nð Nñ „\ðNð à&,ð8ð 8ð 8ð 8ñ „\ð8ð ð-ð -ð -ñ „\ð-ð> ð+ð +ð +ñ „\ð+ð4 ð	8ð 8ð 8ð 8ð 8ð| ØØ&*ð$ð $ð $ð $ð $ðL ðð ð ñ „\ðð" ð@ð @ð @ñ „\ð@ðB ð(Að (Að (Añ „\ð(AðT ð5Að 5Að 5Añ „\ð5Aðn ðTð Tð Tñ „\ðTð .0Ø!ØØ;?ØØFJØ',ðE ð E ð E ð E ð E ð E ð E r8   r.   )<r‡  Ú
__future__r   r  rW   Úcollectionsr   Údecimalr   r   Útypingr   r   r	   r
   r   r   r   r   r   rL   r   Ú	constantsr   r   r   r   r   Ú
conversionr   Úerrorsr   r   r   r   r   Úpluginsr   r   Úplugins.caching_sha2_passwordr   r|  r    r!   r"   r#   r$   r%   r&   Únetworkr'   rª   r?   r5   Ú	OK_STATUSrF   Ú
ERR_STATUSr‰  rŠ  r.   rÙ   r8   r6   ú<module>r—     sx  ðð: 3Ð 2Ø "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€à Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 'Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø MÐ MÐ MÐ MÐ MÐ Mðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð %Ø$Ð$Ð$Ð$Ð$Ð$ð Ð ØÐ ØÐ Ø€	Ø€
Ø€
ØÐ Ø'Ð ðj ð j ð j ð j ð j ñ j ô j ð j ð j ð j r8   