AnonSec Shell
Server IP : 209.38.156.173  /  Your IP : 216.73.216.122   [ Reverse IP ]
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux lakekumayuhotel 5.15.0-136-generic #147-Ubuntu SMP Sat Mar 15 15:53:30 UTC 2025 x86_64
User : root ( 0)
PHP Version : 8.1.2-1ubuntu2.22
Disable Function : NONE
Domains : 2 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /snap/core20/2582/usr/lib/python3/dist-packages/jinja2/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /snap/core20/2582/usr/lib/python3/dist-packages/jinja2/__pycache__/compiler.cpython-38.pyc
U

��g��	@s�dZddlmZddlmZddlmZddlm	Z	ddl
mZddlm
Z
ddlmZdd	lmZdd
lmZddlmZmZmZddlmZmZmZmZmZmZmZdd
l m!Z!m"Z"m#Z#m$Z$m%Z%ddddddddd�Z&e'e(d�r�dZ)ndZ)dgZ*ze+d�e*�,d�Wne-k
�r YnXze+d�Wne-k
�rHdZ.YnXdZ.dd �Z/d6d"d#�Z0d$d%�Z1d&d'�Z2Gd(d)�d)e3�Z4Gd*d+�d+e3�Z5Gd,d-�d-e6�Z7Gd.d/�d/e�Z8Gd0d1�d1e�Z9Gd2d3�d3e:�Z;Gd4d5�d5e�Z<d!S)7z�
    jinja2.compiler
    ~~~~~~~~~~~~~~~

    Compiles nodes into python code.

    :copyright: (c) 2017 by the Jinja Team.
    :license: BSD, see LICENSE for more details.
�)�chain)�deepcopy)�	iskeyword��update_wrapper)�nodes)�EvalContext)�NodeVisitor)�	Optimizer)�TemplateAssertionError)�Markup�concat�escape)�
range_type�	text_type�string_types�	iteritems�NativeStringIO�imap�izip)�Symbols�VAR_LOAD_PARAMETER�VAR_LOAD_RESOLVE�VAR_LOAD_ALIAS�VAR_LOAD_UNDEFINEDz==z!=�>z>=�<z<=�inznot in)�eq�ne�gtZgteq�ltZlteqrZnotinr�itemsZdivisionz%from __future__ import generator_stopZgenerator_stopzdef f(): yield from x()FTcs�fdd�}t|��S)NcsB|jr2|jjs2|j�||j�}||kr2|�||�S�|||f|�S�N)�	optimized�eval_ctx�volatile�	optimizer�visit)�self�node�frame�kwargsZnew_node��f��1/usr/lib/python3/dist-packages/jinja2/compiler.py�new_func@s
zoptimizeconst.<locals>.new_funcr)r.r1r/r-r0�
optimizeconst?sr2NcCsHt|tj�std��|�||||||�}|�|�|dkrD|j��SdS)z+Generate the python source for a node tree.z Can't compile non template nodesN)�
isinstancerZTemplate�	TypeErrorZcode_generator_classr(�stream�getvalue)r*�environment�name�filenamer5�
defer_initr$�	generatorr/r/r0�generateJs
�
r<cCs�|dks|tks|tkrdSt|�ttttttft	kr<dSt|�t
ttt
fkrl|D]}t|�sTdSqTdSt|�tkr�t|�D]$\}}t|�s�dSt|�s�dSq�dSdS)z)Does the node have a safe representation?NTF)�NotImplemented�Ellipsis�type�bool�int�float�complexrrr�tuple�list�set�	frozenset�
has_safe_repr�dictr)�value�item�keyr/r/r0rHWs"rHcCs<t|�}z|D]}|�|�qWntk
r4YnX|jS)z�Check if the names passed are accessed undeclared.  The return value
    is a set of all the undeclared names from the sequence of names found.
    )�UndeclaredNameVisitorr(�VisitorExit�
undeclared)r�names�visitorr*r/r/r0�find_undeclaredlsrRc@seZdZdd�ZdS)�MacroRefcCs||_d|_d|_d|_dS)NF)r*�accesses_caller�accesses_kwargs�accesses_varargs�r)r*r/r/r0�__init__{szMacroRef.__init__N)�__name__�
__module__�__qualname__rXr/r/r/r0rSysrSc@s8eZdZdZddd�Zdd�Zd
dd	�Zd
d�ZeZdS)�Framez&Holds compile time information for us.NcCsf||_t|r|jpd|d�|_d|_d|_|o2|j|_d|_|rF|jpHd|_||_|dk	rb|j|_dS)N��levelF)	r%r�symbols�toplevel�	rootlevel�require_output_check�buffer�block�parent)r)r%rer^r/r/r0rX�s�zFrame.__init__cCs*t�|j�}|j�|j�|j��|_|S)z!Create a copy of the current one.)�object�__new__�	__class__�__dict__�updater_�copy�r)�rvr/r/r0rk�sz
Frame.copyFcCs&|rt|j|jjdd�St|j|�S)zReturn an inner frame.�r])r\r%r_r^)r)�isolatedr/r/r0�inner�szFrame.innercCs|��}d|_|S)aReturn a soft frame.  A soft frame may not be modified as
        standalone thing as it shares the resources with the frame it
        was created of, but it's not a rootlevel frame any longer.

        This is only used to implement if-statements.
        F)rkrarlr/r/r0�soft�sz
