Ë
    íU.jüo  ã                   ó–  — d dl Z d dl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Ze j                  dk(  r ed«      ‚ ed	e«      Zd	ed
œZ eed«      r ed«      ‚ G d„ de«      Z e«       Zed   dk(  r,d dlmZmZmZmZ  G d„ de«      Zd„ Zeej8                  _        n	d dlmZ d„ Zd ej>                  d«      z  Z  G d„ de«      Z!y)é    N)Úis_native_int)ÚbackendÚload_libÚc_ulongÚc_size_tÚc_uint8_ptré   )ÚIntegerBaseaÆ  typedef unsigned long UNIX_ULONG;
        typedef struct { int a; int b; void *c; } MPZ;
        typedef MPZ mpz_t[1];
        typedef UNIX_ULONG mp_bitcnt_t;

        void __gmpz_init (mpz_t x);
        void __gmpz_init_set (mpz_t rop, const mpz_t op);
        void __gmpz_init_set_ui (mpz_t rop, UNIX_ULONG op);

        UNIX_ULONG __gmpz_get_ui (const mpz_t op);
        void __gmpz_set (mpz_t rop, const mpz_t op);
        void __gmpz_set_ui (mpz_t rop, UNIX_ULONG op);
        void __gmpz_add (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_add_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_sub_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_addmul (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_addmul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_submul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_import (mpz_t rop, size_t count, int order, size_t size,
                            int endian, size_t nails, const void *op);
        void * __gmpz_export (void *rop, size_t *countp, int order,
                              size_t size,
                              int endian, size_t nails, const mpz_t op);
        size_t __gmpz_sizeinbase (const mpz_t op, int base);
        void __gmpz_sub (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_mul (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_mul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        int __gmpz_cmp (const mpz_t op1, const mpz_t op2);
        void __gmpz_powm (mpz_t rop, const mpz_t base, const mpz_t exp, const
                          mpz_t mod);
        void __gmpz_powm_ui (mpz_t rop, const mpz_t base, UNIX_ULONG exp,
                             const mpz_t mod);
        void __gmpz_pow_ui (mpz_t rop, const mpz_t base, UNIX_ULONG exp);
        void __gmpz_sqrt(mpz_t rop, const mpz_t op);
        void __gmpz_mod (mpz_t r, const mpz_t n, const mpz_t d);
        void __gmpz_neg (mpz_t rop, const mpz_t op);
        void __gmpz_abs (mpz_t rop, const mpz_t op);
        void __gmpz_and (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_ior (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_clear (mpz_t x);
        void __gmpz_tdiv_q_2exp (mpz_t q, const mpz_t n, mp_bitcnt_t b);
        void __gmpz_fdiv_q (mpz_t q, const mpz_t n, const mpz_t d);
        void __gmpz_mul_2exp (mpz_t rop, const mpz_t op1, mp_bitcnt_t op2);
        int __gmpz_tstbit (const mpz_t op, mp_bitcnt_t bit_index);
        int __gmpz_perfect_square_p (const mpz_t op);
        int __gmpz_jacobi (const mpz_t a, const mpz_t b);
        void __gmpz_gcd (mpz_t rop, const mpz_t op1, const mpz_t op2);
        UNIX_ULONG __gmpz_gcd_ui (mpz_t rop, const mpz_t op1,
                                     UNIX_ULONG op2);
        void __gmpz_lcm (mpz_t rop, const mpz_t op1, const mpz_t op2);
        int __gmpz_invert (mpz_t rop, const mpz_t op1, const mpz_t op2);
        int __gmpz_divisible_p (const mpz_t n, const mpz_t d);
        int __gmpz_divisible_ui_p (const mpz_t n, UNIX_ULONG d);

        size_t __gmpz_size (const mpz_t op);
        UNIX_ULONG __gmpz_getlimbn (const mpz_t op, size_t n);
        Úwin32zNot using GMP on WindowsÚgmp)ÚlibraryÚapiÚ__mpir_versionzMPIR library detectedc                   ó   — e Zd Zd„ Zy)Ú_GMPc                 óÄ   — |j                  d«      r	d|dd  z   }n(|j                  d«      r	d|dd  z   }nt        d|z  «      ‚t        t        |«      }t	        | ||«       |S )NÚmpz_Ú__gmpz_é   Úgmp_Ú__gmp_zAttribute %s is invalid)Ú
