o
    àý°jøT  ã                   @   sÔ  d dl Z d dlZddlmZ ddlmZmZmZ dZdZ	dZ
dd„ ZG d	d
„ d
ƒZG dd„ deƒZG dd„ deƒZeƒ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeeƒZdd „ ZeeƒZG d!d"„ d"eƒZG d#d$„ d$eƒZeed%ƒdƒZG d&d'„ d'eƒZG d(d)„ d)eƒZG d*d+„ d+eƒZ G d,d-„ d-eƒZ!G d.d/„ d/eƒZ"d<d0d1„Z#d<d2d3„Z$eƒ Z%e &¡ Z'd4d5„ Z(d6d7„ Z)d8d9„ Z*d:d;„ Z+dS )=é    Né   )Úallocate_lock)Ú	CDefErrorÚVerificationErrorÚVerificationMissingé   é   c                 C   s@   | t @ r
d| ¡  }| t@ rd| ¡  }| t@ rd| ¡  }|S )Nz const z
 volatile z __restrict )ÚQ_CONSTÚlstripÚ
Q_VOLATILEÚ
Q_RESTRICT)ÚqualsÚreplace_with© r   ú}/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/cffi/model.pyÚqualify   s   r   c                   @   sP   e Zd ZdZdZddd„Zdd„ Zd	d
„ Zdd„ Zddd„Z	dd„ Z
dd„ ZdS )ÚBaseTypeByIdentityFÚ úa C filer   c                 C   sŠ   | j }| d¡dksJ ‚| ¡ }|r*| d¡r d|v r d| }n
|d dvr*d| }t||ƒ}| d|¡}d	|v rCtd
|  ¡ |f ƒ‚|S )Nú&r   Ú*z&[ú(%s)r   z[(ú ú$z-cannot generate '%s' in %s: unknown type name)Úc_name_with_markerÚcountÚstripÚ
startswithr   Úreplacer   Ú_get_c_name)Úselfr   Úcontextr   Úresultr   r   r   Ú
get_c_name   s"   


ÿÿzBaseTypeByIdentity.get_c_namec                 C   s   | j  dd¡S )Nr   r   )r   r   ©r    r   r   r   r   /   ó   zBaseTypeByIdentity._get_c_namec                 C   s   d|   ¡ vS )Nr   ©r   r$   r   r   r   Ú
has_c_name2   ó   zBaseTypeByIdentity.has_c_namec                 C   ó   dS ©NFr   r$   r   r   r   Úis_integer_type5   ó   z"BaseTypeByIdentity.is_integer_typec                 C   sL   z|j |  }W |S  ty%   |  ||¡}|j  | |¡}||u s"J ‚Y |S w ©N)Ú_cached_btypesÚKeyErrorÚbuild_backend_typeÚ
setdefault)r    ÚffiÚ
finishlistÚ	can_delayÚBTypeÚBType2r   r   r   Úget_cached_btype8   s   üüz#BaseTypeByIdentity.get_cached_btypec                 C   s   d|   ¡ f S )Nz<%s>r&   r$   r   r   r   Ú__repr__A   r%   zBaseTypeByIdentity.__repr__c                    s   ‡ fdd„ˆ j D ƒS )Nc                    s   g | ]	}|t ˆ |ƒf‘qS r   )Úgetattr)Ú.0Únamer$   r   r   Ú
<listcomp>E   s    z1BaseTypeByIdentity._get_items.<locals>.<listcomp>)Ú_attrs_r$   r   r$   r   Ú
_get_itemsD   s   zBaseTypeByIdentity._get_itemsN)r   r   r   ©F)Ú__name__Ú
__module__Ú__qualname__Úis_array_typeÚis_raw_functionr#   r   r'   r+   r7   r8   r>   r   r   r   r   r      s    

	r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBaseTypec                 C   s   | j |j ko|  ¡ | ¡ kS r-   )Ú	__class__r>   ©r    Úotherr   r   r   Ú__eq__J   s   ÿzBaseType.__eq__c                 C   s
   | |k S r-   r   rG   r   r   r   Ú__ne__N   ó   