Frame.soft)NN)F)	rYrZr[�__doc__rXrkrprq�__copy__r/r/r/r0r\�s
 
r\c@seZdZdZdS)rNz?Exception used by the `UndeclaredNameVisitor` to signal a stop.N�rYrZr[rrr/r/r/r0rN�srNc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�DependencyFinderVisitorz.A visitor that collects filter and test calls.cCst�|_t�|_dSr#)rF�filters�tests�r)r/r/r0rX�sz DependencyFinderVisitor.__init__cCs|�|�|j�|j�dSr#)�
generic_visitrv�addr8rWr/r/r0�visit_Filter�s
z$DependencyFinderVisitor.visit_FiltercCs|�|�|j�|j�dSr#)ryrwrzr8rWr/r/r0�
visit_Test�s
z"DependencyFinderVisitor.visit_TestcCsdS)zStop visiting at blocks.Nr/rWr/r/r0�visit_Block�sz#DependencyFinderVisitor.visit_BlockN)rYrZr[rrrXr{r|r}r/r/r/r0ru�s
ruc@s(eZdZdZdd�Zdd�Zdd�ZdS)	rMz�A visitor that checks if a name is accessed without being
    declared.  This is different from the frame visitor as it will
    not stop at closure frames.
    cCst|�|_t�|_dSr#)rFrPrO)r)rPr/r/r0rX�s
zUndeclaredNameVisitor.__init__cCsJ|jdkr8|j|jkr8|j�|j�|j|jkrFt��n|j�|j�dS)N�load)�ctxr8rPrOrzrN�discardrWr/r/r0�
visit_Name�s
z UndeclaredNameVisitor.visit_NamecCsdS)zStop visiting a blocks.Nr/rWr/r/r0r}�sz!UndeclaredNameVisitor.visit_BlockN)rYrZr[rrrXr�r}r/r/r/r0rM�srMc@seZdZdZdS)�CompilerExitz�Raised if the compiler encountered a situation where it just
    doesn't make sense to further process the code.  Any block that
    raises such an exception is not further processed.
    Nrtr/r/r/r0r��sr�c@sVeZdZd�dd�Zdd�Zdd	�Zd
d�Zd�dd
�Zdd�Zd�dd�Z	d�dd�Z
dd�Zd�dd�Zdd�Z
dd�Zd�dd�Zd�d d!�Zd�d"d#�Zd$d%�Zd&d'�Zd�d(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�Zd@dA�Z dBdC�Z!dDdE�Z"dFdG�Z#dHdI�Z$dJdK�Z%d�dLdM�Z&dNdO�Z'dPdQ�Z(dRdS�Z)dTdU�Z*dVdW�Z+dXdY�Z,dZd[�Z-d\d]�Z.d^d_�Z/d`da�Z0dbdc�Z1ddde�Z2dfdg�Z3dhdi�Z4djdk�Z5dldm�Z6dndo�Z7dpdq�Z8drds�Z9dtdu�Z:dvdw�Z;dxdy�Z<d�dzd{�Z=d�d|d}�Z>e=d~�Z?e=d�Z@e=d��ZAe=d��ZBe=d��ZCe=d��ZDe=d��ZEe=d�dd��ZFe=d�dd��ZGe>d~�ZHe>d�ZIe>d�dd��ZJ[=[>eKd�d���ZLeKd�d���ZMd�d��ZNeKd�d���ZOeKd�d���ZPd�d��ZQeKd�d���ZReKd�d���ZSeKd�d���ZTeKd�d�d���ZUd�d��ZVd�d��ZWd�d��ZXd�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�d��ZcdS)��
CodeGeneratorNFTcCs�|dkrt�}||_||_||_||_d|_||_||_|rFt|�|_	i|_
i|_d|_d|_
d|_i|_i|_g|_d|_d|_d|_d|_d|_d|_g|_g|_dg|_dS)NFrrnT�context)rr7r8r9r5Zcreated_block_contextr:r$r
r'�import_aliases�blocks�extends_so_far�has_known_extends�code_linenorwrv�
debug_info�_write_debug_info�
_new_lines�
_last_line�_first_write�_last_identifier�_indentation�
_assign_stack�_param_def_block�_context_reference_stack)r)r7r8r9r5r:r$r/r/r0rX�s8
zCodeGenerator.__init__cCst|||j|j��dS)z*Fail with a :exc:`TemplateAssertionError`.N)rr8r9)r)�msg�linenor/r/r0�fail9szCodeGenerator.failcCs|jd7_d|jS)zGet a new unique identifier.rnzt_%d)r�rxr/r/r0�temporary_identifier=sz"CodeGenerator.temporary_identifiercCs|��|_|�d|j�dS)z7Enable buffering for the frame from that point onwards.z%s = []N)r�rc�	writeline�r)r+r/r/r0rcBs
zCodeGenerator.buffercCs�|s�|jjrd|�d�|��|�d|j�|��|�d�|��|�d|j�|��dS|jjr�|�d|j�dS|�d|j�dS)z(Return the buffer contents of the frame.zif context.eval_ctx.autoescape:zreturn Markup(concat(%s))�else:zreturn concat(%s)N)r%r&r��indentrc�outdent�
autoescape)r)r+�force_unescapedr/r/r0�return_buffer_contentsGs

z$CodeGenerator.return_buffer_contentscCs|jd7_dS)zIndent by one.rnN�r�rxr/r/r0r�YszCodeGenerator.indentrncCs|j|8_dS)zOutdent by step.Nr�)r)�stepr/r/r0r�]szCodeGenerator.outdentcCs.|jdkr|�d|�n|�d|j|�dS)z%Yield or write into the frame buffer.N�yield �
%s.append()rcr�)r)r+r*r/r/r0�start_writeas
zCodeGenerator.start_writecCs|jdk	r|�d�dS)z1End the writing process started by `start_write`.N�))rc�writer�r/r/r0�	end_writehs
zCodeGenerator.end_writecCs$|�||�|�|�|�|�dS)z4Simple shortcut for start_write + write + end_write.N)r�r�r�)r)�sr+r*r/r/r0�simple_writems
zCodeGenerator.simple_writecCs>z$|�d�|D]}|�||�qWntk
r8YnXdS)z�Visit a list of nodes as block in a frame.  If the current frame
        is no buffer a dummy ``if 0: yield None`` is written automatically.
        �passN)r�r(r�)r)rr+r*r/r/r0�
