ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ ]_Zc@sIdZddlmZddlmZdZdefdYZdS(s[ jinja2.optimizer ~~~~~~~~~~~~~~~~ The jinja optimizer is currently trying to constant fold a few expressions and modify the AST in place so that it should be easier to evaluate it. Because the AST does not contain all the scoping information and the compiler has to find that out, we cannot do all the optimizations we want. For example loop unrolling doesn't work because unrolled loops would have a different scoping. The solution would be a second syntax tree that has the scoping rules stored. :copyright: (c) 2017 by the Jinja Team. :license: BSD. i(tnodes(tNodeTransformercCst|}|j|S(s^The context hint can be used to perform an static optimization based on the context given.(t Optimizertvisit(tnodet environmentt optimizer((s4/usr/lib/python2.7/site-packages/jinja2/optimizer.pytoptimizes RcBsneZdZddZeZZZZZ Z Z Z Z ZZZZZZZZZZ[RS(cCs ||_dS(N(R(tselfR((s4/usr/lib/python2.7/site-packages/jinja2/optimizer.pyt__init__ scCsZ|j|}y/tjj|j|d|jd|jSWntjk rU|SXdS(sDo constant folding.tlinenoRN(t generic_visitRtConsttfrom_untrustedtas_constR Rt Impossible(RRteval_ctx((s4/usr/lib/python2.7/site-packages/jinja2/optimizer.pytfold#s N(t__name__t __module__R tNoneRt visit_Addt visit_Subt visit_Mult visit_Divtvisit_FloorDivt visit_Powt visit_Modt visit_Andtvisit_Ort visit_Post visit_Negt visit_Nott visit_Comparet visit_Getitemt visit_Getattrt visit_Callt visit_Filtert visit_Testtvisit_CondExpr(((s4/usr/lib/python2.7/site-packages/jinja2/optimizer.pyRs  NN(t__doc__tjinja2Rtjinja2.visitorRRR(((s4/usr/lib/python2.7/site-packages/jinja2/optimizer.pyts