zBaseType.__ne__c                 C   s   t | jt|  ¡ ƒfƒS r-   )ÚhashrF   Útupler>   r$   r   r   r   Ú__hash__Q   ó   zBaseType.__hash__N)r@   rA   rB   rI   rJ   rN   r   r   r   r   rE   H   s    rE   c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )ÚVoidTyper   c                 C   s
   d| _ d S )Nzvoid&)r   r$   r   r   r   Ú__init__X   rK   zVoidType.__init__c                 C   s   t | |dƒS )NÚnew_void_type©Úglobal_cache©r    r2   r3   r   r   r   r0   [   r(   zVoidType.build_backend_typeN©r@   rA   rB   r=   rR   r0   r   r   r   r   rQ   U   s    rQ   c                   @   s   e Zd Zdd„ ZdS )ÚBasePrimitiveTypec                 C   r)   r*   r   r$   r   r   r   Úis_complex_typeb   r,   z!BasePrimitiveType.is_complex_typeN)r@   rA   rB   rY   r   r   r   r   rX   a   s    rX   c                   @   s~  e Zd ZdZi dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“i dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!d“d"d“d#d“d$d“d%d“d&d“d'd“¥i d(d“d)d“d*d“d+d“d,d“d-d“d.d“d/d“d0d“d1d“d2d“d3d“d4d“d5d“d6d“d7d“d8d“¥Zd9d:„ Zd;d<„ Zd=d>„ Zd?d@„ ZdAdB„ Z	dCdD„ Z
dES )FÚPrimitiveType©r;   ÚcharÚcÚshortÚiÚintÚlongz	long longzsigned charzunsigned charzunsigned shortúunsigned intúunsigned longzunsigned long longÚfloatÚfÚdoublezlong doubleÚ_cffi_float_complex_tÚjÚ_cffi_double_complex_tÚ_BoolÚwchar_tÚchar16_tÚchar32_tÚint8_tÚuint8_tÚint16_tÚuint16_tÚint32_tÚuint32_tÚint64_tÚuint64_tÚint_least8_tÚuint_least8_tÚint_least16_tÚuint_least16_tÚint_least32_tÚuint_least32_tÚint_least64_tÚuint_least64_tÚint_fast8_tÚuint_fast8_tÚint_fast16_tÚuint_fast16_tÚint_fast32_tÚuint_fast32_tÚint_fast64_tÚuint_fast64_tÚintptr_tÚ	uintptr_tÚintmax_tÚ	uintmax_tÚ	ptrdiff_tÚsize_tÚssize_tc                 C   s"   || j v sJ ‚|| _|d | _d S ©Nr   )ÚALL_PRIMITIVE_TYPESr;   r   ©r    r;   r   r   r   rR       ó   zPrimitiveType.__init__c                 C   ó   | j | j dkS )Nr]   ©rŽ   r;   r$   r   r   r   Úis_char_type¥   ó   zPrimitiveType.is_char_typec                 C   r‘   )Nr_   r’   r$   r   r   r   r+   §   r”   zPrimitiveType.is_integer_typec                 C   r‘   )Nre   r’   r$   r   r   r   Úis_float_type©   r”   zPrimitiveType.is_float_typec                 C   r‘   )Nrh   r’   r$   r   r   r   rY   «   r”   zPrimitiveType.is_complex_typec                 C   s   t | |d| jƒS )NÚnew_primitive_type)rU   r;   rV   r   r   r   r0   ®   r”   z PrimitiveType.build_backend_typeN)r@   rA   rB   r=   rŽ   rR   r“   r+   r•   rY   r0   r   r   r   r   rZ   f   sÞ    ÿþýüûúùø	÷
öõôóòñðïíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì7rZ   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚUnknownIntegerTyper[   c                 C   ó   || _ |d | _d S r�   ©r;   r   r�   r   r   r   rR   µ   ó   zUnknownIntegerType.__init__c                 C   r)   )NTr   r$   r   r   r   r+   ¹   r,   z"UnknownIntegerType.is_integer_typec                 C   ó   t d| j ƒ‚)Nz4integer type '%s' can only be used after compilation©ÚNotImplementedErrorr;   rV   r   r   r   r0   ¼   ó   ÿz%UnknownIntegerType.build_backend_typeN)r@   rA   rB   r=   rR   r+   r0   r   r   r   r   r—   ²   s
    r—   c                   @   rP   )ÚUnknownFloatTyper[   c                 C   r˜   r�   r™   r�   r   r   r   rR   Ã   rš   zUnknownFloatType.__init__c                 C   r›   )Nz2float type '%s' can only be used after compilationrœ   rV   r   r   r   r0   Ç   rž   z#UnknownFloatType.build_backend_typeNrW   r   r   r   r   rŸ   À   s    rŸ   c                   @   s   e Zd ZdZddd„ZdS )ÚBaseFunctionType)Úargsr"   ÚellipsisÚabiNc                 C   s’   || _ || _|| _|| _dd„ | j D ƒ}| jr| d¡ |p dg}| jd |¡f }|d ur>|d d… | d |dd …  }| jj d|¡| _d S )	Nc                 S   s   g | ]}|  ¡ ‘qS r   r&   )r:   Úargr   r   r   r<   Õ   s    z-BaseFunctionType.__init__.<locals>.<listcomp>ú...Úvoidz, r   r   r   )	r¡   r"   r¢   r£   ÚappendÚ_base_patternÚjoinr   r   )r    r¡   r"   r¢   r£   Úreprargsr   r   r   r   rR   Ï   s   

 ÿzBaseFunctionType.__init__r-   ©r@   rA   rB   r=   rR   r   r   r   r   r    Ì   ó    r    c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚRawFunctionTypez(&)(%s)Tc                 C   s   t d| f ƒ‚)NzPcannot render the type %r: it is a function type, not a pointer-to-function type)r   rV   r   r   r   r0   ç   rž   z"RawFunctionType.build_backend_typec                 C   ó   t | j| j| j| jƒS r-   )ÚFunctionPtrTyper¡   r"   r¢   r£   r$   r   r   r   Úas_function_pointerë   rO   z#RawFunctionType.as_function_pointerN)r@   rA   rB   r¨   rD   r0   r°   r   r   r   r   r­   à   s
    r­   c                   @   rP   )r¯   z(*&)(%s)c                 C   s†   | j  ||¡}g }| jD ]}| | ||¡¡ qd}| jdkr3| js3z|jjf}W n	 ty2   Y nw t	| |dt