startswithÚAttributeErrorÚgetattrÚlibÚsetattr)ÚselfÚnameÚ	func_nameÚfuncs       úYC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\Crypto/Math/_IntegerGMP.pyÚ__getattr__z_GMP.__getattr__p   sh   € Ø�?‰?˜6Ô"Ø! D¨¨ HÑ,‰IØ�_‰_˜VÔ$Ø  4¨¨ 8Ñ+‰Iä Ð!:¸TÑ!AÓBÐBÜ”s˜IÓ&ˆÜ��d˜DÔ!Øˆó    N)Ú__name__Ú
__module__Ú__qualname__r"   © r#   r!   r   r   n   s   „ ó	r#   r   r   Úctypes)Ú	StructureÚc_intÚc_void_pÚbyrefc                   ó"   — e Zd ZdefdefdefgZy)Ú_MPZÚ	_mp_allocÚ_mp_sizeÚ_mp_dN)r$   r%   r&   r*   r+   Ú_fields_r'   r#   r!   r.   r.   …   s!   „ Ø  %Ð(Ø Ð'Ø˜hÐ'ð)‰r#   r.   c                  ó(   — t        t        «       «      S ©N)r,   r.   r'   r#   r!   Únew_mpzr5   Š   s   € Ü”T“V‹}Ðr#   )Úffic                  ó,   — t        j                  d«      S )NzMPZ*)r6   Únewr'   r#   r!   r5   r5   “   s   € Ü�w‰w�v‹Ðr#   é   ÚPc                   ó²  — e Zd ZdZ e«       Zej                  e ed«      «       d„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd8d	„Zed9d
„«       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d:d„Z!d:d„Z"d„ Z#d:d„Z$d„ Z%d„ Z&d „ Z'd!„ Z(d"„ Z)d#„ Z*d$„ Z+d%„ Z,d&„ Z-d'„ Z.d(„ Z/d)„ Z0d*„ Z1d+„ Z2d,„ Z3d-„ Z4d.„ Z5d/„ Z6d0„ Z7d1„ Z8d2„ Z9d3„ Z:d4„ Z;ed5„ «       Z<ed6„ «       Z=d7„ Z>y);Ú
IntegerGMPz#A fast, arbitrary precision integerr   c           	      ó¼  — t        «       | _        d| _        t        |t        «      rt        d«      ‚t        |«      �r>t        j                  | j                  «       d| _        |dk(  ryt        «       }t        j                  |«       	 |dk\  }t        |«      }|j                  «       dz
  dz  dz   }|dkD  r�|dz
  }t        j                  |t        d||dz  z	  z  «      «       t        j                  ||t        |dz  «      «       t        j                  | j                  | j                  |«       |dkD  rŒ�t        j                  |«       |s+t        j!                  | j                  | j                  «       yyt        |t"        «      r2t        j%                  | j                  |j                  «       d| _        yt&        ‚# t        j                  |«       w xY w)	z*Initialize the integer to the given value.Fz-A floating point type is not a natural numberTr   Nr	   é    ì   ÿÿ )r5   Ú_mpz_pÚ_initializedÚ
isinstanceÚfloatÚ
ValueErrorr   Ú_gmpÚmpz_initÚabsÚ
bit_lengthÚ
mpz_set_uir   Úmpz_mul_2expÚmpz_addÚ	mpz_clearÚmpz_negr<   Úmpz_init_setÚNotImplementedError)r   ÚvalueÚtmpÚpositiveÚreduceÚslotss         r!   Ú__init__zIntegerGMP.__init__¡   s{  € ô “iˆŒØ!ˆÔä�eœUÔ#ÜÐLÓMÐMä˜ÕÜ�M‰M˜$Ÿ+™+Ô&Ø $ˆDÔØ˜ŠzØä“)ˆCÜ�M‰M˜#Ôð$Ø  A™:�Ü˜U›�Ø×*Ñ*Ó,¨qÑ0°RÑ7¸!Ñ;�à˜a’iØ! A™I�EÜ—O‘O CÜ$+¨J¸&ÀUÈRÁZÑ:PÑ,QÓ$RôTä×%Ñ% c¨3´¸À¹
Ó0CÔDÜ—L‘L §¡¨d¯k©k¸3Ô?ð ˜a“iô —‘˜sÔ#áÜ—‘˜TŸ[™[¨$¯+©+Õ6ð ô ˜œzÔ*Ü×Ñ˜dŸk™k¨5¯<©<Ô8Ø $ˆDÕä%Ð%øô —‘˜sÕ#ús   Â
B.G ÇGc                 ó  — t        «       }t        j                  || j                  «       	 d}d}t        j	                  || j
                  «      dk7  rlt        j                  |«      dz  }|||dz  z  z  }t        j                  ||t        d«      «       |dz   }t        j	                  || j
                  «      dk7  rŒlt        j                  |«       | dk  r| }t        |«      S # t        j                  |«       w xY w)Nr   r?   r>   r	   )r5   rE   rN   r@   Úmpz_cmpÚ_zero_mpz_pÚ
