
    VGh               	          d dl Z d dlZd dlZd dlZd dlZd dlZd dlZddlmZm	Z	m
Z
mZmZmZmZmZ d Zd Zd Zd Zd Zd	 Zd
 Zd6dZd7dedefdZi ddddddddd eej6                        d eej8                        d eej:                        dej<                  dej>                  d eej@                        d eejB                        d eejD                        d eejF                        d eejH                        d eejJ                        d eejL                        d eejN                         eejP                         eejR                         eejT                        eeed Z+h d!Z,d"Z- e. e/ e/d#d$d%             Z0d&Z1d'Z2 G d( d)      Z3 G d* d+e	      Z4 G d, d-e	      Z5 G d. d/e	      Z6 G d0 d1e jn                        Z8 G d2 d3      Z9 G d4 d5      Z:y)8    N   )
NO_DEFAULTExtractorErrorfunction_with_repr
js_to_jsonremove_quotestruncate_stringunified_timestampwrite_stringc                      d  fd}|S )Nc                     | d t         fv ryt        j                  t              5  t	        j
                  |       r
	 d d d        y	 d d d        t        t        |             S # 1 sw Y   xY wNr   )JS_Undefined
contextlibsuppress	TypeErrormathisnanintfloat)xs    X/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/jsinterp.pyzeroisez_js_bit_op.<locals>.zeroise   s`    |$$  + 	zz!}	 		 58}	 	s   A""A+c                 4      |        |            dz  S )Nl     )abopr   s     r   wrappedz_js_bit_op.<locals>.wrapped   s    '!*gaj)J66    r   )r   r   r   s   ` @r   
_js_bit_opr!      s    7 Nr    c                       fd}|S )Nc                 P    t         | |fv rt        d      S  | xs d|xs d      S Nnanr   r   r   r   r   r   s     r   r   z_js_arith_op.<locals>.wrapped&   s.    Aq6!<!&q!&q!!r    r   r   r   s   ` r   _js_arith_opr)   $   s    "
 Nr    c                 `    t         | |fv s| s|st        d      S |r	| xs d|z  S t        d      S )Nr%   r   infr&   r   r   s     r   _js_divr-   .   s5    1va1U|AFa<.%,.r    c                 B    t         | |fv s|st        d      S | xs d|z  S r$   r&   r,   s     r   _js_modr/   4   s(    1vQU|Fa<r    c                 D    |syt         | |fv rt        d      S | xs d|z  S )Nr   r%   r   r&   r,   s     r   _js_expr1   :   s,    	!Q	U|Fq=r    c                       fd}|S )Nc                 B    | |hd t         hk  r	 | |       S  | |      S N)r   r'   s     r   r   z_js_eq_op.<locals>.wrappedD   s*    q6dL))a8O!Qxr    r   r(   s   ` r   	_js_eq_opr5   B   s    
 Nr    c                       fd}|S )Nc                     t         | |fv ryt        | t              st        |t              r# t        | xs d      t        |xs d            S  | xs d|xs d      S )NFr   )r   
isinstancestrr'   s     r   r   z_js_comp_op.<locals>.wrappedN   sW    Aq6!aAs!3c!&qk3qvA;//!&q!&q!!r    r   r(   s   ` r   _js_comp_opr:   L   s    " Nr    c                     | ddddt         fv r|S t        j                  t              5  t	        j
                  |       r|cddd       S 	 ddd       |S # 1 sw Y   |S xY w)z6Simulate JS's ternary operator (cndn?if_true:if_false)FNr    )r   r   r   r   r   r   )cndnif_trueif_falses      r   _js_ternaryr@   X   sb    tQL11			Y	' ::d  N Ns   AAvalradixc                   
 |t         d fv rd}|t        dd      v sJ d       t        j                  |       ry| dk(  ryt        j                  |       r	| dk  rdS d	S |dk(  r	 d

t        j                         }| dk  }t        |       } t        j                  |       \  }}t        t        j                  dt        j                        t        j                  |       dz        }||k\  r|j                  d       ||k\  r||z  }t        j                  ||z        \  }}|j                  t        |             |dkD  xs |dk(  xr t        |      dz  }|r[||z   dkD  rSt        t        dt!        |                  D ],  }	||	   dz   |k  r||	xx   dz  cc<    n|j#                          . |dz  }n||k\  rt%        t        |      |      \  }}|j'                  |       |dkD  r&t%        ||      \  }}|j'                  |       |dkD  r&|r|j'                  d       t)        
fd|D              j+                  d      S )N
      %   z:radix must be an integer at least 2 and no greater than 36NaNr   0z	-InfinityInfinitys&   0123456789abcdefghijklmnopqrstuvwxyz.-g        g      ?r   c              3   (   K   | ]	  }|     y wr4   r   ).0digitALPHABETs     r   	<genexpr>z&js_number_to_string.<locals>.<genexpr>   s     5U%5s   ascii)r   ranger   r   isinfcollectionsdequeabsmodfmax	nextafterr+   ulpappendr   reversedlenpopdivmod
