§
    s—Êi±3  ã                   óz   — d dl Z d dlZd dlZd dlmZ d dlmZ d„ Zd„ Z G d„ de	¦  «        Z
 G d„ d	e	¦  «        ZdS )
é    N)Údeepcopy)ÚBytesIOc                 óJ   — | d         |d         k     o| d         |d         k    S ©Nr   é   © ©Úi1Úi2s     ú\/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/pymysqlreplication/gtid.pyÚoverlapr      s%   € ØˆaŒ5�2�a”5Š=Ð*˜R œU R¨¤Uš]Ð*ó    c                 óJ   — |d         | d         k    o|d         | d         k    S r   r   r	   s     r   Úcontainsr      s%   € ØˆaŒ5�B�q”EŠ>Ð,˜b œe r¨!¤ušnÐ,r   c                   óÄ   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Z	dg fd„Z
d	„ Zd
„ Zd„ Zd„ Zed„ ¦   «         Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚGtida  A mysql GTID is composed of a server-id and a set of right-open
    intervals [a,b), and represent all transactions x that happened on
    server SID such as

        a <= x < b

    The human representation of it, though, is either represented by a
    single transaction number A=a (when only one transaction is covered,
    ie b = a+1)

        SID:A

    Or a closed interval [A,B] for at least two transactions (note, in that
    case, that b=B+1)

        SID:A-B

    We can also have a mix of ranges for a given SID:
        SID:1-2:4:6-74

    For convenience, a Gtid accepts adding Gtid's to it and will merge
    the existing interval representation. Adding TXN 3 to the human
    representation above would produce:

        SID:1-4:6-74

    and adding 5 to this new result:

        SID:1-74

    Raises:
        ValueError: If construction parsing from string fails
        Exception: Adding an already present transaction number (one that overlaps).
        Exception: Adding a Gtid with a different SID.
    c                 óî   — t          j        d| ¦  «        }|st          d| ›�¦  «        ‚t          |                     d¦  «        ¦  «        }t          |                     d¦  «        p|¦  «        }||dz   fS )zÛ
        We parse a human-generated string here. So our end value b
        is incremented to conform to the internal representation format.

        Raises:
            - ValueError if GTID format is incorrect
        z^([0-9]+)(?:-([0-9]+))?$úGTID format is incorrect: r   é   )ÚreÚsearchÚ
ValueErrorÚintÚgroup)ÚintervalÚmÚaÚbs       r   Úparse_intervalzGtid.parse_interval5   ss   € õ ŒIÐ0°(Ñ;Ô;ˆØð 	HÝÐF¸(ÐFÐFÑGÔGÐGÝ�—’˜‘
”
‰OŒOˆÝ�—’˜‘
”
�˜aÑ Ô ˆØ�!�a‘%ˆxˆr   c                 óþ   — t          j        d| ¦  «        }|st          d| ›�¦  «        ‚|                     d¦  «        }|                     d¦  «        }d„ |                     d¦  «        dd…         D ¦   «         }||fS )zxParse a GTID from mysql textual format.

        Raises:
            - ValueError: if GTID format is incorrect.
        zG^([0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12})((?::[0-9-]+)+)$r   r   r   c                 óB   — g | ]}t                                |¦  «        ‘ŒS r   )r   r   ©Ú.0Úxs     r   ú
