
    vKg
                        S SK r S SKrS SKrS SKrS SKr/ SQr\" \5      rS r\R                  " 5       S\R                  \   S\R                  \   4S j5       rS\R                  \   S\4S jrS	 rS
 rS\R                  \   S\4S jrg)    N))b   )ki   )mi   )gi   @)tl        c                    [        [        [        SS  5       H^  u  pUS   U s=::  a  US   :  d  M  O  M  US   nUS   n[        X-  S5      nU[        U5      :X  a  [        U5      n[	        U5      U-   s  $    U < [        S   S   < 3$ )Nr   r      )zip
SIZE_TABLEroundintstr)sizebottomtopsuflimxs         m/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/seleniumwire/thirdparty/mitmproxy/utils/human.pypretty_sizer      s    :z!"~6!9%s1v%%)C)Cdj!$ACF{Fq6C< 7 :a=+,,    sreturnc                    U c  g [        U 5      $ ! [         a     Of = f[        R                  5        HE  nU R	                  U5      (       d  M   [        U SS 5      [        U   -  s  $ ! [         a       Of = f   [        S5      e)z
Parse a size with an optional k/m/... suffix.
Invalid values raise a ValueError. For added convenience, passing `None` returns `None`.
NzInvalid size specification.)r   
ValueError
SIZE_UNITSkeysendswith)r   is     r   
parse_sizer"      s     	y1v __::a==1Sb6{Z]22 	  2
33s   
 
A++
A98A9secsc                     / SQnU c  gU H  u  p#X:  d  M  UR                  U 5      s  $    SR                  U S-  5      $ )N))d   z{:.0f}s)
   z{:2.1f}s)r   z{:1.2f}s z{:.0f}msi  )format)r#   
formatterslimit	formatters       r   pretty_durationr,   3   sM    J
 |&=##D)) ' TD[))r   c                     [         R                  " U 5      n [        R                  R                  [         R                  " U 5      5      nUR                  S5      $ )Nz%Y-%m-%d %H:%M:%S)time	localtimedatetimefromtimestampmktimestrftimer   ds     r   format_timestampr6   C   s>    qA''A7A::)**r   c                 h    [         R                   R                  U 5      nUR                  S5      S S $ )Nz%Y-%m-%d %H:%M:%S.%f)r0   r1   r3   r4   s     r   format_timestamp_with_millir9   I   s/    ''*A::,-cr22r   addressc                     U c  g [         R                  " U S   5      nUR                  (       a  SR                  U S   5      $ [	        U[         R
                  5      (       a  SR                  [        U5      U S   5      $ UR                  (       a(  SR                  [        UR                  5      U S   5      $ SR                  [        U5      U S   5      $ ! [         a    SR                  U S   U S   5      s $ f = f)zb
This function accepts IPv4/IPv6 tuples and
returns the formatted address string with port number
z<no address>r   z*:{}r   z{}:{}z[{}]:{})		ipaddress
ip_addressis_unspecifiedr(   
isinstanceIPv4Addressr   ipv4_mappedr   )r:   hosts     r   format_addressrC   N   s    
 6##GAJ/==,,dI1122>>#d)WQZ88>>#d&6&6"7DDD	71:66 6~~gaj'!*556s#   =C <C 8C :C "C=<C=)r0   	functoolsr<   r.   typingr   dictr   r   	lru_cacheOptionalr   r   r"   floatr,   r6   r9   tuplerC    r   r   <module>rL      s        
 *
	- 4&//#& 46??3+? 4 4(*&//%0 *S * +3
6FOOE2 6s 6r   