
    
                     X    S SK r \ R                  " S5      rS rS rS rS rS	S jrS rg)
    Nz^((\[?(?P<host>[a-fA-F\d.:]+)\]?:)?(?P<ext>[\d]*)(-(?P<ext_end>[\d]+))?:)?(?P<int>[\d]+)(-(?P<int_end>[\d]+))?(?P<proto>/(udp|tcp|sctp))?$c                 @    X;   a  X   R                  U5        g U/X'   g N)append)port_bindingsinternal_portexternals      %lib/third_party/docker/utils/ports.pyadd_port_mappingr
      s#    %$++H5(0z$    c                 z    Uc  U H  n[        XS 5        M     g [        X5      nU H  u  p5[        XU5        M     g r   )r
   zip)r   internal_port_rangeexternal_ranger   portsexternal_ports         r	   add_portr      s@    0M]4@ 1 '8,1(M]=I -2r   c                 N    0 nU  H  n[        U5      u  p4[        XU5        M     U$ r   )
split_portr   )r   r   portr   r   s        r	   build_port_bindingsr       s1    M.8.>+^D  r   c                     [        SU -  5      e)NzTInvalid port "%s", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol])
ValueError)r   s    r	   _raise_invalid_portr   (   s    
 ')-. / /r   c                     U (       d  U $ U(       d  X-   /$ U(       a  U  SU 3U-   /$ [        [        U 5      [        U5      S-   5       Vs/ s H  n[        U5      U-   PM     sn$ s  snf )N-   )rangeintstr)startendprotorandomly_available_portr   s        r	   
port_ranger$   .   si    '3% 5())*/E
CHqL*IJ*I$CI*IJJJs   A&c                 L   [        U S5      (       a  U R                  5       n [        U 5      n [        R	                  U 5      nUc  [        U 5        UR                  5       nUS   nUS   =(       d    Sn[        US   US   U5      n[        US   US   S[        U5      S	:H  5      nUc)  Ub#  [        U5      [        U5      :w  a  [        S
5      eXV4$ U(       d  S /[        U5      -  nO#[        U5      [        U5      :w  a  [        S
5      eXV Vs/ s H  osU4PM     sn4$ s  snf )Nlegacy_reprhostr"    r   int_endextext_endr   z!Port ranges don't match in length)
hasattrr&   r   	PORT_SPECmatchr   	groupdictr$   lenr   )r   r.   partsr'   r"   internalr   ext_ports           r	   r   r   8   s#   t]## !t9DOOD!E}D!OOE=D'N bE%,i(8%@HeeI&CMQ,>@H |CMS]$BABB!!vH-H]c(m+ABB8D8x*8DDDDs   D!)F)	recompiler-   r
   r   r   r   r$   r    r   r	   <module>r7      s<    	JJ		2J/KEr   