+
    ¢THi=  ã                   óH  a € R t0 t R t^ RIt^ RIt^ RIHt ^ RIHt ^ RIH	t	 R R lt
. ROt]! 4       t] ^ k ]]3tRP"                  tRP"                  tR	 tR
 tR t]
! ]R4       ]
! ]R4       ]
! ]R4       ]]3tR R ltR t ! R R]4      t]P;                  ]]4       R# )z7passlib.utils.compat - python 2/3 compatibility helpersN)Únullcontext)Ú
ModuleType©ÚCallablec                ó4   € V ^8„  d   QhR\         R\        RR/# )é   ÚobjÚdocÚreturnN)ÚobjectÚstr)Úformats   "Ú?/usr/lib/python3/dist-packages/passlib/utils/compat/__init__.pyÚ__annotate__r   
   s!   € ÷ ñ ”ð œcð  dñ ó    c                ó   € Wn         R# )zadd docstring to an objectN)Ú__doc__)r   r	   s   &&r   Úadd_docr   
   s   € à†Kr   Ú r   c                 óT   € \        V \        4      '       g   Q hV P                  R 4      # ©Úascii)Ú
isinstanceÚbytesÚdecode©Úss   &r   Úbascii_to_strr   ,   s$   € Ü�aœ×ÒÐÐØ�8‰8�GÓÐr   c                 óT   € \        V \        4      '       g   Q hV P                  R 4      # r   )r   r   Úencoder   s   &r   Ústr_to_basciir    1   s$   € Ü�aœ×ÒÐÐØ�8‰8�GÓÐr   c                 óD   € \        V \        4      '       g   Q hR  V  4       # )c              3   ó:   "  € T F  p\        V.4      x € K  	  R # 5i©N)r   )Ú.0Úcs   & r   Ú	<genexpr>Ú"iter_byte_chars.<locals>.<genexpr>9   s   é € Ð"¡˜1ŒE�1�#�JˆJ£ùs   ‚)r   r   r   s   &r   Úiter_byte_charsr(   6   s    € Ü�aœ×ÒÐÐá"¡Ó"Ð"r   z+helper to convert ascii bytes -> native strz+helper to convert ascii native str -> bytesz6iterate over byte string as sequence of 1-byte stringsc                ó0   € V ^8„  d   QhR\         R\         /# )r   Úfuncr
   r   )r   s   "r   r   r   G   s   € ÷ +ñ +œhð +¬8ñ +r   c                ó   € \        V RV 4      # )z4given (potential) method, return underlying functionÚ__func__)Úgetattr)r*   s   &r   Úget_method_functionr.   G   s   € ä�4˜ TÓ*Ð*r   c                ó\   € V P                  R^4      w  r\        W.^ R7      p\        W24      # )zChelper to import object from module; accept format `path.to.object`Ú.)ÚfromlistÚlevel)ÚrsplitÚ
__import__r-   )ÚsourceÚmodnameÚmodattrÚmods   &   r   Ú_import_objectr9   L   s.   € à—}‘} S¨!Ó,Ñ€GÜ
�W y¸Ô
:€CÜ�3Ó Ð r   c                   óP   a € ] tR t^St o Rt]R 4       tR	R ltR tR t	R t
RtV tR# )
Ú_LazyOverlayModuleaK  proxy module which overlays original module,
and lazily imports specified attributes.

this is mainly used to prevent importing of resources
that are only needed by certain password hashes,
yet allow them to be imported from a single location.

