Ë
    x[h'  ã                   ó`   — d dl Z d dlmZmZmZ  e j
                  e«      Zd„ Zdd„Z	d„ Z
dd„Zy)	é    N)Ú	lifecycleÚ
type_utilsÚutilc                 ó<  — t        | t        «      r| j                  «       j                  d«      } t        | t        «      rùi }| D ]ð  }t        |t
        «      r£|j                  «       D ]�  \  }}t        |t        t        f«      s!t        dt        j                  |«      z  «      ‚t        |t        «      r"|j                  |g «      j                  |«       Œo|j                  |g «      j                  |«       Œ‘ Œ¶t        |t        «      r||vsŒËg ||<   ŒÑt        dt        j                  |«      z  «      ‚ |} i }t        | t
        «      r2| j                  «       D ]  \  }}t        j                  |«      ||<   Œ |S t        dt        j                  | «      z  «      ‚)Nú,zBad group member type %szUnknown group name type %sz@Group config must be list, dict or string type only but found %s)Ú
isinstanceÚstrÚstripÚsplitÚlistÚdictÚitemsÚ	TypeErrorr   Úobj_nameÚ
setdefaultÚextendÚappendr   Úuniq_merge_sorted)Úgrp_cfgÚ	c_grp_cfgÚiÚkÚvÚgroupsÚgrp_nameÚgrp_memberss           ú;/usr/lib/python3/dist-packages/cloudinit/distros/ug_util.pyÚ_normalize_groupsr      s†  € Ü�'œ3ÔØ—-‘-“/×'Ñ'¨Ó,ˆä�'œ4Ô Øˆ	Øò 	ˆAÜ˜!œTÔ"ØŸG™G›Iò 
>‘D�A�qÜ% a¬$´¨Ô5Ü'Ø6Ü)×2Ñ2°1Ó5ñ7óð ô
 " !¤TÔ*Ø!×,Ñ,¨Q°Ó3×:Ñ:¸1Õ=à!×,Ñ,¨Q°Ó3×:Ñ:¸1Õ=ñ
>ô ˜AœsÔ#Ø˜IÒ%Ø#%�I˜a’LäØ0´J×4GÑ4GÈÓ4JÑKóð ð#	ð( ˆà€FÜ�'œ4Ô Ø%,§]¡]£_ò 	CÑ!ˆH�kÜ#×5Ñ5°kÓBˆF�8Òð	Cð €Mô	 ØNÜ×"Ñ" 7Ó+ñ-ó
ð 	
ó    c                 óÒ  — t        | t        «      r¸g }| j                  «       D ]   \  }}t        |t        t        t
        t        f«      r1t        j                  |«      sŒ<|j                  t        |«      «       ŒWt        |t        «      r||d<   |j                  |«       Œ~t        dt        j                  |«      ›d|›�«      ‚ |} n%t        | t        «      rt        j                  | «      } i }| D ]²  }t        |t        t        f«      r(t        j                  |«      D ]  }|sŒ||vsŒi ||<   Œ ŒAt        |t        «      rB|j!                  dd«      }|j#                  |«      xs i }	t        j$                  |	|g«      ||<   Œ“t        dt        j                  |«      z  «      ‚ |rci }
|j                  «       D ]L  \  }}i }|j                  «       D ]-  \  }}|j'                  dd«      j)                  «       }|sŒ)|||<   Œ/ ||
|<   ŒN |
}d }|r³d|v r¯|j!                  d«      }|rœ|j+                  «       }|j!                  d«      }|j!                  dg «      }|j!                  |i «      }|j#                  dg «      }t        j                  ||«      }d	j-                  |«      |d<   t        j$                  |||g«      ||<   |j                  «       D ]  \  }}|r||k(  nd
|d<   Œ |S )NÚnamezUnmappable user value type z	 for key ÚdefaultzDUser config must be dictionary/list or string  types only and not %sú-Ú_r   r   F)r   r   r   ÚboolÚintÚfloatr	   r   Úis_truer   r   r   r   r   r   Ú
uniq_mergeÚpopÚgetÚmergemanydictÚreplacer
   ÚcopyÚjoin)Úu_cfgÚdef_user_cfgÚad_ucfgr   r   ÚusersÚuser_configÚuÚnÚprev_configÚc_usersÚunameÚuconfigÚ	c_uconfigÚdef_userÚ