mpz_get_uiÚmpz_tdiv_q_2expr   rL   Úint)r   rQ   rP   ÚslotÚlsbs        r!   Ú__int__zIntegerGMP.__int__Ë   sÛ   € Ü‹iˆÜ×Ñ˜#˜tŸ{™{Ô+ð		 ØˆEØˆDÜ—,‘,˜s D×$4Ñ$4Ó5¸Ò:Ü—o‘o cÓ*¨ZÑ7�Ø˜ ¨¡Ñ+Ñ+�Ü×$Ñ$ S¨#¬w°r«{Ô;Ø˜a‘x�ô	 —,‘,˜s D×$4Ñ$4Ó5¸Ó:ô �N‰N˜3Ôà�!Š8Ø�FˆEÜ�5‹zÐøô	 �N‰N˜3Õús   ¬BC' Ã'C>c                 ó*   — t        t        | «      «      S r4   )Ústrr[   ©r   s    r!   Ú__str__zIntegerGMP.__str__Þ   ó   € Ü”3�t“9‹~Ðr#   c                 ó   — dt        | «      z  S )NzInteger(%s))r`   ra   s    r!   Ú__repr__zIntegerGMP.__repr__á   s   € Øœs 4›yÑ(Ð(r#   c                 ó*   — t        t        | «      «      S r4   )Úhexr[   ra   s    r!   Ú__hex__zIntegerGMP.__hex__å   rc   r#   c                 ó   — t        | «      S r4   )r[   ra   s    r!   Ú	__index__zIntegerGMP.__index__é   s   € Ü�4‹yÐr#   c                 ó¶  — | dk  rt        d«      ‚t        j                  | j                  «      }t        dk(  rd}t        d||dz   dz  «      }n*t        dk(  rd	}t        d||d
z   dz  «      }nt        d«      ‚t        |«      D �cg c](  }t        j                  | j                  ||z
  dz
  «      ‘Œ* }}t        j                  d||z  z   g|¢­Ž }t        |«      |z
  }|dk(  r|j                  d«      }n/|dkD  r|d| d|z  k7  rt        d«      ‚||d }n|dk  r	d| z  |z   }|dk(  r	|ddd…   }n|dk(  rnt        d«      ‚t        |«      dk(  rd}|S c c}w )aª  Convert the number into a byte string.

        This method encodes the number in network order and prepends
        as many zero bytes as required. It only works for non-negative
        values.

        :Parameters:
          block_size : integer
            The exact size the output byte string must have.
            If zero, the string has the minimal length.
          byteorder : string
            'big' for big-endian integers (default), 'little' for litte-endian.
        :Returns:
          A byte string.
        :Raise ValueError:
          If the value is negative or if ``block_size`` is
          provided and the length of the byte string would exceed it.
        r   ú.Conversion only valid for non-negative numbersr>   ÚLr	   é   r   é@   ÚQé   r9   zUnknown limb sizeÚ>ó    Nz@Number is too big to convert to byte string of prescribed lengthÚlittleéÿÿÿÿÚbigúIncorrect byteorder)rD   rE   Úmpz_sizer@   Ú	_sys_bitsÚmaxÚrangeÚmpz_getlimbnÚstructÚpackÚlenÚlstrip)	r   Ú
block_sizeÚ	byteorderÚ	num_limbsÚspcharÚiÚlimbsÚresultÚ
cutoff_lens	            r!   Úto_byteszIntegerGMP.to_bytesì   s‘  € ð( �!Š8ÜÐMÓNÐNä—M‘M $§+¡+Ó.ˆ	Ü˜Š?ØˆFÜ˜A˜y¨:¸©>¸aÑ*?Ó@‰IÜ˜"Š_ØˆFÜ˜A˜y¨:¸©>¸aÑ*?Ó@‰IäÐ0Ó1Ð1ô MRÐR[ÔL\Ó]ÑL\Àq”×"Ñ" 4§;¡;°	¸A±ÀÑ0AÕBÐL\ˆÐ]ä—‘˜S 6¨IÑ#5Ñ5Ð>¸Ò>ˆÜ˜“[ :Ñ-ˆ
Ø˜Š?Ø—]‘] 7Ó+‰FØ˜!Š^Ø�k�zÐ" g°Ñ&<Ò<Ü ð "Dó Eð Eà˜J˜KÐ(‰FØ˜!Š^Ø  Ñ,¨vÑ5ˆFà˜Ò Ø™D˜b˜D‘\‰FØ˜%ÒØäÐ2Ó3Ð3äˆv‹;˜!ÒØˆFàˆùò1 ^s   Â-Ec                 ó$  — t        d«      }|dk(  rn,|dk(  rt        | «      } | j                  «        nt        d«      ‚t        j                  |j                  t        t        | «      «      dt        d«      dt        d«      t        | «      «       |S )aŽ  Convert a byte string into a number.

        :Parameters:
          byte_string : byte string
            The input number, encoded in network order.
            It can only be non-negative.
          byteorder : string
            'big' for big-endian integers (default), 'little' for litte-endian.

        :Return:
          The ``Integer`` object carrying the same value as the input.
        r   rv   rt   rw   r	   )