|ƒ|| jg|¢R Ž S )Nr   Ú	__stdcallÚnew_function_type)r"   r7   r¡   r§   r£   r¢   Ú_backendÚFFI_STDCALLÚAttributeErrorrU   rM   )r    r2   r3   r"   r¡   ÚtpÚabi_argsr   r   r   r0   ò   s"   

ÿÿÿz"FunctionPtrType.build_backend_typec                 C   r®   r-   )r­   r¡   r"   r¢   r£   r$   r   r   r   Úas_raw_function  rO   zFunctionPtrType.as_raw_functionN)r@   rA   rB   r¨   r0   r¸   r   r   r   r   r¯   ï   s    r¯   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚPointerType)Útotyper   r   c                 C   sB   || _ || _d}|jrd| ¡ f }t||ƒ}|j d|¡| _d S )Nz *&r   r   )rº   r   rC   r
   r   r   r   )r    rº   r   Úextrar   r   r   rR     s   
zPointerType.__init__c                 C   s    | j j||dd�}t| |d|ƒS )NT)r4   Únew_pointer_type)rº   r7   rU   )r    r2   r3   ÚBItemr   r   r   r0     s   zPointerType.build_backend_typeN©r   rW   r   r   r   r   r¹     s    
	r¹   c                 C   s
   t | tƒS r-   )r¹   r	   )rº   r   r   r   ÚConstPointerType  rK   r¿   c                   @   s   e Zd ZdZddd„ZdS )ÚNamedPointerType)rº   r;   r   c                 C   s"   t  | ||¡ || _|d | _d S r�   )r¹   rR   r;   r   )r    rº   r;   r   r   r   r   rR      r�   zNamedPointerType.__init__Nr¾   r«   r   r   r   r   rÀ     r¬   rÀ   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	ArrayType)ÚitemÚlengthTc                 C   sF   || _ || _|d u rd}n|dkrd}nd| }| j j d|¡| _d S )Nz&[]r¥   z