<listcomp>zGtid.parse.<locals>.<listcomp>W   s&   € ÐUÐUÐU°q�D×/Ò/°Ñ2Ô2ÐUÐUÐUr   ú:N)r   r   r   r   Úsplit)Úgtidr   ÚsidÚ	intervalsÚintervals_parseds        r   Úparsez
Gtid.parseE   s•   € õ ŒIðàñ
ô 
ˆð
 ð 	DÝÐB¸$ÐBÐBÑCÔCÐCà�gŠg�a‰jŒjˆØ—G’G˜A‘J”Jˆ	àUÐU¸I¿OºOÈCÑ<PÔ<PÐQRÐQSÐQSÔ<TÐUÑUÔUÐàÐ$Ð$Ð$r   c                 óÌ  ‡— g }‰d         ‰d         k    rt          d‰› �¦  «        ‚t          ˆfd„| j        D ¦   «         ¦  «        rt          d‰› �¦  «        ‚t          | j        ¦  «        D ]]}‰d         |d         k    r|d         ‰d         fŠŒ%‰d         |d         k    r‰d         |d         fŠŒH|                     |¦  «         Œ^t          |‰gz   ¦  «        | _        dS )zÊ
        Use the internal representation format and add it
        to our intervals, merging if required.

        Raises:
            Exception: if Malformated interval or Overlapping interval
        r   r   úMalformed interval c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S ©N©r   ©r#   r$   Úitvls     €r   ú	<genexpr>z&Gtid.__add_interval.<locals>.<genexpr>h   s-   øè è € Ð8Ð8 A�w�q˜$ÑÔÐ8Ð8Ð8Ð8Ð8Ð8r   zOverlapping interval N)Ú	ExceptionÚanyr*   ÚsortedÚappend©Úselfr3   ÚnewÚexistings    `  r   Ú__add_intervalzGtid.__add_interval[   s  ø€ ð ˆà�Œ7�T˜!”WÒÐÝÐ8°$Ð8Ð8Ñ9Ô9Ð9åÐ8Ð8Ð8Ð8¨¬Ð8Ñ8Ô8Ñ8Ô8ð 	<ÝÐ:°DÐ:Ð:Ñ;Ô;Ð;õ ˜tœ~Ñ.Ô.ð 		!ð 		!ˆHØ�AŒw˜( 1œ+Ò%Ð%Ø  œ T¨!¤WÐ-�Øà�AŒw˜( 1œ+Ò%Ð%Ø˜Qœ ¨!¤Ð-�Øà�JŠJ�xÑ Ô Ð Ð å  t f¡Ñ-Ô-ˆŒˆˆr   c                 óô  ‡— g }‰d         ‰d         k    rt          d‰› �¦  «        ‚t          ˆfd„| j        D ¦   «         ¦  «        sdS t          | j        ¦  «        D ]’}t	          |‰¦  «        rk|d         ‰d         k     r#|                     |d         ‰d         f¦  «         |d         ‰d         k    r#|                     ‰d         |d         f¦  «         Œ}|                     |¦  «         Œ“|| _        dS )zdUsing the internal representation, remove an interval

        Raises: Exception if itvl malformatedr   r   r.   c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S r0   r1   r2   s     €r   r4   z&Gtid.__sub_interval.<locals>.<genexpr>‚   s-   øè è € Ð<Ð<¨•7˜1˜dÑ#Ô#Ð<Ð<Ð<Ð<Ð<Ð<r   N)r5   r6   r*   r7   r   r8   r9   s    `  r   Ú__sub_intervalzGtid.__sub_intervaly   s  ø€ ð ˆà�Œ7�T˜!”WÒÐÝÐ8°$Ð8Ð8Ñ9Ô9Ð9åÐ<Ð<Ð<Ð<¨T¬^Ð<Ñ<Ô<Ñ<Ô<ð 	àˆFõ ˜tœ~Ñ.Ô.ð 	%ð 	%ˆHÝ�x Ñ&Ô&ð %Ø˜A”;  a¤Ò(Ð(Ø—J’J ¨¤¨T°!¬WÐ5Ñ6Ô6Ð6Ø˜A”;  a¤Ò(Ð(Ø—J’J  Q¤¨°!¬Ð5Ñ6Ô6Ð6øà—
’
˜8Ñ$Ô$Ð$Ð$àˆŒˆˆr   c                 óh   ‡ — |j         ‰ j         k    rdS t          ˆ fd„|j        D ¦   «         ¦  «        S )z¿Test if other is contained within self.
        First we compare sid they must be equals.

        Then we search if intervals from other are contained within
        self intervals.
        Fc              3   óZ   •‡K  — | ]$Št          ˆfd „‰j        D ¦   «         ¦  «        V — Œ%dS )c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S r0   )r   )r#   ÚmeÚthems     €r   r4   z.Gtid.__contains__.<locals>.<genexpr>.<genexpr>�   s-   øè è € Ð<Ð< r•˜˜TÑ"Ô"Ð<Ð<Ð<Ð<Ð<Ð<r   N)r6   r*   )r#   rE   r:   s    @€r   r4   z$Gtid.__contains__.<locals>.<genexpr>œ   sT   øøè è € ð 