r<   Ú	bytearrayÚreverserD   rE   Ú
mpz_importr@   r   r   r   )Úbyte_stringr‚   r‡   s      r!   Ú
from_byteszIntegerGMP.from_bytes(  s…   € ô ˜A“ˆØ˜ÒØØ˜(Ò"Ü# KÓ0ˆKØ×ÑÕ!äÐ2Ó3Ð3Ü�‰ØŸ™Ü ¤ [Ó!1Ó2ØÜ  ›ØÜ  ›Ü# KÓ0ô	2ð ˆr#   c                 ór   — t        |t        «      st        |«      } || j                  |j                  «      S r4   )rB   r<   r@   )r   r    Úterms      r!   Ú_apply_and_returnzIntegerGMP._apply_and_returnI  s+   € Ü˜$¤
Ô+Ü˜dÓ#ˆDÙ�D—K‘K §¡Ó-Ð-r#   c                 ó€   — t        |t        «      st        |«      sy| j                  t        j
                  |«      dk(  S )NFr   ©rB   r<   r   r’   rE   rW   ©r   r‘   s     r!   Ú__eq__zIntegerGMP.__eq__N  s2   € Ü˜4¤Ô,´¸dÔ0CØØ×%Ñ%¤d§l¡l°DÓ9¸QÑ>Ð>r#   c                 ó€   — t        |t        «      st        |«      sy| j                  t        j
                  |«      dk7  S )NTr   r”   r•   s     r!   Ú__ne__zIntegerGMP.__ne__S  s2   € Ü˜4¤Ô,´¸dÔ0CØØ×%Ñ%¤d§l¡l°DÓ9¸QÑ>Ð>r#   c                 óH   — | j                  t        j                  |«      dk  S ©Nr   ©r’   rE   rW   r•   s     r!   Ú__lt__zIntegerGMP.__lt__X  ó   € Ø×%Ñ%¤d§l¡l°DÓ9¸AÑ=Ð=r#   c                 óH   — | j                  t        j                  |«      dk  S rš   r›   r•   s     r!   Ú__le__zIntegerGMP.__le__[  ó   € Ø×%Ñ%¤d§l¡l°DÓ9¸QÑ>Ð>r#   c                 óH   — | j                  t        j                  |«      dkD  S rš   r›   r•   s     r!   Ú__gt__zIntegerGMP.__gt__^  r�   r#   c                 óH   — | j                  t        j                  |«      dk\  S rš   r›   r•   s     r!   Ú__ge__zIntegerGMP.__ge__a  r    r#   c                 ó\   — t         j                  | j                  | j                  «      dk7  S rš   ©rE   rW   r@   rX   ra   s    r!   Ú__nonzero__zIntegerGMP.__nonzero__d  s"   € Ü�|‰|˜DŸK™K¨×)9Ñ)9Ó:¸aÑ?Ð?r#   c                 ó\   — t         j                  | j                  | j                  «      dk  S rš   r¦   ra   s    r!   Úis_negativezIntegerGMP.is_negativeh  s"   € Ü�|‰|˜DŸK™K¨×)9Ñ)9Ó:¸QÑ>Ð>r#   c                 óè   — t        d«      }t        |t         «      s	 t        |«      }t        j                  |j                  | j                  |j                  «       |S # t        $ r	 t        cY S w xY wrš   )r<   rB   rO   ÚNotImplementedrE   rK   r@   ©r   r‘   r‡   s      r!   Ú__add__zIntegerGMP.__add__l  ód   € Ü˜A“ˆÜ˜$¤
Ô+ð&Ü! $Ó'�ô 	�‰�V—]‘]Ø—[‘[Ø—[‘[ô	"ð ˆøô 'ò &Ü%Ò%ð&úó   �A ÁA1Á0A1c                 óè   — t        d«      }t        |t         «      s	 t        |«      }t        j                  |j                  | j                  |j                  «       |S # t        $ r	 t        cY S w xY wrš   )r<   rB   rO   r«   rE   Úmpz_subr@   r¬   s      r!   Ú__sub__zIntegerGMP.__sub__x  r®   r¯   c                 óè   — t        d«      }t        |t         «      s	 t        |«      }t        j                  |j                  | j                  |j                  «       |S # t        $ r	 t        cY S w xY wrš   )r<   rB   rO   r«   rE   Úmpz_mulr@   r¬   s      r!   Ú__mul__zIntegerGMP.__mul__„  r®   r¯   c                 ó,  — t        |t        «      st        |«      }t        j                  |j                  | j
                  «      dk(  rt        d«      ‚t        d«      }t        j                  |j                  | j                  |j                  «       |S )Nr   úDivision by zero)rB   r<   rE   rW   r@   rX   ÚZeroDivisionErrorÚ
mpz_fdiv_q)r   Údivisorr‡   s      r!   Ú__floordiv__zIntegerGMP.__floordiv__�  su   € Ü˜'¤:Ô.Ü  Ó)ˆGÜ�<‰<˜Ÿ™Ø×(Ñ(ó*Ø-.ò/ä#Ð$6Ó7Ð7Ü˜A“ˆÜ�‰˜Ÿ™ØŸ™ØŸ™ô	(ð ˆr#   c                 óP  — t        |t        «      st        |«      }t        j                  |j                  | j
                  «      }|dk(  rt        d«      ‚|dk  rt        d«      ‚t        d«      }t        j                  |j                  | j                  |j                  «       |S ©Nr   r·   úModulus must be positive©	rB   r<   rE   rW   r@   rX   r¸   rD   Úmpz_mod)r   rº   Úcompr‡   s       r!   Ú__mod__zIntegerGMP.__mod__œ  s‰   € Ü˜'¤:Ô.Ü  Ó)ˆGÜ�|‰|˜GŸN™NØ ×,Ñ,ó.ˆà�1Š9Ü#Ð$6Ó7Ð7Ø�!Š8ÜÐ7Ó8Ð8Ü˜A“ˆÜ�‰�V—]‘]Ø—[‘[Ø—^‘^ô	%ð ˆr#   Nc           	      óÞ  — |€_|dk  rt        d«      ‚|dkD  rt        d«      ‚t        j                  | j                  | j                  t	        t        |«      «      «       | S t        |t        «      st        |«      }|st        d«      ‚|j                  «       rt        d«      ‚t        |«      rb|dk  rt        d«      ‚|dk  rAt        j                  | j                  | j                  t	        |«      |j                  «       | S t        |«      }n|j                  «       rt        d«      ‚t        j                  | j                  | j                  |j                  |j                  «       | S )Nr   zExponent must not be negativeé   zExponent is too bigr·   r¾   é   )rD   rE   Ú