&[/*...*/]z&[%s]r   )rÂ   rÃ   r   r   )r    rÂ   rÃ   Úbracketsr   r   r   rR   *  s   ÿzArrayType.__init__c                 C   s   t | jtƒS r-   )Ú
isinstancerÃ   Ústrr$   r   r   r   Úlength_is_unknown7  r(   zArrayType.length_is_unknownc                 C   s   t | j|ƒS r-   )rÁ   rÂ   )r    Ú	newlengthr   r   r   Úresolve_length:  r(   zArrayType.resolve_lengthc                 C   sH   |   ¡ rtd| f ƒ‚| j ||¡ t| jƒ ||¡}t| |d|| jƒS )Nz)cannot render the type %r: unknown lengthÚnew_array_type)rÇ   r   rÂ   r7   r¹   rU   rÃ   )r    r2   r3   ÚBPtrItemr   r   r   r0   =  s   ÿzArrayType.build_backend_typeN)	r@   rA   rB   r=   rC   rR   rÇ   rÉ   r0   r   r   r   r   rÁ   &  s    rÁ   r\   c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ ZdS )	ÚStructOrUnionOrEnumr[   Nc                 C   s$   | j p
d| j| jf }|d | _d S )Nz%s %sr   )Ú	forcenameÚkindr;   r   r�   r   r   r   Úbuild_c_name_with_markerL  s   z,StructOrUnionOrEnum.build_c_name_with_markerc                 C   s   || _ |  ¡  d S r-   )rÍ   rÏ   )r    rÍ   r   r   r   Úforce_the_nameP  s   z"StructOrUnionOrEnum.force_the_namec                 C   s   | j  d¡sJ ‚| j d d… S )Nr   éÿÿÿÿ)r   Úendswithr$   r   r   r   Úget_official_nameT  s   z%StructOrUnionOrEnum.get_official_name)r@   rA   rB   r=   rÍ   rÏ   rÐ   rÓ   r   r   r   r   rÌ   H  s    rÌ   c                   @   sj   e Zd ZdZdZdZdZddd„Zdd„ Zdd	d
„Z	dd„ Z
ddd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚStructOrUnionNr   Fc                 C   s*   || _ || _|| _|| _|| _|  ¡  d S r-   )r;   ÚfldnamesÚfldtypesÚ
fldbitsizeÚfldqualsrÏ   )r    r;   rÕ   rÖ   r×   rØ   r   r   r   rR   _  s   zStructOrUnion.__init__c                 c   sD   � | j d urt| j| j ƒD ]\}}|dkrt|tƒr|V  qd S d S )Nr   )rÖ   ÚziprÕ   rÅ   rÔ   )r    r;   Útyper   r   r   Úanonymous_struct_fieldsg  s   €
€ýz%StructOrUnion.anonymous_struct_fieldsTc                 c   sx   � | j }|d u rdt| jƒ }t| j| j| j|ƒD ] \}}}}|dkr2t|tƒr2|r2| ¡ E d H  q||||fV  qd S )Nr¾   r   )	rØ   ÚlenrÕ   rÙ   rÖ   r×   rÅ   rÔ   Ú
enumfields)r    Úexpand_anonymous_struct_unionrØ   r;   rÚ   Úbitsizer   r   r   r   rÝ   m  s   €
ÿÿùzStructOrUnion.enumfieldsc           	      C   sz   g }g }g }g }|   ¡ D ]\}}}}| |¡ | |¡ | |¡ | |¡ qt|ƒ| _t|ƒ| _t|ƒ| _t|ƒ| _d S r-   )rÝ   r§   rM   rÕ   rÖ   r×   rØ   )	r    ÚnamesÚtypesÚbitsizesrØ   r;   rÚ   rß   r   r   r   r   Úforce_flattenz  s   