blockvisitss
zCodeGenerator.blockvisitcCs�|jrp|jsR|j�d|j�|j|j7_|jdk	rR|j�|j|jf�d|_d|_|j�d|j�d|_|j�|�dS)z&Write a string into the output stream.�
NFz    r)	r�r�r5r�r�r�r��appendr�)r)�xr/r/r0r�~s

�zCodeGenerator.writercCs|�||�|�|�dS)z!Combination of newline and write.N)�newliner�)r)r�r*�extrar/r/r0r��szCodeGenerator.writelinecCs:t|jd|�|_|dk	r6|j|jkr6|j|_|j|_dS)z/Add one or more newlines before the next write.rnN)�maxr�r�r�r�)r)r*r�r/r/r0r��szCodeGenerator.newlinec	Cs�d}tdd�|jD�|pd�D]}t|�rd}q4q|jD]}|�d�|�||�q:|s�|jD]}|�d�|�||�q`|dk	r�t|�D]\}}|�d||f�q�|jr�|�d	�|�|j|�|�r�|jdk	r�|�d
�n
|�d�|jD],}|�d|j	�|�|j
|�|�d�q�|dk	�rPt|�D]\}}|�d
||f��q2|jdk	�r�|�d�|�|j|�|�d�n
|�d�n$|jdk	�r�|�d�|�|j|�dS)a,Writes a function call to the stream for the current node.
        A leading comma is added automatically.  The extra keyword
        arguments may not include python keywords otherwise a syntax
        error could occour.  The extra keyword arguments should be given
        as python dict.
        Fcss|]}|jVqdSr#)rL��.0r�r/r/r0�	<genexpr>�sz*CodeGenerator.signature.<locals>.<genexpr>r/T�, Nz, %s=%sz, *z
, **dict({z, **{z%r: z%r: %s, z}, **r��}z, **)rr,�is_python_keyword�argsr�r(rZdyn_argsZ
dyn_kwargsrLrJ)	r)r*r+�extra_kwargsZkwarg_workaroundZkwarg�argrLrJr/r/r0�	signature�sJ	










zCodeGenerator.signaturecCsnt�}|D]}|�|�q
dD]J}t||�}t||�D]0}||krN|��||<|�d||||f�q6qdS)zPull all the dependencies.)rvrwz%s = environment.%s[%r]N)rur(�getattrr�r�)r)rrQr*Z
dependency�mappingr8r/r/r0�pull_dependencies�s
�zCodeGenerator.pull_dependenciescCs�g}t|jj�D]p\}\}}|tkr&q|tkrH|�d||��|f�q|tkrd|�d||f�q|tkrx|�	|�qt
d��q|r�|�dd�|��dS)Nz%s = %s(%r)�%s = %szunknown load instruction�%s = missing� = )rr_�loadsrrr��get_resolve_funcrrr��NotImplementedError�join)r)r+�undefs�target�actionZparamr/r/r0�enter_frame�s�
zCodeGenerator.enter_framecCsD|s@g}t|jj�D]\}}|�|�q|r@|�dd�|��dS)Nr�r�)rr_r�r�r�r�)r)r+�with_python_scoper�r��_r/r/r0�leave_frame�szCodeGenerator.leave_framecCs|jjrd|Sd|S)Nzasync def %szdef %s)r7�is_async)r)r8r/r/r0�func�szCodeGenerator.funcc
Cs�|��}|j�|�t|�}d}t�}g}t|j�D]@\}}|jdkrJ|}|jdkr`|�|j�|�	|j�
|j��q4t|jd�}	d|	kr�|dk	r�z|j
|t|j�Wq�tk
r�|�d|j�Yq�Xn|�	|j�d��d|_d|	k�rd|k�r|�	|j�d��d|_d|	k�r@d|k�r@|�	|j�d��d|_d	|_|j�|�|�d
|�d�d�|�f|�|��|�|�|�|�|�|�t|j�D]�\}}|j�
|j�}
|�d
|
�|��z|j
|t|j�}Wn2tk
�r|�d|
d|j|jf�YnX|�d|
�|�||�|�|
�|� ��q�|�!�|�"|j|�|j#|dd�|j$|dd�|� �||fS)z/Dump the function def of a macro or call block.N�caller)r,�varargs)r�r,r�zhWhen defining macros or call blocks the special "caller" argument must be omitted or be given a default.Tr,r�Fz%s(%s):Zmacror��if %s is missing:z%s = undefined(%r, name=%r)zparameter %r was not provided�%s = )r��r�)%rpr_�analyze_noderSrF�	enumerater�r8rzr��refrR�body�defaults�len�
IndexErrorr�r��declare_parameterrTrUrVrbr�r�r�r�rcr��push_parameter_definitionsr(�mark_parameter_storedr��pop_parameter_definitionsr�r�r�)r)r*r+�	macro_refZexplicit_callerZskip_special_paramsr��idxr�rOr��defaultr/r/r0�
macro_body�st

� 


