
    2.a
                     V    d dl Z  e j                  d      Zd Zd Zd Zd Zd	dZd Zy)
    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                 B    || v r| |   j                  |       y |g| |<   y N)append)port_bindingsinternal_portexternals      4/usr/lib/python3/dist-packages/docker/utils/ports.pyadd_port_mappingr
      s)    %m$++H5(0zm$    c                 x    ||D ]  }t        | |d         y t        ||      }|D ]  \  }}t        | ||        y r   )r
   zip)r   internal_port_rangeexternal_ranger   portsexternal_ports         r	   add_portr      sV    0 	AM]M4@	A '8,1 	J(M=]M=I	Jr   c                 N    i }| D ]  }t        |      \  }}t        |||        |S r   )
split_portr   )r   r   portr   r   s        r	   build_port_bindingsr       s=    M E.8.>+^ 3^DE r   c                     t        d| z        )NzTInvalid port "%s", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol])
ValueError)r   s    r	   _raise_invalid_portr   (   s    
 ')-. / /r   c                     | s| S |s| |z   gS |r|  d| |z   gS t        t        |       t        |      dz         D cg c]  }t        |      |z    c}S c c}w )N-   )rangeintstr)startendprotorandomly_available_portr   s        r	   
port_ranger$   .   se    '3% 5())*/E
CHqL*IJ$CIJJJs   Ac                 $   t        | d      r| j                         } t        |       } t        j	                  |       }|t        |        |j                         }|d   }|d   xs d}t        |d   |d   |      }t        |d   |d   dt        |      d	k(        }|(|"t        |      t        |      k7  rt        d
      ||fS |sd gt        |      z  }n"t        |      t        |      k7  rt        d
      ||D cg c]  }||f c}fS c c}w )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Dx4*DDDDs   >D)F)	recompiler-   r
   r   r   r   r$   r    r   r	   <module>r7      s>    	BJJ		2J/KEr   