zStructOrUnion.force_flattenc                 C   s$   t  | |||¡}|s|  ||¡ |S r-   )rÌ   r7   Úfinish_backend_type)r    r2   r3   r4   r5   r   r   r   r7   Œ  s   
ÿzStructOrUnion.get_cached_btypec                    s  | j r| j dkrtd| jf ƒ‚d S ˆ j|  }d| _ | jd u r nè| jd u r[‡ ‡fdd„| jD ƒ}tt| j|| j	ƒƒ}d}| j
rL| j
dkrGd}nd| j
f}ˆ jj||| d	d	g|¢R Ž  n­g }| j\}}}	}
tt| jƒƒD ]‡}|| }| j| }t|tƒr¼| ¡ r¼|j ˆ ˆ¡}t|ˆ  |¡ƒ\}}|dkr£|  d
| j| j| pŸdf ¡ | |¡}| jd |… |f | j|d d …  | _| ˆ ˆ¡}t|tƒrÓ|jd u rÓ|dksÒJ ‚nˆ  |¡}||krí|  d| j| j| pçd||f ¡ | |¡ qktt| j|| j	|ƒƒ}ˆ j ||| |	|
¡ d| _ d S )Nr   z(recursive structure declaration for '%s'r   c                    s   g | ]}|  ˆ ˆ¡‘qS r   )r7   )r:   r¶   ©r2   r3   r   r   r<   ¡  s    ÿz5StructOrUnion.finish_backend_type.<locals>.<listcomp>r   )é   r   rÑ   zfield '%s.%s' has a bogus size?z{}z=field '%s.%s' is declared as %d bytes, but is really %d bytes)Ú	completedr�   r;   r.   rÖ   ÚfixedlayoutÚlistrÙ   rÕ   r×   Úpackedr³   Úcomplete_struct_or_unionÚrangerÜ   rÅ   rÁ   rÇ   rÂ   r7   ÚdivmodÚsizeofÚ_verification_errorrÉ   rÃ   r§   )r    r2   r3   r5   rÖ   ÚlstÚextra_flagsÚfieldofsÚ	fieldsizeÚ	totalsizeÚtotalalignmentr_   ÚfsizeÚftypeÚ	BItemTypeÚnlenÚnrestÚ
BFieldTypeÚ	bitemsizer   rå   r   rä   “  s|   
ÿ


ÿ

ÿ
ÿ
ÿÿ
ÿ
þÿÿÿ
z!StructOrUnion.finish_backend_typec                 C   s   t |ƒ‚r-   )r   )r    Úmsgr   r   r   rï   Ò  s   z!StructOrUnion._verification_errorc                 C   s$   | j r| jd u rt|  ¡ ƒ‚d S d S r-   )Úpartialrè   r   r   r$   r   r   r   Úcheck_not_partialÕ  s   ÿzStructOrUnion.check_not_partialc                 C   s.   |   ¡  | | ¡ t| |d| j |  ¡ | d�S )Nznew_%s_type©Úkey)rÿ   r§   rU   rÎ   rÓ   rV   r   r   r   r0   Ù  s
   
ÿz StructOrUnion.build_backend_typer-   )Tr?   )r@   rA   rB   rè   rç   rþ   rê   rR   rÛ   rÝ   rã   r7   rä   rï   rÿ   r0   r   r   r   r   rÔ   Y  s    


?rÔ   c                   @   ó   e Zd ZdZdS )Ú
StructTypeÚstructN©r@   rA   rB   rÎ   r   r   r   r   r  á  ó    r  c                   @   r  )Ú	UnionTypeÚunionNr  r   r   r   r   r  å  r  r  c                   @   sB   e Zd ZdZdZdZddd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )ÚEnumTypeÚenumFNc                 C   s$   || _ || _|| _|| _|  ¡  d S r-   )r;   ÚenumeratorsÚ
enumvaluesÚbaseinttyperÏ   )r    r;   r  r  r  r   r   r   rR   î  s
   zEnumType.__init__c                 C   s8   t  | |¡ | jd u r|  ¡ }d| dd¡ | _d S d S )Nr   r   Ú_)rÌ   rÐ   rÍ   rÓ   r   )r    rÍ   r;   r   r   r   rÐ   õ  s
   