appendleftbytesdecode)rA   rB   resultsignfractionintegerdeltarN   needs_roundingindexrO   s             @r   js_number_to_stringrj   c   s)   t$$E!RL ^"^^ zz#
axzz#!Ag{5:5{8H F7D
c(C		#Hgr488,dhhsma.?@E5b
e
))Hu$45%c%j!!COHO,NE
Qh.2!%3v;"78 %=1$u,5MQ&M

	 1 e
" CL%0NGU
e
A+/%  A+ "5f55<<WEEr    ???||&&|^&===!====!=<=>=<>z>>z<<)+-*%/z**>   rx   ry   ru   rv   rt   rw   rs   rr   z[a-zA-Z_$][\w$]*z()z{}[]z'"/z&[^[\]]+(?:\[[^[\]]+(?:\[[^\]]+\])?\])?c                       e Zd Zy)r   N)__name__
__module____qualname__r   r    r   r   r      s    r    r   c                       e Zd Zd Zy)JS_Breakc                 0    t        j                  | d       y )NzInvalid breakr   __init__selfs    r   r   zJS_Break.__init__   s    o6r    Nr   r   r   r   r   r    r   r   r      s    7r    r   c                       e Zd Zd Zy)JS_Continuec                 0    t        j                  | d       y )NzInvalid continuer   r   s    r   r   zJS_Continue.__init__   s    &89r    Nr   r   r    r   r   r      s    :r    r   c                       e Zd Zd Zy)JS_Throwc                 D    || _         t        j                  | d|        y )NzUncaught exception )errorr   r   )r   es     r   r   zJS_Throw.__init__   s!    
(;A3&?@r    Nr   r   r    r   r   r      s    Ar    r   c                       e Zd Zd Zd Zy)LocalNameSpacec                 `    | j                   D ]  }||v s|||<    y  || j                   d   |<   y r   )maps)r   keyvaluescopes       r   __setitem__zLocalNameSpace.__setitem__   s<    YY 	Ee|"c
	 "		!Sr    c                     t        d      )NzDeleting is not supported)NotImplementedError)r   r   s     r   __delitem__zLocalNameSpace.__delitem__   s    !"=>>r    N)r   r   r   r   r   r   r    r   r   r      s    "?r    r   c                   >    e Zd ZddlZdZeddd       Zed        Z	y)Debuggerr   NFd   levelc                 ^    t        ddd| z
  z   dj                  d |D               d       y )Nz[debug] JS: z  r    c              3   H   K   | ]  }t        t        |      d d         yw)2   N)r	   r9   )rM   r   s     r   rP   z!Debugger.write.<locals>.<genexpr>   s      OQQR!@ Os    "
)r   join)r   argss     r   writezDebugger.write   s9    |DC%K$8#9 O$ OOPPRT 	Ur    c                       fd}|S )Nc                    	j                   r#|j                         r	j                  ||       	  
| |||g|i |\  }}	j                   rD|j                         r4|st        |      |k7  r$	j                  ddg|   t        |      d||       ||fS # t        $ rD}	j                   r2t	        |t
              r|j                  }	j                  d|d||        d }~ww xY w)Nr   z
=> Raises:z<-|z->z=>)ENABLEDstripr   	Exceptionr8   r   orig_msgrepr)r   stmt
local_varsallow_recursionr   kwargsret
should_retr   clsfs            r   interpret_statementz6Debugger.wrap_interpreter.<locals>.interpret_statement   s    {{tzz|		$o	6"#D$
O"]d"]V\"]Z {{tzz|cd!2IItTl:6S	5$VeIf
?"  ;;!!^4JJIIlAud/IRs   B 	C%!?C  C%r   )r   r   r   s   `` r   wrap_interpreterzDebugger.wrap_interpreter   s    	# #"r    )
r   r   r   sysmodulesr   staticmethodr   classmethodr   r   r    r   r   r      s5    G U U # #r    r   c                   0   e Zd ZdZddej
                  ej                  ej                  ej                  ddZ	ddZ
 G d d	e      Zd
 Zed        Zedd       Zedd       Zd ZddZd Zej.                  dd       Zd Zd Zd Zd Zd Zd Zd Zy)JSInterpreterr   i   i   i   )dgimsuyNc                 D    |i c| _         | _        |i | _        y || _        y r4   )code
_functions_objects)r   r   objectss      r   r   zJSInterpreter.__init__  s#    %)2"	4?%o7r    c                         e Zd Zd fd	Z xZS )JSInterpreter.Exceptionc                 p    | |j                          dt        |dd       }t        |   |g|i | y )Nz in: r   )rstripr	   superr   )r   msgexprr   r   	__class__s        r   r   z JSInterpreter.Exception.__init__  s@    eOD"b,I+JKGS24262r    r4   )r   r   r   r   __classcell__)r   s   @r   r   r     s    	3 	3r    r   c                     | xj                   dz  c_         d| j                    }t        |      r*t        |t              st        |d| j                    d      }|||<   |S )Nr   __yt_dlp_jsinterp_objF<ry   )$_JSInterpreter__named_object_countercallabler8   r   )r   	namespaceobjnames       r   _named_objectzJSInterpreter._named_object  sa    ##q(#&t'B'B&CDC=C1C!D$SBt/J/J.K1*MNC	$r    c                     d}|s||fS t        |      D ]'  \  }}|| j                  vr n|| j                  |   z  }) ||dz   d  fS )Nr   r   )	enumerate	_RE_FLAGS)r   r   flagsidxchs        r   _regex_flagszJSInterpreter._regex_flags!  sd    $;  	'GC&S]]2&&E	' d378n$$r    c              #     K   d}| sy t         j                  t        j                         d      }dddt	        |      dz
  f\  }}}}d\  }	}
}}t        |       D ]  \  }}|	s|t        v r|t        |   xx   dz  cc<   nI|	s||v r||   r>||xx   dz  cc<   n0|
s.|t        v r|	|d fv r|	s|s|dk7  r|	r|sd n|}	n|	dk(  r	|dv r|dk(  }|
 xr	 |	xr |dk(  }
|	 xr | xr
 |d	vxr |d
v }|	s||v r|n|j                         xr |}|||   k7  st        |j                               s|	s|rd}||k7  r|dz  }| |||z
    |dz   d}}|dz  }|s||k\  s n | |d   y w)Nz+-*/%&|^=<>!,;{}:[r   r   )NFTFr~   r   [\TFz-+)	dictfromkeys_MATCHING_PARENSvaluesr]   r   _QUOTESisspaceany)r   delim	max_splitOP_CHARScountersstartsplitspos	delim_lenin_quoteescapingafter_opin_regex_char_groupr   charin_unary_ops                   r   	_separatezJSInterpreter._separate,  s    '==!1!8!8!:A>()1aUa(?%vsI<T9(H&9"4 	IC(8 8)$/0A50$("2D>TNa'N7?xD$<'?8ts{+3<O4UY_*.#+'#|AATT\H'< N0C,C N'}<NAE $,1AtId\dHuSz!S):%;x;	!qucIo..q!3EaKFVy09	: 56ls   EE"E"E"c                     ||xr t         |d      }t        | j                  ||d            }t        |      dk  r| j	                  d| |      |d   dd  j                         |d   j                         fS )Nr   r   rE   zNo terminating paren )r   listr  r]   r   r   )r   r   r   	separateds       r   _separate_at_parenz JSInterpreter._separate_at_parenS  s    =6-d1g6EtUA67	y>A--"7w ?FF|AB%%'1););)===r    c           	      f   |dv r|dk(  t        |      z  r5|S |dk(  r|d t        fvr$|S |dk(  rt        |g| j                  |dd       }| j                  |||      }t        j                  |      s|S 	 t	        |   ||      S # t        $ r"}| j                  d|d| d|||	      d }~ww xY w)
N)rm   rn   rn   rl   rk   :r   zFailed to evaluate r   cause)r@   r   r  interpret_expression
_OPERATORSgetr   )	r   r   left_val
right_exprr   r   r   	right_valr   s	            r   	_operatorzJSInterpreter._operator\  s    d
k(334Zl333Y$XSz3PQ0RSJ--j*oV	~~b!	gb>(I66 	g..#6xl!B4q!VX\de.ff	gs   6B 	B0B++B0c                     |dk(  rt        |      S 	 t        |t              r|t        |         S ||   S # t        $ r2}|rt
        cY d }~S | j	                  d| t        |      |      d }~ww xY w)NlengthzCannot get index r  )r]   r8   r  r   r   r   r   )r   r   r   allow_undefinedr   s        r   _indexzJSInterpreter._indexo  st    (?s8O	P$.sD$93s3x=Gs3xG 	P##..#4SE!:DIQ.OO	Ps$   5 5 	A0A+A0 A++A0c                 p    	 t        j                  |      S # t        $ r | j                  ||      cY S w xY wr4   )jsondumpsr   r   )r   r   r   s      r   _dumpzJSInterpreter._dumpy  s7    	6::c?" 	6%%i55	6s    55c                     6789:;< dk  r j                  d      dz  d}t         j                  |d            xs dg}|j                         j	                         x9}|D ]   } j                  |      \  }}|s||fc S  t        j                  d|      }|rj|t        |j                  d            d  j	                         9|j                  d      rt         j                  9            |j                  d	       }9sd |fS 9d   t        v r j                  99d   d      \  }	}
9d   d
k(  r j                  |
      \  }}
|	 d
| }	n't        j                  t!        |	 9d    d            }	|
s|	|fS  j#                  |	      |
z   99j%                  d      r9dd  }|j%                  d      rm j'                  |dd        \  }}t)         j                  |      d      }| j                  d|9       j+                  t-        |dz              |z   9n j                  d| 9      9j%                  d      r j                  9dd        }d |fS 9j%                  d      r j'                  9      \  }	}
 j                  |	      D cg c],  }t         j                  |j	                         dd            . }}t/        d |D              r fd8t1        8fd|D              |fS  j                  |	      \  }	}|
r|r|	|xs |fS  j+                  |	      |
z   99j%                  d      rK j'                  9      \  }	}
 j                  |	      \  }	}|
r|r|	|xs |fS  j+                  |	      |
z   99j%                  d      rY j'                  9      \  }	}
 j#                   j                  |	      D cg c]  } j                  |       c}      }||
z   9t        j                  d9      }|r|j3                         ni }|j5                  d      rȉ j'                  9|j7                         dz
  d        \  }9 j'                  9j9                               \  }9d }t        j                  d9      }|r( j'                  9|j7                         dz
  d        \  }9t;         j                  |            } j                  |r|n|      \  }}|r|dfS |j5                  d      ri j'                  9|j7                         dz
  d        \  }9d }	  j                  |      \  }}|r|dfS 	 d }t        j                  d!t<         d"9      }|r j'                  9|j7                         dz
  d        \  }9|rii }|j                  d#      r0t?        |t              r|j@                  n|||j                  d#      <   jC                  |      }d  j                  ||      }}t        j                  d$9      }|rD j'                  9|j7                         dz
  d        \  }9 j                  |      \  }}|r|dfS |\  }}|r|dfS |rC||j5                  d%      r, j'                  9|j7                         dz
  d        \  }}|j%                  d      r j'                  |      \  } 9ndt        j                  d&|      }!|!rG j'                  ||!j7                         dz
  d        \  }"} j'                  |d'      \  } 9d(|"d)| d'} n|dc} 9 j                  |d      \  }#}}$ j                  |#       	 t;         j                  |            sn5	  j                  |       \  }}|r|dfS 	  j                  |$       P|j5                  d*      r j'                  9|j7                         dz
  d        \  }"} j                  |"      }" j'                  |d'      \  } 9| jI                  d+d,      jK                  d-      dd  }%d.D ]y  }&d}'|%D ]l  }d/  j                  |dd      D        \  }(}|&r
|'xs |(d0k(  }'n|'s|(d0k7  xr |" j                  |(      k(  }'|'sN	  j                  |      \  }}|r|c c S n |'sy n |r j                  9      \  }}||xs |fS t         j                  9            }t        |      dkD  r)|D ]   } j                  |      \  }}|s|dfc S  dfS t        j                  d1t<         d2tL         d3d4jO                  tQ        t        jR                  tU        tV              tX        z
               d59      }|rbj5                  |j                  d6            })|j                  d7      s\ j[                  |j                  d8      |)|j                  d9      9      |j                  d6      <   |j                  d6         |fS |)d t\        fv r$ j                  d:|j                  d6       9       j                  |j                  d7            }*t?        |*t,        t^        f      s j                  d;|* d<9      t-        |*      }* j[                  |j                  d8       ja                  |)|*      |j                  d9      9      |)|*<   |)|*   |fS t        jb                  d=t<         d>t<         d?9      D ]  }|j                  d@      xs |j                  dA      }+|je                         \  }#},|j                  dB      xs |j                  dC      }-|+   }|+xx   |-d   dDk(  rdndEz  cc<   |j                  dB      r|+   }9d |#  j+                  |      z   9|,d  z   9 9sd |fS t        j                  dFt<         dGt<         dHtL         dIt<         dJt<         dK9      }9jg                         rt-        9      |fS 9dLk(  rtD        9dMk(  rtF        9dNk(  rt\        |fS 9dOk(  rt_        dO      |fS |r8|j                  dP      r'j5                  |j                  dQ      t\              |fS ti        jj                  tl              5  t        j                  t!        9d            |fcd d d        S c c}w c c}w # t         $ r}|}Y d }~d }~ww xY w# tD        $ r Y NtF        $ r Y pw xY w# tD        $ r Y  pw xY w# 1 sw Y   nxY w|r[|j                  dR      rJ|j                  dS         }. j                  |j                  dT            }* ja                  |.|*      |fS tV        D ]  }/t         j                  9|/            }0|0j                         }1	 |/dUv r2t        |0      dkD  r$|0dE   j	                         s|0j                          n|0r|/dVk(  r|1j%                  dW      sn"|/ |1 }1|/dXk7  r|0j                          |/ |1 }1q|0s j                  |/jO                  |0            }) j[                  |/|)|19      |fc S  |r|j                  dY      r|j                  d	dZd[      \  <:;:s" j                  |j                  d\            :9|j7                         d  66j%                  d      r j'                  6      \  6}nd 6c6}9: fd]7679:; <f	d^}2|r6 j                   j#                   |2             |z         \  }}||xs |fS  |2       |fS |r|j                  d_      r|j                  d`      }3 j                  |j                  da            D 4cg c]  }4 j                  |4       nc c}4w }5}4|3v r |3   |5b      |fS |3 jn                  vr jq                  |3       jn                  |3<     jn                  |3   |5b      |fS  j                  dc9|k7  rts        9dddd      nd |      )eNr   zRecursion limit reachedr   F;r<   zJ(?P<var>(?:var|const|let)\s)|return(?:\s+|(?=["\'])|$)|(?P<throw>throw\s+)throwvarr~   T)strictznew    zDate(zFailed to parse date i  zUnsupported object zvoid    {r  c              3   8   K   | ]  }t        |      d k(    yw)rE   N)r]   )rM   sub_exprs     r   rP   z4JSInterpreter.interpret_statement.<locals>.<genexpr>  s     F(3x=A%Fs   c                     j                  |      }t        j                  t        |       r| |fS j                  |       |fS r4   )r
  rematch_NAME_RE)r   rA   r   r   r   s     r   	dict_itemz4JSInterpreter.interpret_statement.<locals>.dict_item  sI    33C_UCxx#."Cx44S*oVX[[[r    c              3   6   K   | ]  \  }} ||        y wr4   r   )rM   kvr'  s      r   rP   z4JSInterpreter.interpret_statement.<locals>.<genexpr>  s     H1IaOHs   (r   z(?x)
                (?P<try>try)\s*\{|
                (?P<if>if)\s*\(|
                (?P<switch>switch)\s*\(|
                (?P<for>for)\s*\(
                ifzelse\s*{try)NFzcatch\s*(?P<err>\(\s*z	\s*\))?\{errzfinally\s*\{forzswitch\s*\(}zswitch(z){switchzdefault:zcase default:zcase )FTc              3   <   K   | ]  }|j                           y wr4   )r   )rM   r   s     r   rP   z4JSInterpreter.interpret_statement.<locals>.<genexpr>3  s     !R!'')!Rs   defaultz(?x)
                (?P<out>z)(?:\[(?P<index>z )\])?\s*
                (?P<op>ro   z3)?
                =(?!=)(?P<expr>.*)$
            outri   r   r   z Cannot index undefined variable zList index z must be integerz3(?x)
                (?P<pre_sign>\+\+|--)(?P<var1>z)|
                (?P<var2>z)(?P<post_sign>\+\+|--)var1var2pre_sign	post_signrz   rK   za(?x)
            (?P<return>
                (?!if|return|true|false|null|undefined|NaN)(?P<name>z8)$
            )|(?P<attribute>
                (?P<var>z`)(?:
                    (?P<nullish>\?)?\.(?P<member>[^(]+)|
                    \[(?P<member2>zL)\]
                )\s*
            )|(?P<indexing>
                (?P<in>zH)\[(?P<idx>.+)\]$
            )|(?P<function>
                (?P<fname>z )\((?P<args>.*)\)$
            )breakcontinue	undefinedrG   returnr   indexinginr   z?<>*-rk   .r{   	attributemembernullishmember2c                 8    | sj                   d|       y)z3 assert, but without risk of getting optimized out r   N)r   )r=   r   r   rA  r   s     r   	assertionz4JSInterpreter.interpret_statement.<locals>.assertion  s'    ..F81SE):DAA r    c            	      ~  	 fdk(  r;t         j                  r*t         j                  j                  d d             y t        t
        t        d} j                  | j                  t                    }|t        u rNj                  vr 	 j                        j                  <   j                  j                  t              }r|t        u rt        S j                  |      S j                        D cg c]  }j                  |       }}t        |t               rj#                  d      rj%                  d      d   j%                  d      \  }}} |d        t        |d	   |      d
|        |dk(  r|^}}nL|dk(  r2 t'        |      dk(  d       |\  }} t        |t              d       nj                  d|       ||t        u rBdk(  r( |d       dj)                  t+        t,        |            S j                  d       |t
        u r:dk(  r  t'        |      dk(  d       |d	   |d   z  S j                  d       dk(  rB |d        t'        |      dk(  d       |d	   r|j/                  |d	         S t        |      S dk(  r@ t        |t              d        t'        |      dk(  d       |d	   j)                  |      S dk(  r | d       |j1                          |S dk(  rB t        |t        t        f      d        t'        |      dk  d       |t3        g |d     S d k(  r t        |t              d        |d       t+        t4        g |t'        |      d d       \  }}|d	k  r|t'        |      z  }|dd  }	g }
t7        |t9        ||z   t'        |                  D ]"  }|
j;                  |j=                  |             $ t?        |	      D ]  \  }}|jA                  ||z   |        |
S d!k(  rD t        |t              d        |d       tC        |      D ]  }|jA                  d	|        |S d"k(  r4 t        |t              d        | d       |sy |j=                         S d#k(  r |d       |jE                  |       |S d$k(  rU |d        t'        |      dk  d%       g |dd d \  }}t?        |      D cg c]  \  }} ||||fd&|i       c}}S d'k(  r= |d        t'        |      dk  d%       g |d	d d \  }}	 |jG                  ||      S d)k(  rc t        |t              d*        t'        |      dk(  d       t        |d	   t4              r|d	   nd	}|t'        |      k\  ry tK        ||         S t        |t              rt5              n} ||   |+      S # j                  $ r s Y ow xY wc c}w c c}}w # tH        $ r Y y(w xY w),N)consoledebugr   ])StringMathArrayz
prototype.r?  rE   ztakes one or more argumentsr   zneeds binding to type callapplyztakes two argumentsz"second argument needs to be a listzUnsupported Function method fromCharCoder<   zUnsupported String method powr   zUnsupported Math method splitz&with limit argument is not implementedr   zmust be applied on a listztakes exactly one argumentreversezdoes not take any argumentsslicez#must be applied on a list or stringztakes between 0 and 2 argumentsspliceunshiftr^   pushforEachztakes at-most 2 argumentsthisindexOfrK   
charCodeAtzmust be applied on a stringr   )&r   r   r   r
  r9   r   r  r  r   r   extract_objectr   r   r  r  r8   type
startswith	partitionr]   r   mapchrrQ  rR  rS  r   rR   minr[   r^   r   insertr\   extendri   
ValueErrorord)typesr   r*  argvals
new_member_func_prototyperi   how_many	add_itemsresr   itemr   rX  r   r   r   arg_strrE  r   r   rA  rB  r   variables                    r   eval_methodz6JSInterpreter.interpret_statement.<locals>.eval_method  s    f%)=='' t'@'@1WIQQ[]l'mn "!!
 !nnXuyy:/NO*$t}}4&6:6I6I(T^6_DMM(3 --++HlCCsl2'' ?;;sFG<<
 "^^G46 --a_M6 6
 c4(V->->|-L4:4D4DS4I!4L4V4VWZ4[1J>g'DEjS9=STWSX;YZ%/(/g'72!#g,!"35JK'.W!*Wd";=ab"nn/KNK[-\^bcc'F#:/!'+HI!wws3'899..+EfX)NPTUUE\!#g,!"35JK&qzWQZ77..+CF8)LdSSW$g'DEc'la/1YZ4;AJ399WQZ0MDIMv%jd35PQc'la/1MN"1:??3//y('k+HIKKMJw&jtSk:<abc'la/1RSu4g4t455x'jd35PQg'DE&)#0D'0D3s80Dbq/I&JOE8qyS) 'IC"5#eh.>C*IJ 3

3775>23#,Y#7 44

519d34Jy(jd35PQg'DE ( 1 ,

1d+,Ju_jd35PQ'k+HI779$v%g'DEJJw'Jy(g'DEc'la/1LM-~"~r2GAtbklobpqU^UXZ^AtS#.Pqqy(g'DEc'la/1LM"/G-Q-!!4JC""yye44 |+jc24QRc'la/1MN(271:s(C'!*Cc#h#s3x=(%/T%:c&ks3xII]  $~~ &#* % $+&6^ r & "!"s0   X 
X%X*(X0 X"!X"0	X<;X<functionfnamer   r[  zUnsupported JS expression    ):r   r  r  r^   r   r   r$  r%  r]   groupr   r
  r   r   r  loadsr   r   r^  r  r
   r  r   allr   	groupdictr  endlstripr@   r&  r8   r   	new_childr   r   replacerQ  _NESTED_BRACKETSr   r`  escapesetr  _COMP_OPERATORSr  r   r   r  finditerspanisdigitr   r   re  r   extract_functionr	   )=r   r   r   r   should_returnsub_statementssub_stmtr   r   innerouterr   r   leftrightdater"  sub_expressionsshould_abortro  r   mdr=   if_expr	else_exprtry_exprr.  r   pending
catch_varsconstructor	remainingbodyswitch_m
switch_valr   	incrementitemsr3  matchedcaser  r   r  rz  rd   rA   r   r  r  rr  rt  r*  rh  rp  rE  r'  r   rA  rB  rq  s=   ` ``                                                  @@@@@@@r   r   z!JSInterpreter.interpret_statement  s   Q..!:;;1dnnT378@RD$((*0022t& 	*H!%!9!9(JP_!`CM))	*
 HHbdhiAGGAJ()//1Dwwwt88z?[\\ !.M&&7g>>$Q;LE5Aw#~#007u '5'* 

:Qy.A$#OPm++%%j%85@D??6"qr(C~~g&"55c!"g>e(--dJPRWY<..+@)I4PPzz#dTk"2J?%Gnn':3%%@$GG??7#,,T!"Xz?SD&&??32248LE5^b^l^lmr^stRZtDNN8>>3CS!$LMtOtFoFF\ HHH-WW"&":":5*o"^E<Ll;m;;zz%4u<??32248LE5"&":":5*o"^E<Ll;m;;zz%4u<??32248LE5%%j NN5133 ))$
OL33 4D %<DHH 
   Q[[]R66$<00aeegkl1CDJD$ 33DKKMBMGTId+A"&"9"9$quuw{|:L"M	4t88z?[\D $ 8 8Y
O!MCDy 66%=!44T!%%'A+,5GHNHdC$($<$<XzSb$c!\9$   $G1(:FMA!%!8!8aeegkl9K!L$!#Jwwu~BLSRZB[SYYad
1775>2!+!5!5j!AJ#')A)A(JXg)hC$/A!%!8!8aeegkl9K!L$$($<$<XzSb$c!\9$ 'CDy 	VVE]%)%<%<T!%%'A+,=O%P"K##C(!44Y?
d88NI>,0,C,CIhlln_`N`NaDb,c)J	!%!8!8C!HJD$/94@D!*BJD$%)^^K%E"E4%%eZI"4#<#<T:#_`(,(@(@zSb(c%C#"Dy( $ )))ZQ  VVH$($;$;D1<N$O!J	22:z?[J00C@JD$LL_=CCGLQRPE( ! D!RT^^D#q5Q!RJD$")">TY->$#'9#4 $r'1T5N5NtU_ap5q'q  " ,0,D,DT:Wf,g)\'#&J ( %(  $ 8 8z? [C555 t~~d34!#+ %$($<$<XzSb$c!\9$% :HH !
"23C2D ERYYJ/0Q!RST U 	
 !~~aggen5H777#-1^^GGDM8QWWV_dJP_.a
1775>*!!''%.1=@@dL11nn'GPUGW%XZ^__++AGGG,<j/ZCcC<0nn{3%7G%H$OOc(C NNt{{8S91776?DR\^moHSMC=-// #//7j 9"#:>?CE 
	KA ''&/4QWWV_CJE377:&>!''+*>DS/CsODGsNq:Owwz" o<$**S*"==ST
JD
	K &&HH EEMJ O!
 ###3"4 5 !z "#* %  <<>t9m++W_NZ[ ..U]<..1778$>>!''&/<@-OO  , 	L::jd;<mK	L 	Lw u433B  d   " 0 $ h	L 	L $QWWT]+C++AGGENJXC;;sC(-77 	nBT^^D"56I"J=S^a%7	"@S@S@UMMO#c	j6K6KC6P "tJ<0
9$-MMO#4RD!EJ  001CZQ`aH>>"h
D*o^`mmm	n  %()x(K%Hfg2217793EzSbc15578nG!!#&%)%<%<W%E"%)7"B
@J @JD $($<$<&&z;=AIM%1!\ M9\99"}m33177:&GGG$E $qwwv ?A 00JP A AG A
"(z%(/RTaaadoo-)-)>)>u)E&)4??5)'?SUbbbnn($RV,r2)F\^(_`bfh 	hs`   +1s($s-

s2 t #t&<"t72	t;tt	t#t#"t#&	t43t47u -c                 Z    | j                  |||      \  }}|r| j                  d|      |S )Nz Cannot return from an expression)r   r   )r   r   r   r   r   r  s         r   r
  z"JSInterpreter.interpret_expressionQ  s5    !55dJX]..!CTJJ
r    c           	         d}i }t        j                  dt        j                  |      d|d| j                        }|s| j	                  d|       |j                  d      }t        j                  d|dt        d	|      }|D ]p  }|j                  d
      j                  d      }	t        |j                  d            }
t         | j                  |	|j                  d      g| d|
 d      ||
<   r |S )Nz1(?:[a-zA-Z$0-9]+|"[a-zA-Z$0-9]+"|'[a-zA-Z$0-9]+')z(?x)
                (?<!\.)z,\s*=\s*{\s*
                    (?P<fields>(zP\s*:\s*function\s*\(.*?\)\s*{.*?}(?:,\s*)?)*)
                }\s*;
            zCould not find object fieldsz(?x)
                (?P<key>z!)\s*:\s*function\s*\((?P<args>(?:z%|,)*)\){(?P<code>[^}]+)}
            r   ,r   r   r   ry   )r$  searchr  r   r   rv  r  r&  rQ  r   r   build_function)r   objnameglobal_stack_FUNC_NAME_REr   obj_mr  fields_mr   argnamesr   s              r   r\  zJSInterpreter.extract_objectW  s   P		
 99W%}	6
 II ..#9'!CDDX&;; !(, 	
  	]Awwv,,S1H 0D*###HaggfoMMQSTXSYYZ|]CI	] 
r    c                 l   t        j                  ddt        j                  |      iz  | j                        }|| j	                  d| d      | j                  |j                  d            \  }}|j                  d      j                  d      D cg c]  }|j                          c}|fS c c}w )z @returns argnames, code a  (?xs)
                (?:
                    function\s+%(name)s|
                    [{;,]\s*%(name)s\s*=\s*function|
                    (?:var|const|let)\s+%(name)s\s*=\s*function
                )\s*
                \((?P<args>[^)]*)\)\s*
                (?P<code>{.+})r   zCould not find JS function ""r   r   r  )	r$  r  r  r   r   r  rv  rQ  r   )r   funcnamefunc_mr   rj  r   s         r   extract_function_codez#JSInterpreter.extract_function_coder  s    " &,RYYx-@$AB II	 >..#?z!KLL))&,,v*>?a#)<<#7#=#=c#BCa	CTIICs   B1c                 d    t         | j                  g | j                  |      | d| d      S )Nr   ry   )r   extract_function_from_coder  )r   r  r  s      r   r  zJSInterpreter.extract_function  s?    !+D++aT-G-G-QaT`a
! 	r    c           
         i }	 t        j                  d|      }|n|j                         \  }}| j                  ||dz
  d        \  }}	| j	                  | | j
                  |j                  d      j                  d      D 