def_configÚ
def_groupsÚparsed_configÚparsed_groupsÚusers_groupss                       r   Ú_normalize_usersrB   I   sß  € Ü�%œÔØˆØ—K‘K“Mò 	‰DˆAˆqÜ˜!œd¤C¬´Ð4Ô5Ü—<‘< •?Ø—N‘N¤3 q£6Õ*Ü˜AœtÔ$Ø��&‘	Ø—‘˜qÕ!åä!×*Ñ*¨1Õ-©qð2óð ð	ð ‰Ü	�Eœ3Ô	Ü×&Ñ& uÓ-ˆà€EØò ˆÜ�k¤D¬# ;Ô/Ü—_‘_ [Ó1ò "�Ú˜ %šØ!�E˜!’Hñ"ô ˜¤TÔ*Ø—‘ ¨	Ó2ˆAØŸ)™) A›,Ò,¨"ˆKÜ×)Ñ)¨;¸Ð*DÓEˆE�!ŠHäð)Ü,6×,?Ñ,?ÀÓ,LñNóð ðñ  ØˆØ#Ÿk™k›mò 	'‰NˆE�7ØˆIØŸ™›ò %‘��1Ø—I‘I˜c 3Ó'×-Ñ-Ó/�ÚØ#$�I˜a’Lð%ð 'ˆG�EŠNð	'ð ˆð €HÙ�˜eÑ#Ø—Y‘Y˜yÓ)ˆ
Ùð (×,Ñ,Ó.ˆLØ#×'Ñ'¨Ó/ˆHØ%×)Ñ)¨(°BÓ7ˆJð "ŸI™I h°Ó3ˆMØ)×-Ñ-¨h¸Ó;ˆMä×1Ñ1°-ÀÓLˆLØ&)§h¡h¨|Ó&<ˆM˜(Ñ#ô #×0Ñ0Ø˜z¨=Ð9óˆE�(‰Oð  Ÿ+™+›-ò F‰ˆˆwÙ2:˜U hÒ.Àˆ�	ÒðFð €Lr   c                 óÄ  — | si } i }d| v rr| d   rm| d   }t        |t        «      rd|i}t        j                  ddd¬«       n;t        |t        «      s+t
        j                  dt        j                  |«      «       i }i }	 |j                  «       }t        j                  ||g«      }| j                  d	g «      }t        |t        t        f«      r%t        j                  d
t        |«      › �dd¬«       n;t        |t        «      s+t
        j                  dt        j                  |«      «       g }|rht        |t        «      r|j!                  ddi«       nDt        |t        «      rt	        |«      j                  dd«      |d<   nt        |t        «      r|dz  }i }d| v rt#        | d   «      }t%        ||«      }||fS # t        $ r t
        j                  d«       Y �ŒNw xY w)NÚuserr!   z'user' of type stringz22.2zUse 'users' list instead.)Ú
deprecatedÚdeprecated_versionÚextra_messagez?Format for 'user' key must be a string or dictionary and not %sziDistro has not implemented default user access. No distribution provided default user will be normalized.r3   z'users' of type zUse 'users' as a list.z^Format for 'users' key must be a comma-separated string or a dictionary or a list but found %sr"   Tz,defaultr   )r   r	   r   Ú	deprecater   ÚLOGÚwarningr   r   Úget_default_userÚNotImplementedErrorr   r,   r+   Útyper   r   r   rB   )ÚcfgÚdistroÚold_userÚdistro_user_configÚdefault_user_configÚ
base_usersr   r3   s           r   Únormalize_users_groupsrT   ¥   sÜ  € ÙØˆð
 €HØ��}˜˜VšØ�v‘;ˆä�h¤Ô$Ø Ð)ˆHÜ×ÑØ2Ø#)Ø9öô
 ˜H¤dÔ+Ü�K‰Kðä×#Ñ# HÓ-ôð
 ˆHð Ðð
Ø#×4Ñ4Ó6Ðô ×,Ñ,¨hÐ8JÐ-KÓLÐà—‘˜ "Ó%€JÜ�*œt¤S˜kÔ*Ü×ÑØ)¬$¨zÓ*:Ð);Ð<Ø%Ø2ö	
ô
 ˜
¤TÔ+Ü�‰ð6ä×Ñ 
Ó+ô	
ð
 ˆ
áä�j¤$Ô'Ø×Ñ˜v yÐ1Õ2Ü˜
¤DÔ)Ü$(¨Ó$4×$8Ñ$8¸ÀDÓ$IˆJ�yÒ!Ü˜
¤CÔ(Ø˜*Ñ$ˆJà€FØ�3�Ü" 3 x¡=Ó1ˆä˜ZÐ)<Ó=€EØ�6ˆ?ÐøôQ ò 
Ü�‰ðE÷	
ð
ús   Â F= Æ=GÇGc                 ó¸   — | s||fS d„ }t        t        || j                  «       «      «      }|s||fS t        |«      d   }||   }|j	                  dd «       ||fS )Nc                 ó$   — | d   }|rd|vry|d   S )Né   r"   F© )ÚentryÚconfigs     r   Ú	safe_findz"extract_default.<locals>.safe_find÷   s#   € Ø�q‘ˆÙ˜¨&Ñ0ØØ�iÑ Ð r   r   r"   )r   Úfilterr   r   r*   )r3   Údefault_nameÚdefault_configr[   Ú	tmp_usersr!   rZ   s          r   Úextract_defaultr`   ó   sk   € ÙØ˜nÐ-Ð-ò!ô ”V˜I u§{¡{£}Ó5Ó6€IÙØ˜nÐ-Ð-ä�	‹?˜1Ñ€DØ�t‰_€FØ
‡J�Jˆy˜$ÔØ�&ˆ>Ðr   )N)NN)ÚloggingÚ	cloudinitr   r   r   Ú	getLoggerÚ__name__rI   r   rB   rT   r`   rX   r   r   ú<module>re      s;   ðó ç 1Ñ 1à€g×Ñ˜Ó!€ò%óbNòxIô\r   