�
zCodeGenerator.macro_bodycCs`d�dd�|jjD��}t|jdd�}t|jj�dkr>|d7}|�d|||j|j|jf�dS)	z<Dump the macro definition for the def created by macro_body.r�css|]}t|j�VqdSr#)�reprr8r�r/r/r0r�Hsz*CodeGenerator.macro_def.<locals>.<genexpr>r8Nrn�,zLMacro(environment, macro, %r, (%s), %r, %r, %r, context.eval_ctx.autoescape))	r�r*r�r�r�r�rUrVrT)r)r�r+Z	arg_tupler8r/r/r0�	macro_defFs��zCodeGenerator.macro_defcCs*d|j}|jdk	r&|dt|j�7}|S)z.Return a human readable position for the node.zline %dN� in )r�r8r�)r)r*rmr/r/r0�positionQs

zCodeGenerator.positioncCs"dd�dd�t|j���D��S)Nz{%s}r�css|]\}}d||fVqdS��%r: %sNr/)r�r8r�r/r/r0r�Ysz3CodeGenerator.dump_local_context.<locals>.<genexpr>)r�rr_Zdump_storesr�r/r/r0�dump_local_contextXs�z CodeGenerator.dump_local_contextcCs"|�d�|�d�|�d�dS)z�Writes a common preamble that is used by root and block functions.
        Primarily this sets up common local helpers and enforces a generator
        through a dead branch.
        z$resolve = context.resolve_or_missingz!undefined = environment.undefinedzif 0: yield NoneN�r�rxr/r/r0�
write_commons]s

zCodeGenerator.write_commonscCs|j�|j���dS)aQPushes all parameter targets from the given frame into a local
        stack that permits tracking of yet to be assigned parameters.  In
        particular this enables the optimization from `visit_Name` to skip
        undefined expressions for parameters in macros as macros can reference
        otherwise unbound parameters.
        N)r�r�r_Zdump_param_targetsr�r/r/r0r�fsz(CodeGenerator.push_parameter_definitionscCs|j��dS)z+Pops the current parameter definitions set.N)r��poprxr/r/r0r�osz'CodeGenerator.pop_parameter_definitionscCs|jr|jd�|�dS)z�Marks a parameter in the current parameter definitions as stored.
        This will skip the enforced undefined checks.
        ���N)r�r��r)r�r/r/r0r�ssz#CodeGenerator.mark_parameter_storedcCs|j�|�dSr#)r�r�r�r/r/r0�push_context_referencezsz$CodeGenerator.push_context_referencecCs|j��dSr#)r�r�rxr/r/r0�pop_context_reference}sz#CodeGenerator.pop_context_referencecCs
|jdS)Nr��r�rxr/r/r0�get_context_ref�szCodeGenerator.get_context_refcCs|jd}|dkrdSd|S)Nr�r�Zresolvez
%s.resolver�r�r/r/r0r��s
zCodeGenerator.get_resolve_funccCsd|��|�|�fS)Nz%s.derived(%s))r�r�r�r/r/r0�derive_context�s�zCodeGenerator.derive_contextcCs|js
dS||jdkS)z4Checks if a given target is an undeclared parameter.Fr�)r�r�r/r/r0�parameter_is_undeclared�sz%CodeGenerator.parameter_is_undeclaredcCs|j�t��dS)z+Pushes a new layer for assignment tracking.N)r�r�rFrxr/r/r0�push_assign_tracking�sz"CodeGenerator.push_assign_trackingcCs�|j��}|jr|sdSdd�|D�}t|�dkr^tt|��}|j�|�}|�d||f�nR|�d�t	|�D]4\}}|r�|�
d�|j�|�}|�
d||f�qp|�
d	�|r�t|�dkr�|�d
|d�n|�dd�tt
|���dS)
zoPops the topmost level for assignment tracking and updates the
        context variables if necessary.
        NcSs g|]}|dd�dkr|�qS)Nrnr�r/r�r/r/r0�
<listcomp>�sz5CodeGenerator.pop_assign_tracking.<locals>.<listcomp>rn�context.vars[%r] = %szcontext.vars.update({r�r�z})�context.exported_vars.add(%r)rz"context.exported_vars.update((%s)))r�r�r`r��next�iterr_r�r�r�r�r�rr�)r)r+�varsZpublic_namesr8r�r�r/r/r0�pop_assign_tracking�s.




��z!CodeGenerator.pop_assign_trackingcCs�|dkstd��t|j|j�}ddlm}|�dd�t��|�dd�|��|jj	rd|�d�|j
rpdprd	}|�tj
�dk	}|�tj�D]0}|j|jkr�|�d
|j|j�||j|j<q�|�tj�D]j}|j|jkr�|j}	|��|j|	<}
d|	k�r&|	�dd�\}}|�d
|||
f�q�|�d|	|
f�q�|�d|j�|jd|�d�|fdd�|��|��t|�}dt|jd�k�r�|j�d�}
|�d|
�|j� |�d|_!|_"|�o�|j#|_$|�r�|�d�|�%|�|�&|j�|�'|j|�|j(|dd�|�)�|�r�|j#�s<|��|�d�|��t*�r`|jj	�s`|�d�n8|�d|jj	�rvd�pxd	�|��|�d�|�)�|�)d|j#�t+|j�D]�\}}|�d|�d|�|f|d�|��|��t|�}t|jd�}d|k�r$|j�d�}
|�d|
�d |k�rN|j�d �}
|�d!|
||f�|j� |�||_,|�%|�|�&|j�|�'|j|�|j(|dd�|�)��q�|jd"d�d#d$�|jD��dd�|�d%d&�d'd$�|j-D���dS)(Nzno root frame allowedr)�__all__zfrom __future__ import %sr�zfrom jinja2.runtime import zOfrom jinja2.asyncsupport import auto_await, auto_aiter, make_async_loop_contextz, environment=environment�zblock %r defined twice�.rnzfrom %s import %s as %szimport %s as %sz	name = %rz%s(context, missing=missing%s):�root)r�r)rxz%s = TemplateReference(context)Tzparent_template = Noner��if parent_template is not None:z4yield from parent_template.root_render_func(context)z9%sfor event in parent_template.root_render_func(context):zasync zyield eventZblock_)r)�superrz %s = context.super(%r, block_%s)z
blocks = {%s}css|]}d||fVqdS)z%r: block_%sNr/r�r/r/r0r�#s�z/CodeGenerator.visit_Template.<locals>.<genexpr>zdebug_info = %r�&css|]}d|VqdS)z%s=%sNr/r�r/r/r0r�(s).�AssertionErrorrr7r8Zjinja2.runtimer�r�r��
code_featuresr�r:�findrZExtends�find_allZBlockr�r�r�ZImportedName�
importnamer�r��rsplitr�r�r�r\rRr�r_r�r�r`rar�rbr�r�r�r�r��supports_yield_fromrrdr�)r)r*r+r%ZexportedZenvenvZhave_extendsrd�import_�imp�alias�module�objr�r8�block_framerOr/r/r0�visit_Template�s�

���


�
��

�
���zCodeGenerator.visit_TemplatecCs�d}|jr8|jrdS|jdkr8|�d�|��|d7}|jrJ|�|�}n|��}tr�|j	j
s�|jdkr�|�d|j|f|�nD|j	j
r�dp�d}|�d||j|f|�|��|�
d	|�|��|�|�dS)
z.Call a block and register it for the template.rN�if parent_template is None:rnz$yield from context.blocks[%r][0](%s)�	async for�forz&%s event in context.blocks[%r][0](%s):�event)r`r�r�r�r�Zscopedr�r�rr7r�rcr8r�r�)r)r*r+r^r��loopr/r/r0r}+s@