cg c]  }
|
j                          c}
||g|       }|d | |z   |	z   } | j                  |||g| S c c}
w )Nzfunction\((?P<args>[^)]*)\)\s*{r   r   r  )
r$  r  r  r  r   r  rv  rQ  r   r  )r   r  r   r  r   mobjr   
body_startr  r  r   r   s               r   r  z(JSInterpreter.extract_function_from_code  s    
99?FD| $		E:"55d:>?6KLOD)%%j2Q$2Q2Q$(JJv$6$<$<S$ABqBj31#/31 2D <$&2D  #t""8T:MMM Cs   C
c                 0     | j                  |      |      S r4   )r  )r   r  r   s      r   call_functionzJSInterpreter.call_function  s    .t$$X.t44r    c                 Z     t              xs i gt              i df fd	}|S )Nr   c                     d   j                  t        j                  | d              d   j                  |       t         }	j	                  j                  dd      ||dz
        \  }}|r|S y )Nr   )	fillvaluer   r   r   )update	itertoolszip_longestr   r   r}  )
r   r   r   	var_stackr   r  r  r   r  r   s
         r   resfz*JSInterpreter.build_function.<locals>.resf  sz    O""9#8#84SW#XYO""6*&5I $ 8 8dC9PR[]lop]p qC
 r    )r  tuple)r   r  r   r  r  s   ```` r   r  zJSInterpreter.build_function  s3    L)1bT? # 	 	 r    r4   )r  N)F)r   ) r   r   r   r   r$  IMSUr   r   r   r   r   r   r   r   r  r  r  r  r  r   r   r   r
  r\  r  r  r  r  r  r   r    r   r   r      s     TTTTTTTTI;3N 3 % % $ $L > >g&P6 Oh Ohb6J"
N5r    r   r   )rD   );rT   r   r  r  r   operatorr$  utilsr   r   r   r   r   r	   r
   r   r!   r)   r-   r/   r1   r5   r:   r@   r   r   rj   or_xorand_is_is_noteqnelegeltgtrshiftlshiftaddsubmulr  r  r&  r   zipr   r   r~  r   r   r   r   ChainMapr   r   r   r   r    r   <module>r     s`         		 	 	/	3FU 3F3 3Fn$ 	$ 	$	 HLL	! HLL	! HMM	" 
8<< 
8?? 	)HKK
  	)HKK
  	+hkk
"  	+hkk
"!" X[[	!#$ X[[	!%( 	*X__
%)* 	*X__
%+. 
hll	#	hll	#	hll	#		
;
@ CStT234 
< 	 	7~ 7
:. :
A~ A	?[)) 	?# #:e
 e
r    