a oe"@sUddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z ddlmZmZmZmZdZdZdZejee e eddfdd d Zeed d d Zeed ddZeeedddZeddZeeefe d<Gddde Z!e edddZ"e edddZ#e edddZ$ee eefdd d!Z%e&e eefdd"d#Z'eee!ed$d%d&Z(d'd(d)d*Z)eee ed+d,d-Z*dS).N)Dict GeneratorIterator NamedTupleOptionalTuple)EIClassEIDataELFFileEMachinel~ii)pathreturnc cs\z8t|d}t|VWdn1s,0YWntttfyVdVYn0dS)Nrb)openr OSError TypeError ValueError)r frKC:\Program Files\Certbot\pkgs\pkg_resources\_vendor\packaging\_manylinux.py _parse_elfs  ,r) executablercCstt|X}|duoP|jtjkoP|jtjkoP|jtj koP|j t @t koP|j t @t kWdS1sf0YdSN)rcapacityr C32encodingr Lsbmachiner ZArmflagsEF_ARM_ABIMASKEF_ARM_ABI_VER5EF_ARM_ABI_FLOAT_HARDrrrrr_is_linux_armhfs      r$cCsXt|<}|duo4|jtjko4|jtjko4|jtj kWdS1sJ0YdSr) rrr rrr rrr ZI386r#rrr_is_linux_i686+s    r%)rarchrcCs(|dkrt|S|dkr t|S|dvS)NZarmv7li686>x86_64Zppc64Zaarch64Zppc64leZs390x)r$r%)rr&rrr_have_compatible_abi5s r)cCsdS)N2rrrrrBr+_LAST_GLIBC_MINORc@seZdZUeed<eed<dS) _GLibCVersionmajorminorN)__name__ __module__ __qualname__int__annotations__rrrrr.Es r.)rc CsLz*ttdd}|dusJ|\}}WnttttfyFYdS0|S)zJ Primary implementation of glibc_version_string using os.confstr. confstrZCS_GNU_LIBC_VERSIONN)getattrosrsplitAssertionErrorAttributeErrorrr)Zversion_string_versionrrr_glibc_version_string_confstrJs r>cCsz ddl}Wnty YdS0z|d}WntyDYdS0z |j}WntydYdS0|j|_|}t|t s| d}|S)zG Fallback implementation of glibc_version_string using ctypes. rNascii) ctypes ImportErrorZCDLLrgnu_get_libc_versionr;Zc_char_pZrestype isinstancestrdecode)r@Zprocess_namespacerB version_strrrr_glibc_version_string_ctypes]s"       rGcCs tp tS)z9Returns glibc version string, or None if not using glibc.)r>rGrrrr_glibc_version_stringsrH)rFrcCsBtd|}|s&td|tdSt|dt|dfS)a3Parse glibc version. We use a regexp instead of str.split because we want to discard any random junk that might come after the minor version -- this might happen in patched/forked versions of glibc (e.g. Linaro's version of glibc uses version strings like "2.20-2014.11"). See gh-3588. z$(?P[0-9]+)\.(?P[0-9]+)z;Expected glibc version with 2 components major.minor, got: rJr/r0)rematchwarningswarnRuntimeWarningr4group)rFmrrr_parse_glibc_versions rRcCst}|durdSt|S)NrI)rHrR)rFrrr_get_glibc_versionsrS)namer&r=rcCst}||krdSz ddl}Wnty2YdS0t|drh||d|d|}|durdt|SdS|tddkrt|drt|jS|tdd krt|d rt|jS|tdd krt|d rt|j SdS) NFrTmanylinux_compatiblermanylinux1_compatible manylinux2010_compatiblemanylinux2014_compatible) rS _manylinuxrAhasattrrUboolr.rXrZr\)rTr&r=Z sys_glibcr]resultrrr_is_compatibles,         raZ manylinux2014Z manylinux2010Z manylinux1))rVr[)rVrY)rVrW)linuxr&rc csttj|sdStdd}|dvr,tdd}tt}|g}t|jdddD]}t|}|t||qN|D]}|j|jkr|j }nd}t|j |dD]^}t|j|} dj | } t | || r| d| V| t vrt | } t | || r| d| VqqpdS) NrV>r(r'rrJzmanylinux_{}_{}rb)r)sysrr.rSranger/r-appendr0formatrareplace_LEGACY_MANYLINUX_MAP) rbr&Ztoo_old_glibc2Z current_glibcZglibc_max_listZ glibc_majorZ glibc_minorZ glibc_maxZ min_minorZ glibc_versiontagZ legacy_tagrrr platform_tagss.         rl)+ collections contextlib functoolsr8rKrerMtypingrrrrrrZ_elffiler r r r r r!r"contextmanagerrDrr_r$r%r) defaultdictr-r4r5r.r>rGrHrR lru_cacherSrarjrlrrrrs<     ,