�����zCodeGenerator.visit_BlockcCs�|js|�d|j�|jdkrZ|js6|�d�|��|�dd�|jrRt��n|��|�d|�|�	|j
|�|�d|j�|�dt
�|��|�d	�|��|jr�d
|_|jd7_dS)
zCalls the extender.z,cannot use extend from a non top-level scoperr�raise TemplateRuntimeError(%r)zextended multiple timesz+parent_template = environment.get_template(�, %r)z6for name, parent_block in parent_template.blocks.%s():z8context.blocks.setdefault(name, []).append(parent_block)TrnN)r`r�r�r�r�r�r�r�r�r(�templater�r8�dict_item_iterra�r)r*r+r/r/r0�
visit_ExtendsKs4�

��
zCodeGenerator.visit_ExtendscCs�|jr|�d�|��d}t|jtj�rVt|jjt�r>d}qnt|jjt	t
f�rnd}nt|jtjtjf�rnd}|�d||�|�
|j|�|�d|j�|jr�|��|�d�|��|�d�|��|�d	�|��d
}|j�r|jjr�dp�d}|�d
||�|�f�n6|jj�r,|�d�n t�rB|�d�d}n
|�d�|�sn|��|�d|�|��|j�r~|��dS)zHandles includes.ztry:Zget_or_select_templateZget_templateZselect_templateztemplate = environment.%s(rzexcept TemplateNotFound:r�r�FrrzY%s event in template.root_render_func(template.new_context(context.get_all(), True, %s)):zGfor event in (await template._get_default_module_async())._body_stream:z6yield from template._get_default_module()._body_streamTz9for event in template._get_default_module()._body_stream:rN)Zignore_missingr�r�r3rrZConstrJrrDrEZTupleZListr(r�r8r��with_contextr7r�r�rr�)r)r*r+�	func_nameZskip_event_yieldrr/r/r0�
visit_IncludezsP



�


zCodeGenerator.visit_IncludecCs�|�d|j�|j�|�|jr0|�d|j�|jjrB|�d�|�d�|�|j	|�|�d|j
�|jr�|�d|jjr�dp�d|�|�f�n|jjr�|�d	�n
|�d
�|jr�|j�
d�s�|�d|j�d
S)zVisit regular imports.r��context.vars[%r] = �await zenvironment.get_template(�, %r).�*make_module%s(context.get_all(), True, %s)�_asyncr��_get_default_module_async()�_get_default_module()r��!context.exported_vars.discard(%r)N)r�r_r�r�r`r�r7r�r(rr8rr��
startswithrr/r/r0�visit_Import�s&

��
zCodeGenerator.visit_Importc	s�|�|�|�d|jjrdpd�|�|j��|�d|j�|jrn|�d|jjrZdp\d|���f�n|jjr�|�d�n
|�d�g}g}|j	D]�}t
|t�r�|\}}n|}|�d	�j
�|�|f�|�d
�j
�|��|��|�|��dd��d
d�}|�d�j
�|�d|t|�f|f�|���jr�|�|�|�d�s�|�|�q�|�r�t|�dk�r�|d}|�d|�j
�|�f�n"|�dd��fdd�|D���|�r�t|�dk�r�|�d|d�n|�dd�tt|���dS)zVisit named imports.z/included_template = %senvironment.get_template(r"r�r#r$r%r&r'z,%s = getattr(included_template, %r, missing)r��{z{{r�z}}z9%s = undefined(%r %% included_template.__name__, name=%r)zGthe template %%r (imported on %s) does not export the requested name %sr�rnrr�zcontext.vars.update({%s})r�c3s"|]}d|�j�|�fVqdSr�)r_r�)r�r8�r+r/r0r��sz1CodeGenerator.visit_FromImport.<locals>.<genexpr>r(z-context.exported_vars.difference_update((%s))N)r�r�r7r�r(rr8rr�rPr3rDr�r_r�r�r��replacer�r�r`r�r)r�r�r)r)r*r+Z	var_namesZdiscarded_namesr8rr�r/r,r0�visit_FromImport�sv
���



�
����	