mpz_pow_uir@   r   r[   rB   r<   r¸   r©   r   Úmpz_powm_uiÚmpz_powm)r   ÚexponentÚmoduluss      r!   Úinplace_powzIntegerGMP.inplace_pow«  s<  € àˆ?Ø˜!Š|Ü Ð!@ÓAÐAð ˜#Š~Ü Ð!6Ó7Ð7Ü�O‰O˜DŸK™KØ ŸK™KÜ#¤C¨£MÓ2ôð8 ˆô- ˜g¤zÔ2Ü$ WÓ-�ÙÜ'Ð(:Ó;Ð;Ø×"Ñ"Ô$Ü Ð!;Ó<Ð<Ü˜XÔ&Ø˜a’<Ü$Ð%DÓEÐEØ˜eÒ#Ü×$Ñ$ T§[¡[Ø%)§[¡[Ü%,¨XÓ%6Ø%,§^¡^ô5ð  �KÜ% hÓ/‘Ø×%Ñ%Ô'Ü Ð!@ÓAÐAÜ�M‰M˜$Ÿ+™+ØŸ+™+Ø"Ÿ/™/Ø!Ÿ.™.ô*ð ˆr#   c                 ó<   — t        | «      }|j                  ||«      S r4   )r<   rË   )r   rÉ   rÊ   r‡   s       r!   Ú__pow__zIntegerGMP.__pow__Ò  s   € Ü˜DÓ!ˆØ×!Ñ! (¨GÓ4Ð4r#   c                 óp   — t        d«      }t        j                  |j                  | j                  «       |S rš   )r<   rE   Úmpz_absr@   )r   r‡   s     r!   Ú__abs__zIntegerGMP.__abs__Ö  s&   € Ü˜A“ˆÜ�‰�V—]‘] D§K¡KÔ0Øˆr#   c                 ó  — |€G| dk  rt        d«      ‚t        d«      }t        j                  |j                  | j                  «       |S |dk  rt        d«      ‚t        |«      }t        | j                  t        | «      |z  |«      «      }|S )zGReturn the largest Integer that does not
        exceed the square rootr   zSquare root of negative valuer¾   )rD   r<   rE   Úmpz_sqrtr@   r[   Ú_tonelli_shanks©r   rÊ   r‡   s      r!   ÚsqrtzIntegerGMP.sqrtÛ  sˆ   € ð ˆ?Ø�aŠxÜ Ð!@ÓAÐAÜ “]ˆFÜ�M‰M˜&Ÿ-™-ØŸ+™+ô'ð ˆð ˜!Š|Ü Ð!;Ó<Ð<Ü˜'“lˆGÜ × 4Ñ 4´S¸³YÀÑ5HÈ'Ó RÓSˆFàˆr#   c                 ó®  — t        |«      r”d|cxk  rdk  r9n n6t        j                  | j                  | j                  t	        |«      «       | S d|cxk  rdk  r:n n7t        j                  | j                  | j                  t	        | «      «       | S t        |«      }t        j                  | j                  | j                  |j                  «       | S ©Nr   rÅ   é ÿÿ)r   rE   Ú