þzEnumType.force_the_namec                 C   s    | j r| jst|  ¡ ƒ‚d S d S r-   )rþ   Úpartial_resolvedr   r   r$   r   r   r   rÿ   û  s   ÿzEnumType.check_not_partialc              
   C   s4   |   ¡  |  ||¡}t| |d|  ¡ | j| j|| d�S )NÚnew_enum_typer   )rÿ   Úbuild_baseinttyperU   rÓ   r  r  )r    r2   r3   Ú
base_btyper   r   r   r0   ÿ  s   ýzEnumType.build_backend_typec                 C   s<  | j d ur| j  ||¡S | jrt| jƒ}t| jƒ}n!dd l}zt ¡  W n	 ty-   Y nw | 	d|  
¡  ¡ d }}|dk rJd}tdƒ}tdƒ}n
d}tdƒ}tdƒ}| ||¡}	| ||¡}
| |	¡}| |
¡}|dd	| d > kr€|dd	| | > k r€|	S |dd	| d > kr–|dd	| | > k r–|
S td
|  
¡  ƒ‚)Nr   zU%r has no values explicitly defined; guessing that it is equivalent to 'unsigned int'r   r`   ra   rb   rc   rÑ   ræ   z=%s values don't all fit into either 'long' or 'unsigned long')r  r7   r  ÚminÚmaxÚwarningsÚ__warningregistry__ÚclearÚ	NameErrorÚwarnr   rZ   rî   r   )r    r2   r3   Úsmallest_valueÚlargest_valuer  ÚsignÚ
candidate1Ú
candidate2Úbtype1Úbtype2Úsize1Úsize2r   r   r   r    sF   

ÿþ


ÿzEnumType.build_baseinttyper-   )r@   rA   rB   rÎ   rþ   r  rR   rÐ   rÿ   r0   r  r   r   r   r   r	  é  s    
r	  c                 C   s2   |d u rd|  }t |d d d ƒ}| | ¡ d|_|S )Nz$%sÚunknown_type)r  rÐ   Úorigin©r;   Ú
structnamer¶   r   r   r   r#  0  s   
r#  c                 C   s(   |d u rd|  }t |d d d ƒ}t|| ƒS )Nz$$%s)r  rÀ   r%  r   r   r   Úunknown_ptr_type8  s   
r'  c                 C   s^   t | tjƒrtS t� tt| ƒdƒst ¡ t| ƒ_	t| ƒj	W  d   ƒ S 1 s(w   Y  d S )NÚ__typecache)
rÅ   rá   Ú
ModuleTypeÚ_typecache_cffi_backendÚglobal_lockÚhasattrrÚ   ÚweakrefÚWeakValueDictionaryr(  )Úbackendr   r   r   Úget_typecacheB  s   $ýr0  c           
   
   O   sÖ   |  d||f¡}|rJ ‚z|j| W S  ty   Y nw z
t|j|ƒ|Ž }W n ty; } z	td|| |f ƒ‚d }~ww |j}t�  | |¡}	|	d u rX|||< |W  d   ƒ S |	W  d   ƒ S 1 sdw   Y  d S )Nr  z
%s: %r: %s)ÚpopÚ
_typecacher/   r9   r³   r�   r+  Úget)
Úsrctyper2   Úfuncnamer¡   Úkwdsr  ÚresÚeÚcacheÚres1r   r   r   rU   M  s,   ÿ€ÿ
ü$úrU   c                 C   s   t d| d|ƒS )Nú?r¼   rT   )r2   r5   r   r   r   Úpointer_cached  r%   r<  c                 C   sH   | j r t| j d ƒtu r"d|| j d f f| j dd …  | _ d S d S d S )Nr   z%s: %sr   )r¡   rÚ   rÆ   )r8  r;   r   r   r   Úattach_exception_infog  s   (ÿr=  r-   ),rá   r-  Úlockr   Úerrorr   r   r   r	   r   r   r   r   rE   rQ   Ú	void_typerX   rZ   r—   rŸ   r    r­   r¯   r¹   Ú
voidp_typer¿   Úconst_voidp_typerÀ   rÁ   Úchar_array_typerÌ   rÔ   r  r  r	  r#  r'  r+  r.  r*  r0  rU   r<  r=  r   r   r   r   Ú<module>   sP    /	L	 	
G