����zCodeGenerator.visit_FromImportcCsN|��}|��}|��}|jp2dt|jdd�d�k}d}|rH|j�d�}|jj|dd�|jrn|jj|dd�|j�rl|�	�}|jj|dd�|�
d	|�|�|j�|��|�
|�|�
|jjr�d
p�d�|�|j|�|�d�|�|jjr�d
p�d�|�d�|��|�
d|j�|�|j|�|�d�|��|�
d�|�|j|�|�d�|j|dd�|j�r�|�
d|�d�|�|��|�|�|j|_|�r�|�
d|�|�tj�D],}	|	jdk�r�|	jdk�r�|�d|	j��q�|j�r|�	�}
|�
d|
�|�
|jj�r$d
�p&d|�|�|j|�|�rj|jj�rZ|�d|�n|�d|�n
|�d�|j�r�|�d|�|j�r�|�d�nB|jj�r�|�s�|�d�|�|j|�|jj�r�|�s�|�d�|j�r�|�d�|j�r|�d �n|�|�rd!�pd�|��|�
|�|�|j|�|j�rR|�
d"|
�|��|j||j�on|jd�|j�r�|�
d#|
�|��|�
|�|�|j|�|�|�|��|j�rJ|� |�|��|�!||�|jj�r�|�d$�|�d%�|jj�r|�d�|�|j|�|jj�r6|�d�|�d&�|�"|�dS)'Nr)r�)Zonly)rr�)Z
for_branch�else�testz
%s(fiter):z
async for zfor r�zauto_aiter(fiter)Zfiter�:�if r��Tr�z'%s(reciter, loop_render_func, depth=0):r��storez8Can't assign to special loop variable in for-loop targetz%s = 1z&, %s in await make_async_loop_context(z, %s in LoopContext(z%s(Zreciterzauto_aiter(r�z&, undefined, loop_render_func, depth):z
, undefined):z%s = 0zif %s:r"zloop(z, loop))#rp�	recursiverRZiter_child_nodesr_r�r��else_r0r�r�r�r�r�r7r�r(r�r�r�r�rcrr�Namerr8r�r�r�r�r�r�r�r�)r)r*r+Z
loop_frameZ
test_frameZ
else_frameZ
extended_loopZloop_refZloop_filter_funcr8Ziteration_indicatorr/r/r0�	visit_Fors����





��
�





�










zCodeGenerator.visit_ForcCs�|��}|�d|�|�|j|�|�d�|��|�|j|�|��|j	D]F}|�d|�|�|j|�|�d�|��|�|j|�|��qP|j
r�|�d�|��|�|j
|�|��dS)Nr2r1zelif r�)rqr�r(r0r�r�r�r�r��elif_r6)r)r*r+Zif_framer9r/r/r0�visit_If�s&




zCodeGenerator.visit_IfcCs�|�||�\}}|��|jrX|j�d�s:|�d|j�|j�|j�}|�d|j�|�d|j�|j��|�	||�dS)Nr�r�r!r�)
r�r�r`r8r)r�r_r�r�r�)r)r*r+Zmacro_framer�r�r/r/r0�visit_Macro�szCodeGenerator.visit_MacrocCsR|�||�\}}|�d�|�||�|�||�|j|j|dd�|�|�dS)Nz	caller = T)�forward_caller)r�r�r�r��
visit_CallZcallr�)r)r*r+Z
call_framer�r/r/r0�visit_CallBlock�s
zCodeGenerator.visit_CallBlockcCsh|��}|j�|�|�|�|�|�|�|j|�|�||�|�|j	|�|�
|�|�|�dSr#)rpr_r�r�rcr�r�r�r{�filterr�r�)r)r*r+Zfilter_framer/r/r0�visit_FilterBlock�s


zCodeGenerator.visit_FilterBlockcCs�|��}|j�|�|�|�tt|j|j��D]6\}\}}|��|�	||�|�
d�|�	||�q0|�|j|�|�
|�dS�Nr�)rpr_r�r�r�rZtargets�valuesr�r(r�r�r�r�)r)r*r+Z
with_framer�r��exprr/r/r0�
visit_With�s

zCodeGenerator.visit_WithcCs|�|�|�|j|�dSr#)r�r(r*rr/r/r0�visit_ExprStmt�s
zCodeGenerator.visit_ExprStmtc	s��jr|jrdSd}�jjrj�jj}t|dd�s<t|dd�rBd}qnt|dd�r\�fdd�}qn�fdd�}nt}d}|jr���d	����d}g}|jD]�}z|s�t�	��|�
|j�}	Wn$tj	k
r�|�|�Yq�YnXz2|jj
�rt|	d
�r�|	��}	nt|	�}	||	�}	Wn$tk
�r4|�|�Yq�YnX|�r\t|dt��r\|d�|	�q�|�|	g�q�t|�dk�s�|jdk	�r|jdk	�r�t|�d
k�r���d|j�n��d|j����|D�]}
t|
t��rtt|
��}|jdk�r��d|�n��|d�n�|jdk�r0��d|
�n
��|
�d
}|jj�rT��d�n |jj
�rj��d�n
��d��jjdk	�r���d�t�jjdd��r���d�|d
7}��|
|���d|�|jdk	�r̈�d��q�|jdk	�r������t|�d
k�rd�pd��npg}
g}|D]>}
t|
t��rN|
�t|
��dd��n|
�d�|�|
��q&��d���tt|
��d����|D]�}��|�d}|jj�rˆ�d�|d
7}n|jj
�rވ�d�|d
7}�jjdk	�rV��d�t�jjdd��r��d�n:t�jjdd��r2��d�nt�jjdd��rN��d�|d
7}��||���d|d ��q������d�|�r����dS)!NTZcontextfunctionFZevalcontextfunctionZenvironmentfunctioncst�j��j|��Sr#�rr7�finalize�r�rxr/r0�<lambda>�s�z,CodeGenerator.visit_Output.<locals>.<lambda>cst�j�|��Sr#rFrHrxr/r0rI��r�__html__r�r3rnr�z%s.extend((r�r�z7(escape if context.eval_ctx.autoescape else to_string)(zescape(z
to_string(zenvironment.finalize(�	context, r��))�%z%%z%sz % (r�context.eval_ctx, �
environment, r�)r�rbr7rGr�rr�r�r�
Impossible�as_constr%r�r��hasattrrKr�	Exceptionr3rEr�rcr�r
r�r&r�r(r�r-)r)r*r+Zallow_constant_finalizer�rGZ
outdent_laterr��childZconstrK�val�close�formatZ	argumentsZargumentr/rxr0�visit_Output�s�
�














�
"








���

zCodeGenerator.visit_OutputcCsF|��|�|�|�|j|�|�d�|�|j|�|�|�dSrA)r�r�r(r�r�r*r�rr/r/r0�visit_Assign[s

zCodeGenerator.visit_AssigncCs�|��|��}d|_|j�|�|�|�|�|�|�|j|�|�	|�|�
|j|�|�d�|j
dk	r�|�|j
|�n|�d|j�|�d�|�|�|�|�dS)NFz9 = (Markup if context.eval_ctx.autoescape else identity)(�
concat(%s)r�)r�rprbr_r�r�rcr�r�r�r(r�r�r?r{r�r�)r)r*r+rr/r/r0�visit_AssignBlockcs 






zCodeGenerator.visit_AssignBlockcCs�|jdkr(|jr(|jr(|jd�|j�|j�|j�}|jdkr�|j�|�}|dk	rj|dtkrj|�	|�r�|�
d|j||f�dS|�
|�dS)Nr4r�r~rz-(undefined(name=%r) if %s is missing else %s))rr`r�rzr8r_r�Z	find_loadrr�r�)r)r*r+r�r~r/r/r0r�|s
�
�zCodeGenerator.visit_NamecCsR|j�|j�}|�d|�|��|�dd�|��|�d||jf�dS)Nz!if not isinstance(%s, Namespace):rz/cannot assign attribute on non-namespace objectz%s[%r])r_r�r8r�r�r��attr)r)r*r+r�r/r/r0�visit_NSRef�s�zCodeGenerator.visit_NSRefcCs8|�|j�}t|t�r&|�t|��n|�t|��dSr#)rRr%r3rBr��strr�)r)r*r+rVr/r/r0�visit_Const�s
zCodeGenerator.visit_ConstcCsFz|�t|�|j���Wn&tjk
r@|�d|j�YnXdS)Nz9(Markup if context.eval_ctx.autoescape else identity)(%r))r�r�rRr%rrQ�datarr/r/r0�visit_TemplateData�s�z CodeGenerator.visit_TemplateDatacCsV|�d�d}t|j�D]"\}}|r.|�d�|�||�q|�|dkrLdpNd�dS)N�(r�r�rz,)r��r�r�r"r(�r)r*r+r�rKr/r/r0�visit_Tuple�s