mpz_add_uir@   r   Ú
mpz_sub_uir<   rK   r•   s     r!   Ú__iadd__zIntegerGMP.__iadd__í  ó¥   € Ü˜ÔØ�DÔ ˜5Õ Ü—‘ §¡Ø $§¡Ü '¨£ô/ð �Ø˜Ô ˜qÕ Ü—‘ §¡Ø $§¡Ü '¨¨£ô0ð �Ü˜dÓ#ˆDÜ�‰�T—[‘[Ø—[‘[Ø—[‘[ô	"ð ˆr#   c                 ó®  — t        |«      r”d|cxk  rdk  r9n n6t        j                  | j                  | j                  t	        |«      «       | S d|cxk  rdk  r:n n7t        j                  | j                  | j                  t	        | «      «       | S t        |«      }t        j                  | j                  | j                  |j                  «       | S r×   )r   rE   rÚ   r@   r   rÙ   r<   r±   r•   s     r!   Ú__isub__zIntegerGMP.__isub__ÿ  rÜ   r#   c                 ó  — t        |«      r¾d|cxk  rdk  r9n n6t        j                  | j                  | j                  t	        |«      «       | S d|cxk  rdk  rdn nat        j                  | j                  | j                  t	        | «      «       t        j                  | j                  | j                  «       | S t        |«      }t        j                  | j                  | j                  |j                  «       | S r×   )r   rE   Ú
mpz_mul_uir@   r   rM   r<   r´   r•   s     r!   Ú__imul__zIntegerGMP.__imul__  s»   € Ü˜ÔØ�DÔ ˜5Õ Ü—‘ §¡Ø $§¡Ü '¨£ô/ð �Ø˜Ô ˜qÕ Ü—‘ §¡Ø $§¡Ü '¨¨£ô0ô —‘˜TŸ[™[¨$¯+©+Ô6Ø�Ü˜dÓ#ˆDÜ�‰�T—[‘[Ø—[‘[Ø—[‘[ô	"ð ˆr#   c                 ó:  — t        |t        «      st        |«      }t        j                  |j                  |j
                  «      }|dk(  rt        d«      ‚|dk  rt        d«      ‚t        j                  | j                  | j                  |j                  «       | S r½   r¿   )r   rº   rÁ   s      r!   Ú__imod__zIntegerGMP.__imod__$  s€   € Ü˜'¤:Ô.Ü  Ó)ˆGÜ�|‰|˜GŸN™NØ#×/Ñ/ó1ˆà�1Š9Ü#Ð$6Ó7Ð7Ø�!Š8ÜÐ7Ó8Ð8Ü�‰�T—[‘[Ø—[‘[Ø—^‘^ô	%ð ˆr#   c                 ó¼   — t        d«      }t        |t         «      st        |«      }t        j                  |j                  | j                  |j                  «       |S rš   )r<   rB   rE   Úmpz_andr@   r¬   s      r!   Ú__and__zIntegerGMP.__and__3  óF   € Ü˜A“ˆÜ˜$¤
Ô+Ü˜dÓ#ˆDÜ�‰�V—]‘]Ø—[‘[Ø—[‘[ô	"ð ˆr#   c                 ó¼   — t        d«      }t        |t         «      st        |«      }t        j                  |j                  | j                  |j                  «       |S rš   )r<   rB   rE   Úmpz_iorr@   r¬   s      r!   Ú__or__zIntegerGMP.__or__<  rç   r#   c           	      óÎ   — t        d«      }|dk  rt        d«      ‚|dkD  r| dk  ryyt        j                  |j                  | j                  t        t        |«      «      «       |S ©Nr   znegative shift countrÅ   ru   )r<   rD   rE   rZ   r@   r   r[   ©r   Úposr‡   s      r!   Ú
__rshift__zIntegerGMP.__rshift__E  s`   € Ü˜A“ˆØ�Š7ÜÐ3Ó4Ð4Ø�Š;Ø�aŠxØàÜ×Ñ˜VŸ]™]Ø!Ÿ[™[Ü$¤S¨£XÓ.ô	0ð ˆr#   c           	      ó¸   — |dk  rt        d«      ‚|dkD  r| dk  ryyt        j                  | j                  | j                  t	        t        |«      «      «       | S rì   )rD   rE   rZ   r@   r   r[   ©r   rî   s     r!   Ú__irshift__zIntegerGMP.__irshift__S  sW   € Ø�Š7ÜÐ3Ó4Ð4Ø�Š;Ø�aŠxØàÜ×Ñ˜TŸ[™[Ø!Ÿ[™[Ü$¤S¨£XÓ.ô	0ð ˆr#   c           	      óÚ   — t        d«      }d|cxk  rdk  st        d«      ‚ t        d«      ‚t        j                  |j                  | j                  t        t        |«      «      «       |S ©Nr   rÅ   zIncorrect shift count)r<   rD   rE   rJ   r@   r   r[   rí   s      r!   Ú
__lshift__zIntegerGMP.__lshift__`  sc   € Ü˜A“ˆØ�CÔ˜%ÒÜÐ4Ó5Ð5ð  ÜÐ4Ó5Ð5Ü×Ñ˜&Ÿ-™-ØŸ+™+Ü!¤# c£(Ó+ô	-ð ˆr#   c           	      óÄ   — d|cxk  rdk  st        d«      ‚ t        d«      ‚t        j                  | j                  | j                  t	        t        |«      «      «       | S rô   )rD   rE   rJ   r@   r   r[   rñ   s     r!   Ú__ilshift__zIntegerGMP.__ilshift__i  sZ   € Ø�CÔ˜%ÒÜÐ4Ó5Ð5ð  ÜÐ4Ó5Ð5Ü×Ñ˜$Ÿ+™+ØŸ+™+Ü!¤# c£(Ó+ô	-ð ˆr#   c           
      óÄ   — | dk  rt        d«      ‚|dk  rt        d«      ‚|dkD  ryt        t        j                  | j                  t        t        |«      «      «      «      S )zPReturn True if the n-th bit is set to 1.
        Bit 0 is the least significant.r   z)no bit representation for negative valuesznegative bit countrÅ   )rD   ÚboolrE   Ú
