ó
    x[h,  ã                   ó6  • S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKJ	r	J
r
  Sr\R                  " \5      r\	R                  " S5      S 5       r\	R                  " S5      S 5       r\S	S
4S jr\S	S
4S jrS r\	R                  " S5      S 5       r\4S jrg)é    N)Ú	b64decodeÚ	b64encode)ÚperformanceÚutili¤  zBase64 decodingc                 ó`   • [        U 5      n UR                  S5      $ ! [         a    Us $ f = f)zbase64 decode data

:param source: a bytes or str to decode
:return: base64 as a decoded str if utf-8 encoded, otherwise bytes
úutf-8)r   ÚdecodeÚUnicodeDecodeError)ÚsourceÚdecodeds     Ú9/usr/lib/python3/dist-packages/cloudinit/atomic_helper.pyÚb64dr      s6   € ô ˜Ó€GðØ�~‰~˜gÓ&Ð&øÜó ØŠðús   � ž-¬-zBase64 encodingc                 ó‚   • [        U [        5      (       d  U R                  S5      n [        U 5      R	                  S5      $ )zXbase64 encode data

:param source: a bytes or str to decode
:return: base64 encoded str
r   )Ú
isinstanceÚbytesÚencoder   r	   )r   s    r   Úb64er      s5   € ô �fœe×$Ñ$Ø—‘˜wÓ'ˆÜ�VÓ×#Ñ# GÓ,Ð,ó    ÚwbFc                 ó„   • [         R                  " SU  35         [        XX#U5      sSSS5        $ ! , (       d  f       g= f)zCopen filename in mode omode, write content, set permissions to modezWriting N)r   ÚTimedÚ_write_file)ÚfilenameÚcontentÚmodeÚomodeÚpreserve_modes        r   Ú
write_filer   *   s1   € ô
 
×	Ò	˜X h ZÐ0Õ	1Ü˜8¨d¸=ÓI÷ 
2×	1×	1ús   š1±
?c           
      óÊ  • U(       a7   [         R                  " U 5      n[        R                  " UR                  5      nS n [         R
                  R                  U 5      n[        R                  " U5        [        R                  " USUS9n[        R                  SU UR                  UU[        U5      5        UR                  U5        UR!                  5         [         R"                  " UR                  U5        [         R$                  " UR                  U 5        g ! [         a     Nëf = f! [&         a*  nUb   [         R(                  " UR                  5        UeS nAff = f)NF)ÚdirÚdeleter   zOAtomically writing to file %s (via temporary file %s) - %s: [%o] %d bytes/chars)ÚosÚstatÚS_IMODEÚst_modeÚOSErrorÚpathÚdirnamer   Ú
ensure_dirÚtempfileÚNamedTemporaryFileÚLOGÚdebugÚnameÚlenÚwriteÚcloseÚchmodÚrenameÚ	ExceptionÚunlink)	r   r   r   r   r   Ú	file_statÚtfr(   Úes	            r   r   r   3   s  € ö ð	ÜŸš Ó)ˆIÜ—<’< 	× 1Ñ 1Ó2ˆDð 
€BðÜ—'‘'—/‘/ (Ó+ˆÜ�Š˜Ô Ü×(Ò(¨W¸UÈÑOˆÜ�	‰	ðàØ�G‰GØØÜ�‹Lô	
ð 	�‰�ÔØ
�‰Œ
Ü
�Š�—‘˜$ÔÜ
�	Š	�"—'‘'˜8Õ$øô) ó 	Ùð	ûô* ó Ø‰>Ü�IŠI�b—g‘gÔØˆûðús*   ‰6D ÁCD. Ä
D+Ä*D+Ä.
E"Ä8%EÅE"c                 óŒ   •  SR                  [        U 5      5      $ ! [         a    SR                  [        U 5      5      s $ f = f)z1Handler for types which aren't json serializable.z
ci-b64:{0}z)Warning: redacted unserializable type {0})Úformatr   ÚAttributeErrorÚtype)Ú_objs    r   Újson_serialize_defaultr>   U   sC   € ðNØ×"Ñ"¤4¨£:Ó.Ð.øÜó NØ:×AÑAÄ$ÀtÃ*ÓMÒMðNús   ‚ œ$AÁAzDumping jsonc                 ó:   • [         R                  " U SSS[        S9$ )z%Return data in nicely formatted json.é   T)Ú,z: )ÚindentÚ	sort_keysÚ
separatorsÚdefault)ÚjsonÚdumpsr>   )Údatas    r   Ú
json_dumpsrI   ]   s$   € ô �:Š:ØØØØÜ&ñð r   c                 ó2   • [        U [        U5      S-   SUS9$ )NÚ
Úw)r   r   )r   rI   )r   rH   r   s      r   Ú
write_jsonrM   i   s%   € äØÜ�4Ó˜4ÑØØñ	ð r   )rF   Úloggingr"   r#   r*   Úbase64r   r   Ú	cloudinitr   r   Ú
_DEF_PERMSÚ	getLoggerÚ__name__r,   Útimedr   r   r   r   r>   rI   rM   © r   r   Ú<module>rV      s¾   ðó Û Û 	Û Û ß 'ç 'à€
Ø×Ò˜Ó!€ð ×ÒÐ$Ó%ñ
ó &ð
ð ×ÒÐ$Ó%ñ-ó &ð-ð '¨dÀ%ôJð '¨dÀ%ôòDNð ×Ò�>Ó"ñó #ðð %/õ r   