ð 
ØAE�CÐ<Ð<Ð<Ð<¨T¬^Ð<Ñ<Ô<Ñ<Ô<ð
ð 
ð 
ð 
ð 
ð 
r   )r)   Úallr*   ©r:   Úothers   ` r   Ú__contains__zGtid.__contains__’   sS   ø€ ð Œ9˜œÒ Ð Ø�5åð 
ð 
ð 
ð 
ØINÌð
ñ 
ô 
ñ 
ô 
ð 	
r   Nc                 óš   — |r|}nt                                |¦  «        \  }}|| _        g | _        |D ]}|                      |¦  «         Œd S r0   )r   r,   r)   r*   Ú_Gtid__add_interval)r:   r(   r)   r*   r3   s        r   Ú__init__zGtid.__init__    sd   € Øð 	.Ø!ˆIˆIå!ŸZšZ¨Ñ-Ô-‰NˆC�àˆŒØˆŒØð 	&ð 	&ˆDØ×Ò Ñ%Ô%Ð%Ð%ð	&ð 	&r   c                 óÀ   — | j         |j         k    rt          d| j         › d|j         › �¦  «        ‚t          | ¦  «        }|j        D ]}|                     |¦  «         Œ|S )zvInclude the transactions of this gtid.

        Raises:
           Exception: if the attempted merge has different SIDzAttempt to merge different SID z != )r)   r5   r   r*   rK   ©r:   rH   Úresultr3   s       r   Ú__add__zGtid.__add__«   sn   € ð
 Œ8�u”yÒ Ð ÝÐW¸d¼hÐWÐWÈEÌIÐWÐWÑXÔXÐXå˜$‘”ˆà”Oð 	(ð 	(ˆDØ×!Ò! $Ñ'Ô'Ð'Ð'àˆr   c                 ó†   — t          | ¦  «        }| j        |j        k    r|S |j        D ]}|                     |¦  «         Œ|S )zFRemove intervals. Do not raise, if different SID simply
        ignore)r   r)   r*   Ú_Gtid__sub_intervalrN   s       r   Ú__sub__zGtid.__sub__º   sP   € õ ˜$‘”ˆØŒ8�u”yÒ Ð ØˆMà”Oð 	(ð 	(ˆDØ×!Ò! $Ñ'Ô'Ð'Ð'àˆr   c                 óp   — d„ }d                      t          || j        ¦  «        ¦  «        }| j        › d|› �S )zvWe represent the human value here - a single number
        for one transaction, or a closed interval (decrementing b)c                 ó‚   — | d         dz   | d         k    r| d         › d| d         dz
  › �S t          | d         ¦  «        S )Nr   r   Ú-©Ústr©r$   s    r   Úformat_intervalz%Gtid.__str__.<locals>.format_intervalÊ   sI   € Ø�Œt�a‰x˜1˜Qœ4ÒÐØ˜Aœ$Ð+Ð+  1¤¨¡Ð+Ð+Ð+Ý�q˜”t‘9”9Ðr   r&   )ÚjoinÚmapr*   r)   )r:   rZ   Úinterval_strings      r   Ú__str__zGtid.__str__Æ   sF   € ð	ð 	ð 	ð
 Ÿ(š(¥3 ¸¼Ñ#GÔ#GÑHÔHˆØ”(Ð.Ð.˜_Ð.Ð.Ð.r   c                 ó   — d| › d�S )Nz<Gtid "z">r   ©r:   s    r   Ú__repr__zGtid.__repr__Ò   s   € Ø!˜Ð!Ð!Ð!Ð!r   c                 ó6   — ddt          | j        ¦  «        z  z   S )Né   é   )Úlenr*   r`   s    r   Úencoded_lengthzGtid.encoded_lengthÕ   s(   € ððå�$”.Ñ!Ô!ñ"ñ"ð	
r   c                 óJ  — d}|t          j        | j                             dd¦  «        ¦  «        z  }|t	          j        dt          | j        ¦  «        ¦  «        z  }| j        D ]>}|t	          j        d|d         ¦  «        z  }|t	          j        d|d         ¦  «        z  }Œ?|S )a·  Encode a Gtid in binary
        Bytes are in **little endian**.

        Format:

        - sid will be uncoded as hex-binary without the dashes as a [u8; 16]
        - size of the interval list as a u64
        - all the interval as a pair: (start: u64, end: u64).

        ## Diagram

        ```txt
        Alligned on u64 bit.
        +-+-+-+-+-+-+-+-+-+-+
        | sid [16;u8]       |
        |                   |
        +-+-+-+-+-+-+-+-+-+-+
        | intervals_len u64 |
        +-+-+-+-+-+-+-+-+-+-+
        |start u64             <-+
        - - - - - - - - - - -    + Repeated
        |stop u64              <-+  interval_len times
        - - - - - - - - - - -
        ```
        r   rV   Ú ú<Qr   r   )ÚbinasciiÚ	unhexlifyr)   ÚreplaceÚstructÚpackre   r*   )r:   Úbufferr   s      r   ÚencodezGtid.encodeß   sœ   € ð4 ˆà•(Ô$ T¤X×%5Ò%5°c¸2Ñ%>Ô%>Ñ?Ô?Ñ?ˆà•&”+˜d¥C¨¬Ñ$7Ô$7Ñ8Ô8Ñ8ˆàœð 	5ð 	5ˆHà•f”k $¨°¬Ñ4Ô4Ñ4ˆFà•f”k $¨°¬Ñ4Ô4Ñ4ˆFˆFàˆr   c                 ó¨  ‡	— t          |t          ¦  «        s
J d¦   «         ‚d}|t          j        |                     d¦  «        ¦  «        z   }|dz   }|t          j        |                     d¦  «        ¦  «        z   }|dz   }|t          j        |                     d¦  «        ¦  «        z   }|dz   }|t          j        |                     d¦  «        ¦  «        z   }|dz   }|t          j        |                     d¦  «        ¦  «        z   }t          j        d|                     d¦  «        ¦  «        \  }g }t          d	|¦  «        D ]G}t          j        d
|                     d¦  «        ¦  «        \  }}|                     ||dz
  f¦  «         ŒHd„ Š	d 	                    ˆ	fd„|D ¦   «         ¦  «        } | | 
                    d¦  «        › d|› �¦  «        S )zLDecode from binary a Gtid

        :param BytesIO payload to decode
        ú#payload is expected to be a BytesIOr   é   ó   -r   é   ri   é   r   z<QQrd   r   c                 óX   — t          | t          ¦  «        r| d         › d| d         › �S | › S )Nr   rV   r   )Ú