mpz_tstbitr@   r   r[   )r   Úns     r!   Úget_bitzIntegerGMP.get_bitq  s]   € ð �!Š8ÜÐHÓIÐIØˆqŠ5ÜÐ1Ó2Ð2ØˆuŠ9ØÜ”D—O‘O D§K¡KÜ$+¬C°«F£Oó5ó 6ð 	6r#   c                 óH   — t         j                  | j                  d«      dk(  S )Nr   r	   ©rE   rú   r@   ra   s    r!   Úis_oddzIntegerGMP.is_odd  ó   € Ü�‰˜tŸ{™{¨AÓ.°!Ñ3Ð3r#   c                 óH   — t         j                  | j                  d«      dk(  S rš   rþ   ra   s    r!   Úis_evenzIntegerGMP.is_even‚  r   r#   c                 ób   — | dk  rt        d«      ‚t        j                  | j                  d«      S )z=Return the minimum number of bits that can encode the number.r   rl   é   )rD   rE   Úmpz_sizeinbaser@   ra   s    r!   Úsize_in_bitszIntegerGMP.size_in_bits…  s.   € ð �!Š8ÜÐMÓNÐNÜ×"Ñ" 4§;¡;°Ó2Ð2r#   c                 ó4   — | j                  «       dz
  dz  dz   S )z>Return the minimum number of bytes that can encode the number.r	   r9   )r  ra   s    r!   Úsize_in_byteszIntegerGMP.size_in_bytesŒ  s    € à×!Ñ!Ó# aÑ'¨AÑ-°Ñ1Ð1r#   c                 óF   — t         j                  | j                  «      dk7  S rš   )rE   Úmpz_perfect_square_pr@   ra   s    r!   Úis_perfect_squarezIntegerGMP.is_perfect_square�  s   € Ü×(Ñ(¨¯©Ó5¸Ñ:Ð:r#   c                 ó   — t        |«      rNd|cxk  rdk  r8n n5t        j                  | j                  t	        |«      «      rt        d«      ‚yt        |«      }t        j                  | j                  |j                  «      rt        d«      ‚y)z3Raise an exception if the small prime is a divisor.r   rÅ   zThe value is compositeN)r   rE   Úmpz_divisible_ui_pr@   r   rD   r<   Úmpz_divisible_p)r   Úsmall_primes     r!   Úfail_if_divisible_byzIntegerGMP.fail_if_divisible_by“  s}   € ô ˜Ô%Ø�;Ô& Õ&Ü×*Ñ*¨4¯;©;Ü+2°;Ó+?ôAä$Ð%=Ó>Ð>ØÜ$ [Ó1ˆKÜ×Ñ §¡Ø +× 2Ñ 2ô4äÐ5Ó6Ð6ð4r#   c                 óä  — t        |t        «      st        |«      }t        |«      r”d|cxk  rdk  r9n n6t        j	                  | j
                  |j
                  t        |«      «       | S d|cxk  rdk  r:n n7t        j                  | j
                  |j
                  t        | «      «       | S t        |«      }t        j                  | j
                  |j
                  |j
                  «       | S )z/Increment the number by the product of a and b.r   rÅ   rØ   )	rB   r<   r   rE   Úmpz_addmul_uir@   r   Úmpz_submul_uiÚ
mpz_addmul)r   ÚaÚbs      r!   Úmultiply_accumulatezIntegerGMP.multiply_accumulate¡  s¹   € ô ˜!œZÔ(Ü˜1“ˆAÜ˜ÔØ�1Œ}�u�}Ü×"Ñ" 4§;¡;Ø#$§8¡8Ü#*¨1£:ô/ð �Ø˜Œ~˜A�~Ü×"Ñ" 4§;¡;Ø#$§8¡8Ü#*¨A¨2£;ô0ð �Ü˜1“ˆAÜ�‰˜Ÿ™ØŸ™ØŸ™ô	"ð ˆr#   c                 ó�   — t        |t        «      st        |«      }t        j                  | j                  |j                  «       | S )z'Set the Integer to have the given value)rB   r<   rE   Úmpz_setr@   )r   Úsources     r!   ÚsetzIntegerGMP.set·  s6   € ô ˜&¤*Ô-Ü Ó'ˆFÜ�‰�T—[‘[Ø—]‘]ô	$àˆr#   c                 óT  — t        |t        «      st        |«      }t        j                  |j                  | j
                  «      }|dk(  rt        d«      ‚|dk  rt        d«      ‚t        j                  | j                  | j                  |j                  «      }|st        d«      ‚| S )z…Compute the inverse of this number in the ring of
        modulo integers.

        Raise an exception if no inverse exists.
        r   úModulus cannot be zeror¾   z No inverse value can be computed)	rB   r<   rE   rW   r@   rX   r¸   rD   Ú
mpz_invert)r   rÊ   rÁ   r‡   s       r!   Úinplace_inversezIntegerGMP.inplace_inverseÀ  s“   € ô ˜'¤:Ô.Ü  Ó)ˆGä�|‰|˜GŸN™NØ ×,Ñ,ó.ˆà�1Š9Ü#Ð$<Ó=Ð=Ø�!Š8ÜÐ7Ó8Ð8ä—‘ §¡Ø!%§¡Ø!(§¡ó1ˆñ ÜÐ?Ó@Ð@Øˆr#   c                 ó>   — t        | «      }|j                  |«       |S r4   )r<   r  rÔ   s      r!   ÚinversezIntegerGMP.inverseØ  s   € Ü˜DÓ!ˆØ×Ñ˜wÔ'Øˆr#   c                 ó:  — t        d«      }t        |«      rOd|cxk  rdk  r9n n6t        j                  |j                  | j                  t        |«      «       |S t        |«      }t        j                  |j                  | j                  |j                  «       |S )zUCompute the greatest common denominator between this
        number and another term.r   iÿÿ  )r<   r   rE   Ú