zCodeGenerator.visit_TuplecCsF|�d�t|j�D]"\}}|r*|�d�|�||�q|�d�dS)N�[r��]rdrer/r/r0�
visit_List�s

zCodeGenerator.visit_ListcCs`|�d�t|j�D]<\}}|r*|�d�|�|j|�|�d�|�|j|�q|�d�dS)Nr+r�z: r�)r�r�r"r(rLrJrer/r/r0�
visit_Dict�s


zCodeGenerator.visit_Dictcst�fdd��}|S)Ncs�|jjrJ�|jjkrJ|�d��|�|j|�|�d�|�|j|�n4|�d�|�|j|�|�d��|�|j|�|�d�dS)Nz$environment.call_binop(context, %r, r�rc� %s r�)r7�	sandboxedZintercepted_binopsr�r(�left�rightr��operatorr/r0rQ�s
�

z$CodeGenerator.binop.<locals>.visitor�r2�rp�
interceptablerQr/ror0�binop�s
zCodeGenerator.binopcst�fdd��}|S)Ncs\|jjr2�|jjkr2|�d��|�|j|�n|�d��|�|j|�|�d�dS)Nz#environment.call_unop(context, %r, rcr�)r7rlZintercepted_unopsr�r(r*rror/r0rQ�s
�z#CodeGenerator.uaop.<locals>.visitorrqrrr/ror0�uaop�s	zCodeGenerator.uaop�+�-�*�/z//z**rN�and)rs�orznot cCs^|jjrd}n|jjrd}nd}|�d|�|jD]}|�||�|�d�q4|�d�dS)Nz;(context.eval_ctx.volatile and markup_join or unicode_join)Zmarkup_joinZunicode_joinz%s((r�rM)r%r&r�r�rr()r)r*r+rr�r/r/r0�visit_Concat�s
zCodeGenerator.visit_ConcatcCs*|�|j|�|jD]}|�||�qdSr#)r(rCZops)r)r*r+�opr/r/r0�
visit_Compare�s
zCodeGenerator.visit_ComparecCs&|�dt|j�|�|j|�dS)Nrk)r��	operatorsr}r(rCrr/r/r0�
visit_OperandszCodeGenerator.visit_OperandcCs,|�d�|�|j|�|�d|j�dS)Nzenvironment.getattr(r)r�r(r*r]rr/r/r0�
visit_Getattr	s
zCodeGenerator.visit_GetattrcCs~t|jtj�r@|�|j|�|�d�|�|j|�|�d�n:|�d�|�|j|�|�d�|�|j|�|�d�dS)Nrgrhzenvironment.getitem(r�r�)r3r�rZSlicer(r*r�rr/r/r0�
visit_Getitems


zCodeGenerator.visit_GetitemcCs`|jdk	r|�|j|�|�d�|jdk	r:|�|j|�|jdk	r\|�d�|�|j|�dS)Nr1)�startr(r��stopr�rr/r/r0�visit_Slices




zCodeGenerator.visit_SlicecCs,|jjr|�d�|�|j|jd�|jj�|j�}|dkrT|�d|j|j�t|dd�rl|�d�n.t|dd�r�|�d�nt|d	d�r�|�d
�|j	dk	r�|�
|j	|�nJ|jjr�|�d|j
|j
f�n*|jjr�|�d|j
�n|�d
|j
�|�||�|�d�|jj�r(|�d�dS)N�await auto_await(rczno filter named %rZ
contextfilterFrLZevalcontextfilterrOZenvironmentfilterrPzB(context.eval_ctx.autoescape and Markup(concat(%s)) or concat(%s))zMarkup(concat(%s))r[r�)r7r�r�rvr8�getr�r�r�r*r(r%r&rcr�r�)r)r*r+r�r/r/r0r{(s2



�

zCodeGenerator.visit_FiltercCs`|�|j|jd�|j|jjkr8|�d|j|j�|�|j|�|�||�|�d�dS)Nrczno test named %rr�)	r�rwr8r7r�r�r(r*r�rr/r/r0r|HszCodeGenerator.visit_Testcs^���fdd�}��d����j����d����j����d�|���d�dS)Ncs4�jdk	r���j��S��dd�����dS)Nz
undefined(%r)zRthe inline if-expression on %s evaluated to false and no else section was defined.)Zexpr2r(r�r�r/�r+r*r)r/r0�write_expr2Ss

�z1CodeGenerator.visit_CondExpr.<locals>.write_expr2rcz if z else r�)r�r(Zexpr1r0)r)r*r+r�r/r�r0�visit_CondExprQs


zCodeGenerator.visit_CondExprcCs||jjr|�d�|jjr&|�d�n
|�d�|�|j|�|rJddipLd}|�|||�|�d�|jjrx|�d�dS)Nr�zenvironment.call(context, z
context.call(r�r�)r7r�r�rlr(r*r�)r)r*r+r<r�r/r/r0r=bs


zCodeGenerator.visit_CallcCs"|�|jd�|�|j|�dS)N�=)r�rLr(rJrr/r/r0�
visit_KeywordqszCodeGenerator.visit_KeywordcCs&|�d�|�|j|�|�d�dS)NzMarkup(r��r�r(rCrr/r/r0�visit_MarkSafews
zCodeGenerator.visit_MarkSafecCs&|�d�|�|j|�|�d�dS)Nz5(context.eval_ctx.autoescape and Markup or identity)(r�r�rr/r/r0�visit_MarkSafeIfAutoescape|s
z(CodeGenerator.visit_MarkSafeIfAutoescapecCs|�d|j�dS)Nzenvironment.�r�r8rr/r/r0�visit_EnvironmentAttribute�sz(CodeGenerator.visit_EnvironmentAttributecCs|�d|j|jf�dS)Nzenvironment.extensions[%r].%s)r�Z
identifierr8rr/r/r0�visit_ExtensionAttribute�sz&CodeGenerator.visit_ExtensionAttributecCs|�|j|j�dSr#)r�r�r	rr/r/r0�visit_ImportedName�sz CodeGenerator.visit_ImportedNamecCs|�|j�dSr#r�rr/r/r0�visit_InternalName�sz CodeGenerator.visit_InternalNamecCs|�d�dS)Nr�)r�rr/r/r0�visit_ContextReference�sz$CodeGenerator.visit_ContextReferencecCs|�d|�dS)N�continuer�rr/r/r0�visit_Continue�szCodeGenerator.visit_ContinuecCs|�d|�dS)N�breakr�rr/r/r0�visit_Break�szCodeGenerator.visit_BreakcCs:|��}|j�|�|�|�|�|j|�|�|�dSr#)rpr_r�r�r�r�r�)r)r*r+�scope_framer/r/r0�visit_Scope�s

zCodeGenerator.visit_ScopecCs�|��}|�d||�|�f�|�d|�|�|j|�|�|�|jdd�}|j�|�|�	|�|�
|j|�|�|�|�
�dS)Nr�z
%s.vars = T)ro)r�r�r�r(r�r�rpr_r�r�r�r�r�r�)r)r*r+rr�r/r/r0�visit_OverlayScope�s


z CodeGenerator.visit_OverlayScopec	Csp|jD]d}|�d|j�|�|j|�z|j�|j�}Wntjk
rXd|j_	YqXt
|j|j|�qdS)Nzcontext.eval_ctx.%s = T)Zoptionsr�rLr(rJrRr%rrQr&�setattr)r)r*r+�keywordrVr/r/r0�visit_EvalContextModifier�s
z'CodeGenerator.visit_EvalContextModifiercCsb|��}|j��}|�d|�|�||�|jD]}|�||�q2|j�|�|�d|�dS)Nz%s = context.eval_ctx.save()zcontext.eval_ctx.revert(%s))r�r%Zsaver�r�r�r(Zrevert)r)r*r+Zold_ctx_nameZ	saved_ctxrUr/r/r0�visit_ScopedEvalContextModifier�s

z-CodeGenerator.visit_ScopedEvalContextModifier)NFT)F)rn)N)N)Nr)Nr)N)F)N)T)T)F)drYrZr[rXr�r�rcr�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�r�r�r�rr}rr r*r.r8r:r;r>r@rDrErYrZr\r�r^r`rbrfrirjrtruZ	visit_AddZ	visit_SubZ	visit_MulZ	visit_DivZvisit_FloorDivZ	visit_PowZ	visit_ModZ	visit_AndZvisit_OrZ	visit_PosZ	visit_NegZ	visit_Notr2r|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/r0r��s��
C






5

M		
t /6@	











r�)NFT)=rr�	itertoolsrrkrr�rr��	functoolsrZjinja2rZjinja2.nodesrZjinja2.visitorr	Zjinja2.optimizerr
Zjinja2.exceptionsrZjinja2.utilsrr
rZjinja2._compatrrrrrrrZjinja2.idtrackingrrrrrrrSrIrr�execr��SyntaxErrorrr2r<rHrRrfrSr\�RuntimeErrorrNrurMrTr�r�r/r/r/r0�<module>sb	$�

�


	>

Anon7 - 2022
AnonSec Team