isinstanceÚtuplerY   s    r   rZ   z$Gtid.decode.<locals>.format_interval  s7   € Ý˜!�UÑ#Ô#ð (Ø˜Aœ$Ð'Ð'  1¤Ð'Ð'Ð'Ø�6ˆMr   r&   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   )r#   r$   rZ   s     €r   r%   zGtid.decode.<locals>.<listcomp>$  s#   ø€ Ð$KÐ$KÐ$K¸A _ _°QÑ%7Ô%7Ð$KÐ$KÐ$Kr   Úascii)rx   r   rj   ÚhexlifyÚreadrm   ÚunpackÚranger8   r[   Údecode)
ÚclsÚpayloadr)   Ún_intervalsr*   ÚiÚstartÚendÚintervals_stringrZ   s
            @r   r€   zGtid.decode  sÇ  ø€ õ ˜'¥7Ñ+Ô+ÐRÐRÐ-RÑRÔRÐRØˆØ•HÔ$ W§\¢\°!¡_¤_Ñ5Ô5Ñ5ˆØ�D‰jˆØ•HÔ$ W§\¢\°!¡_¤_Ñ5Ô5Ñ5ˆØ�D‰jˆØ•HÔ$ W§\¢\°!¡_¤_Ñ5Ô5Ñ5ˆØ�D‰jˆØ•HÔ$ W§\¢\°!¡_¤_Ñ5Ô5Ñ5ˆØ�D‰jˆØ•HÔ$ W§\¢\°!¡_¤_Ñ5Ô5Ñ5ˆåœ t¨W¯\ª\¸!©_¬_Ñ=Ô=‰ˆØˆ	Ý�q˜+Ñ&Ô&ð 	/ð 	/ˆAÝœ u¨g¯lªl¸2Ñ.>Ô.>Ñ?Ô?‰JˆE�3Ø×Ò˜e S¨1¡WÐ-Ñ.Ô.Ð.Ð.ð	ð 	ð 	ð
 Ÿ8š8Ð$KÐ$KÐ$KÐ$KÀÐ$KÑ$KÔ$KÑLÔLÐàˆs�c—j’j Ñ)Ô)Ð>Ð>Ð,<Ð>Ð>Ñ?Ô?Ð?r   c                 óF   — |j         | j         k    rdS | j        |j        k    S )NF©r)   r*   rG   s     r   Ú__eq__zGtid.__eq__(  s%   € ØŒ9˜œÒ Ð Ø�5ØŒ~ ¤Ò0Ð0r   c                 ób   — |j         | j         k    r| j         |j         k     S | j        |j        k     S r0   r‰   rG   s     r   Ú__lt__zGtid.__lt__-  ó/   € ØŒ9˜œÒ Ð Ø”8˜eœiÒ'Ð'ØŒ~ ¤Ò/Ð/r   c                 ób   — |j         | j         k    r| j         |j         k    S | j        |j        k    S r0   r‰   rG   s     r   Ú__le__zGtid.__le__2  ó/   € ØŒ9˜œÒ Ð Ø”8˜uœyÒ(Ð(ØŒ~ ¤Ò0Ð0r   c                 ób   — |j         | j         k    r| j         |j         k    S | j        |j        k    S r0   r‰   rG   s     r   Ú__gt__zGtid.__gt__7  r�   r   c                 ób   — |j         | j         k    r| j         |j         k    S | j        |j        k    S r0   r‰   rG   s     r   Ú__ge__zGtid.__ge__<  r�   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r,   rK   rR   rI   rL   rP   rS   r^   ra   Úpropertyrf   rp   Úclassmethodr€   rŠ   rŒ   r�   r’   r”   r   r   r   r   r      sn  € € € € € ð"ð "ðH ðð ñ „\ðð ð%ð %ñ „\ð%ð*.ð .ð .ð<ð ð ð2
ð 
ð 
ð "&°ð 	&ð 	&ð 	&ð 	&ðð ð ð
ð 
ð 
ð
/ð 
/ð 
/ð"ð "ð "ð ð
ð 
ñ „Xð
ð&ð &ð &ðP ð@ð @ñ „[ð@ð@1ð 1ð 1ð
0ð 0ð 0ð
1ð 1ð 1ð
0ð 0ð 0ð
1ð 1ð 1ð 1ð 1r   r   c                   ór   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
d„ ¦   «         Zd	„ ZeZed
„ ¦   «         Zd„ ZdS )ÚGtidSetzRepresents a set of Gtidc                 óÎ   ‡— d„ Š|s	g | _         dS t          |t          t          f¦  «        rˆfd„|D ¦   «         | _         dS d„ |                     d¦  «        D ¦   «         | _         dS )a  
        Construct a GtidSet initial state depends of the nature of `gtid_set` param.

        params:
          - gtid_set:
            - None: then the GtidSet start empty
            - a set of Gtid either as a their textual representation separated by comma
            - A set or list of gtid
            - A GTID alone.

        Raises:
          - ValueError: if `gtid_set` is a string separated with comma, but with malformated Gtid.
          - Exception: if Gtid interval are either malformated or overlapping
        c                 ót   — t          | t          ¦  «        r| S t          |                      d¦  «        ¦  «        S )Nú 
)rx   r   Ústrip)Úelements    r   Ú_to_gtidz"GtidSet.__init__.<locals>._to_gtidU  s3   € Ý˜'¥4Ñ(Ô(ð Ø�Ý˜Ÿš eÑ,Ô,Ñ-Ô-Ð-r   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   )r#   r$   r£   s     €r   r%   z$GtidSet.__init__.<locals>.<listcomp>]  s!   ø€ Ð8Ð8Ð8¨!˜(˜( 1™+œ+Ð8Ð8Ð8r   c                 óR   — g | ]$}t          |                     d ¦  «        ¦  «        ‘Œ%S )r    )r   r¡   r"   s     r   r%   z$GtidSet.__init__.<locals>.<listcomp>_  s*   € ÐLÐLÐL°1�$˜qŸwšw u™~œ~Ñ.Ô.ÐLÐLÐLr   Ú,N)Úgtidsrx   ÚlistÚsetr'   )r:   Úgtid_setr£   s     @r   rL   zGtidSet.__init__E  sƒ   ø€ ð 	.ð 	.ð 	.ð
 ð 	MØˆDŒJˆJˆJÝ˜¥4­ +Ñ.Ô.ð 	MØ8Ð8Ð8Ð8¨xÐ8Ñ8Ô8ˆDŒJˆJˆJàLÐL¸¿ºÀsÑ8KÔ8KÐLÑLÔLˆDŒJˆJˆJr   c                 óø   — g }| j         D ]@}|j        |j        k    r|                     ||z   ¦  «         Œ+|                     |¦  «         ŒA|j        d„ |D ¦   «         vr|                     |¦  «         || _         dS )z!Insert a Gtid in current GtidSet.c              3   ó$   K  — | ]}|j         V — Œd S r0   )r)   r"   s     r   r4   z%GtidSet.merge_gtid.<locals>.<genexpr>i  s$   è è € Ð5Ð5 a˜AœEÐ5Ð5Ð5Ð5Ð5Ð5r   N)r§   r)   r8   )r:   r(   Ú	new_gtidsr<   s       r   Ú