mpz_gcd_uir@   r   Úmpz_gcdr¬   s      r!   ÚgcdzIntegerGMP.gcdÝ  st   € ô ˜A“ˆÜ˜ÔØ�4Ô˜%ÕÜ—‘ §¡Ø $§¡Ü '¨£ô/ð �Ü˜dÓ#ˆDÜ�‰�V—]‘] D§K¡K°·±Ô=Øˆr#   c                 ó¼   — t        d«      }t        |t         «      st        |«      }t        j                  |j                  | j                  |j                  «       |S )zQCompute the least common multiplier between this
        number and another term.r   )r<   rB   rE   Úmpz_lcmr@   r¬   s      r!   ÚlcmzIntegerGMP.lcmì  sB   € ô ˜A“ˆÜ˜$¤
Ô+Ü˜dÓ#ˆDÜ�‰�V—]‘] D§K¡K°·±Ô=Øˆr#   c                 ó  — t        | t        «      st        | «      } t        |t        «      st        |«      }|dk  s|j                  «       rt        d«      ‚t        j                  | j                  |j                  «      S )zCompute the Jacobi symbolr   z,n must be positive odd for the Jacobi symbol)rB   r<   r  rD   rE   Ú
mpz_jacobir@   )r  rû   s     r!   Újacobi_symbolzIntegerGMP.jacobi_symbolö  s^   € ô ˜!œZÔ(Ü˜1“ˆAÜ˜!œZÔ(Ü˜1“ˆAØ�Š6�Q—Y‘Y”[ÜÐKÓLÐLÜ�‰˜qŸx™x¨¯©Ó2Ð2r#   c                 óX  — t        | t        «      st        | «      } t        |t        «      st        |«      }t        |t        «      st        |«      }|dk  rt        d«      ‚|dk(  rt        d«      ‚|dz  dk(  rt        d«      ‚| |z  |z  }|j	                  |j                  «       «      S )Nr   r¾   r  r	   zOdd modulus is required)rB   r<   rD   r¸   r‰   r  )Úterm1Úterm2rÊ   Úproducts       r!   Ú_mult_modulo_byteszIntegerGMP._mult_modulo_bytes  s¤   € ä˜%¤Ô,Ü˜uÓ%ˆEÜ˜%¤Ô,Ü˜uÓ%ˆEÜ˜'¤:Ô.Ü  Ó)ˆGà�QŠ;ÜÐ7Ó8Ð8Ø�aŠ<Ü#Ð$<Ó=Ð=Ø�a‰K˜AÒÜÐ6Ó7Ð7à˜5‘= GÑ+ˆØ×Ñ × 5Ñ 5Ó 7Ó8Ð8r#   c                 ó    — 	 | j                   �+| j                  rt        j                  | j                   «       d | _         y # t        $ r Y y w xY wr4   )r@   rA   rE   rL   r   ra   s    r!   Ú__del__zIntegerGMP.__del__  sC   € ð	Ø�{‰{Ð&Ø×$Ò$Ü—N‘N 4§;¡;Ô/àˆD�KøÜò 	Ùð	ús   ‚>A Á	AÁA)r   rv   )rv   r4   )?r$   r%   r&   Ú__doc__r5   rX   rE   Úmpz_init_set_uir   rU   r^   rb   re   rh   rj   r‰   Ústaticmethodr�   r’   r–   r˜   rœ   rŸ   r¢   r¤   r§   Ú__bool__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+  r0  r2  r'   r#   r!   r<   r<   ›   s[  „ Ù-á“)€KØ×Ñ˜¡g¨a£jÔ1ò'&òTò&ò)òòó:ðx òó ðò@.ò
?ò
?ò
>ò?ò>ò?ò@à€Hò?ò
ò
ò
ò
òó%óN5òó
ò$ò$ò$ò&òòòòòòò6ò4ò4ò3ò2ò;ò7òò,òò0ò
òð ñ	3ó ð	3ð ñ9ó ð9ó&	r#   r<   )"Úsysr}   ÚCrypto.Util.py3compatr   ÚCrypto.Util._raw_apir   r   r   r   r   Ú_IntegerBaser
   Úgmp_defsÚplatformÚImportErrorr   ÚimplementationÚhasattrÚobjectr   rE   r(   r)   r*   r+   r,   r.   r5   r|   Úrestyper6   Úcalcsizery   r<   r'   r#   r!   Ú<module>rC     sê   ðó> Û å /÷Bõ Bõ &ð8€ðt ‡<�<�7ÒÙ
Ð0Ó
1Ð1áˆu�hÓ€Ø"¨7Ñ3€á
ˆ3Ð Ô!Ù
Ð-Ó
.Ð.ôˆ6ô ñ ƒv€ð �%Ñ˜HÒ$ß8Ó8ô)ˆyô )ò
ð !(€D×ÑÕõ )òð
 ��—‘ Ó$Ñ$€	ôD
�õ D
r#   