used by :mod:`passlib.utils`, :mod:`passlib.crypto`,
and :mod:`passlib.utils.compat`.
c                ól   € \         P                  V,          pV ! WV4      pV\         P                  V&   V# r#   )ÚsysÚmodules)ÚclsÚnameÚattrmapÚorigÚselfs   &&&  r   Úreplace_moduleÚ!_LazyOverlayModule.replace_module_   s/   € ä�{‰{˜4Õ ˆÙ�4 $Ó'ˆØ Œ�‰�DÑØˆr   Nc                ó€   € \         P                  ! W4       W n        W0n        \        P
                  ! V4      V n        R # r#   )r   Ú__init__Ú_LazyOverlayModule__attrmapÚ_LazyOverlayModule__proxyÚloggingÚ	getLoggerÚ_LazyOverlayModule__log)rC   r@   rA   Úproxys   &&&&r   rG   Ú_LazyOverlayModule.__init__f   s,   € Ü×Ò˜DÔ'Ø ŒØŒÜ×&Ò& tÓ,ˆŽ
r   c                óP  € V P                   pV'       d   \        W!4      '       d   \        W!4      # V P                  pW9   dW   W1,          p\	        V4      '       d	   V! 4       pM\        V4      p\        WV4       V P                  P                  R W4       V# \        RV R24      h)zloaded lazy attr %r: %rz"'module' object has no attribute 'Ú')
rI   Úhasattrr-   rH   Úcallabler9   ÚsetattrrL   ÚdebugÚAttributeError)rC   ÚattrrM   rA   r5   Úvalues   &&    r   Ú__getattr__Ú_LazyOverlayModule.__getattr__l   s�   € Ø—‘ˆß”W˜U×)Ò)Ü˜5Ó'Ð'Ø—.‘.ˆØŒ?Ø•]ˆFÜ˜×ÒÙ›‘ä& vÓ.�Ü�D Ô&Ø�J‰J×ÑÐ6¸ÔDØˆLÜÐAÀ$ÀÀqÐIÓJÐJr   c                ól   € V P                   pV'       d   \        V4      # \        P                  ! V 4      # r#   )rI   Úreprr   Ú__repr__)rC   rM   s   & r   r\   Ú_LazyOverlayModule.__repr__|   s)   € Ø—‘ˆßÜ˜“;ÐÜ×"Ò" 4Ó(Ð(r   c                ó  € \        \        V P                  4      4      pVP                  V P                  4       VP                  V P
                  4       V P                  pVe   VP                  \        V4      4       \        V4      # r#   )ÚsetÚdirÚ	__class__ÚupdateÚ__dict__rH   rI   Úlist)rC   ÚattrsrM   s   &  r   Ú__dir__Ú_LazyOverlayModule.__dir__‚   s^   € Ü”C˜Ÿ™Ó'Ó(ˆØ�‰�T—]‘]Ô#Ø�‰�T—^‘^Ô$Ø—‘ˆØÒØ�L‰Lœ˜U›Ô$Ü�E‹{Ðr   )Ú	__attrmapÚ__logÚ__proxyr#   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚclassmethodrD   rG   rX   r\   rf   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r;   r;   S   s8   ø‡ € ñ	ð ñó ðô-òKò )÷ð r   r;   c                ób   € V ^8„  d   Qh/ ^ \         9   d   \        \        \        3,          ;R&   # )r   Ú_lazy_attrs)Ú__conditional_annotations__Údictr   r   )r   s   "r   r   r      s%   € × =Ñ =÷B (Ò 'ŒT”#”v�+ÕÑ 'òC >r   )	Únumeric_typesÚunicode_or_bytesr   r    Újoin_unicodeÚ
join_bytesr   r.   r   ) ru   r   rJ   r=   Ú
contextlibr   Útypesr   Útypingr   r   Ú__all__rv   rt   r   r   rx   Újoinry   rz   r   r    r(   ÚintÚfloatrw   r.   r9   r;   rD   rk   r   )ru   s   @r   Ú<module>r‚      s´   øðÞ =ã Û 
Ý "Ý Ý õò
€ñ& "&£€Ó 'ð ˜�<Ð à�w‰w€Ø�X‰X€
òò
ò
#ñ ˆÐDÔ EÙ ˆÐDÔ Eñ ˆÐQÔ Rà�e�€õ+ò
!ô6˜ô 6ðt × !Ñ ! (¨KÖ 8r   