merge_gtidzGtidSet.merge_gtida  s”   € àˆ	Øœ
ð 	+ð 	+ˆHØŒ|˜tœxÒ'Ð'Ø× Ò  ¨D¡Ñ1Ô1Ð1Ð1à× Ò  Ñ*Ô*Ð*Ð*ØŒ8Ð5Ð5¨9Ð5Ñ5Ô5Ð5Ð5Ø×Ò˜TÑ"Ô"Ð"ØˆŒ
ˆ
ˆ
r   c                 óè   ‡ ‡— t          ‰t          ¦  «        r t          ˆ fd„‰j        D ¦   «         ¦  «        S t          ‰t          ¦  «        r t          ˆfd„‰ j        D ¦   «         ¦  «        S t          ‚)zØ
        Test if self contains other, could be a GtidSet or a Gtid.

        Raises:
           - NotImplementedError other is not a GtidSet neither a Gtid,
            please convert it first to one of them
        c              3   ó*   •K  — | ]}|‰j         v V — Œd S r0   ©r§   )r#   Ú
other_gtidr:   s     €r   r4   z'GtidSet.__contains__.<locals>.<genexpr>v  s*   øè è € ÐNÐN°J�z T¤ZÐ/ÐNÐNÐNÐNÐNÐNr   c              3   ó    •K  — | ]}‰|v V — Œ	d S r0   r   )r#   r$   rH   s     €r   r4   z'GtidSet.__contains__.<locals>.<genexpr>x  s'   øè è € Ð6Ð6 a�u �zÐ6Ð6Ð6Ð6Ð6Ð6r   )rx   r�   rF   r§   r   r6   ÚNotImplementedErrorrG   s   ``r   rI   zGtidSet.__contains__m  s{   øø€ õ �e�WÑ%Ô%ð 	OÝÐNÐNÐNÐNÀ%Ä+ÐNÑNÔNÑNÔNÐNÝ�e�TÑ"Ô"ð 	7ÝÐ6Ð6Ð6Ð6¨4¬:Ð6Ñ6Ô6Ñ6Ô6Ð6Ý!Ð!r   c                 ó$  — t          |t          ¦  «        r+t          | j        ¦  «        }|                     |¦  «         |S t          |t          ¦  «        r5t          | j        ¦  «        }|j        D ]}|                     |¦  «         Œ|S t
          ‚)zá
        Merge current instance with an other GtidSet or with a Gtid alone.

        Raises:
            - NotImplementedError other is not a GtidSet neither a Gtid,
            please convert it first to one of them
        )rx   r   r�   r§   r®   r´   )r:   rH   r;   r(   s       r   rP   zGtidSet.__add__{  sŽ   € õ �e�TÑ"Ô"ð 	Ý˜$œ*Ñ%Ô%ˆCØ�NŠN˜5Ñ!Ô!Ð!ØˆJå�e�WÑ%Ô%ð 	Ý˜$œ*Ñ%Ô%ˆCØœð %ð %�Ø—’˜tÑ$Ô$Ð$Ð$ØˆJå!Ð!r   c                 óJ   — d                      d„ | j        D ¦   «         ¦  «        S )z<
        Returns a comma separated string of gtids.
        r¦   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r0   rW   r"   s     r   r4   z"GtidSet.__str__.<locals>.<genexpr>”  s(   è è € Ð3Ð3 1�˜A™œÐ3Ð3Ð3Ð3Ð3Ð3r   )r[   r§   r`   s    r   r^   zGtidSet.__str__�  s'   € ð �xŠxÐ3Ð3¨¬
Ð3Ñ3Ô3Ñ3Ô3Ð3r   c                 ó   — d| j         › d�S )Nz	<GtidSet Ú>r±   r`   s    r   ra   zGtidSet.__repr__–  s   € Ø(˜4œ:Ð(Ð(Ð(Ð(r   c                 óD   — dt          d„ | j        D ¦   «         ¦  «        z   S )Nrv   c              3   ó$   K  — | ]}|j         V — Œd S r0   )rf   r"   s     r   r4   z)GtidSet.encoded_length.<locals>.<genexpr>›  s%   è è € Ð<Ð<¨A�qÔ'Ð<Ð<Ð<Ð<Ð<Ð<r   )Úsumr§   r`   s    r   rf   zGtidSet.encoded_length™  s&   € à•3Ð<Ð<°´Ð<Ñ<Ô<Ñ<Ô<Ñ<Ð<r   c                 ó    — dt          j        dt          | j        ¦  «        ¦  «        d                     d„ | j        D ¦   «         ¦  «        z   z   S )aÕ  Encode a GtidSet in binary
        Bytes are in **little endian**.

        - `n_sid`: u64 is the number of Gtid to read
        - `Gtid`: `n_sid` * `Gtid_encoded_size` times.
          See`Gtid.encode` documentation for details.

        ```txt
        Alligned on u64 bit.
        +-+-+-+-+-+-+-+-+-+-+
        | n_gtid u64        |
        +-+-+-+-+-+-+-+-+-+-+
        | Gtid              | - Repeated n_gtid times
        - - - - - - - - - - -
        ```
        r   ri   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r0   )rp   r"   s     r   r4   z"GtidSet.encoded.<locals>.<genexpr>°  s*   è è € Ð6Ð6 a�q—x’x‘z”zÐ6Ð6Ð6Ð6Ð6Ð6r   )rm   rn   re   r§   r[   r`   s    r   ÚencodedzGtidSet.encoded�  sM   € ð" ÝŒK˜�c $¤*™oœoÑ.Ô.Ø�hŠhÐ6Ð6¨4¬:Ð6Ñ6Ô6Ñ6Ô6ñ7ñ
ð 	
r   c                 óà   ‡— t          ‰t          ¦  «        s
J d¦   «         ‚t          j        d‰                     d¦  «        ¦  «        \  } | ˆfd„t          d|¦  «        D ¦   «         ¦  «        S )zPDecode a GtidSet from binary.

        :param BytesIO payload to decode
        rr   ri   rv   c                 óD   •— g | ]}t                                ‰¦  «        ‘ŒS r   )r   r€   )r#   Ú_r‚   s     €r   r%   z"GtidSet.decode.<locals>.<listcomp>¾  s%   ø€ ÐBÐBÐB¨Q•D—K’K Ñ(Ô(ÐBÐBÐBr   r   )rx   r   rm   r~   r}   r   )r�   r‚   Ún_sids    ` r   r€   zGtidSet.decodeµ  sn   ø€ õ ˜'¥7Ñ+Ô+ÐRÐRÐ-RÑRÔRÐRÝ”=  w§|¢|°A¡¤Ñ7Ô7‰ˆàˆsÐBÐBÐBÐBµ%¸¸5±/´/ÐBÑBÔBÑCÔCÐCr   c                 ó"   — | j         |j         k    S r0   r±   rG   s     r   rŠ   zGtidSet.__eq__À  s   € ØŒz˜Uœ[Ò(Ð(r   N)r•   r–   r—   r˜   rL   r®   rI   rP   r^   ra   rš   rf   r¿   rp   r›   r€   rŠ   r   r   r   r�   r�   B  sÓ   € € € € € Ø"Ð"ðMð Mð Mð8
ð 
ð 
ð"ð "ð "ð"ð "ð "ð*4ð 4ð 4ð)ð )ð )ð ð=ð =ñ „Xð=ð
ð 
ð 
ð, €FàðDð Dñ „[ðDð)ð )ð )ð )ð )r   r�   )r   rm   rj   Úcopyr   Úior   r   r   Úobjectr   r�   r   r   r   ú<module>rÈ      sÓ   ðØ 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð+ð +ð +ð-ð -ð -ðo1ð o1ð o1ð o1ð o1ˆ6ñ o1ô o1ð o1ðd	)ð )ð )ð )ð )ˆfñ )ô )ð )ð )ð )r   