From 6116d8559868c7ba3813acbcf61b3361485d33af Mon Sep 17 00:00:00 2001 From: azenyx <53049056+azenyx@users.noreply.github.com> Date: Thu, 6 May 2021 14:31:24 +0100 Subject: [PATCH 1/5] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b1f513c..5892db7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # SnapTools -Snaptools for Snapchat 10.52.0.0 Beta +Snaptools for Snapchat 10.48.5.0 Beta -If for some reason you would like to donate direct your donations to Jaqxues as it wouldnt be possible without him -https://www.paypal.me/jaqxues From a9b5044337d9f2cce5cd0ac2b89817f75b1c1995 Mon Sep 17 00:00:00 2001 From: azenyx <53049056+azenyx@users.noreply.github.com> Date: Thu, 6 May 2021 14:33:50 +0100 Subject: [PATCH 2/5] Delete STModulePack_1.0.0.3_Premium_10.52.0.0_Beta_unsigned.jar --- ...1.0.0.3_Premium_10.52.0.0_Beta_unsigned.jar | Bin 314471 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 STModulePack_1.0.0.3_Premium_10.52.0.0_Beta_unsigned.jar diff --git a/STModulePack_1.0.0.3_Premium_10.52.0.0_Beta_unsigned.jar b/STModulePack_1.0.0.3_Premium_10.52.0.0_Beta_unsigned.jar deleted file mode 100644 index cc44fcf5eca566a0be6a950e242c0e6612d309e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314471 zcmb@sXHZjL_%*5mBE6T;OXx@!2)#onp{k(tj)Fo!niT21CA2{3p(#pLr1ugCp^Bmi z0)fz!E*)=v|M$*)@7$R?b3fcO$)~f=oW1w6&sytQ&tqmpM9g^W-o1Ob1SZvEdb zvRlNrOmwX@?}H(Fk~d?wZV}xwGa|kB--tW^=PUP}rCLJVZ%C;x)!deNc=kGn>lq zKv7bVqY_zZ##%A}TN@}#yV4J1ntBCM$W<#X9Dhr>uGi36=Z1&8?PSckaiFo%R_ zi34rT>6coX=dop_f#qfm_#b8s7aeA_{C>ilqxZ*vjqW#wY~wZod3DLob*%~oc- z${r~=3XQxm^Zno`{CU(!O@xtL4bOgP7QI}f5yb2t_oEYNrO4=7agU|;DUi|IRZLm2 z-|NHSo3A=zY~;>#8GGkR;<##JCa*F1ZeeEf?Z%?LloSdUgUgf$M-;EN`W*$Ea^Z^t zWA$afj9{?bXsgQm*N8#CenZxhT+FJ9pW%0*0_hb0uqTGa2c)X`BTmk_%#XLFqFg$E z{g8nsbbI6I&=Cx#@r@Z@QDV=Fj8}jqc@!j-n;7co!@n_DZ{FkA!ooWGxzIF5rqsz` z?4i$)nHk*1mj9u^Ngus^W(QPwb5N-mUXgs-jARF%@iS(lXxM}G|Gb4}{nn`$RJ$5d zbACiaLc)pxcfWTEtAZvEKKRYVplFO#U*{(JX0-d{Z%GnT(8=eYiTbC5__|kGny=>% zqElZDy?Ng$=%RW#bmzmNNqD0>al%<$RHzF_9{7tCV~ZovG<&VjU4Nt``_AoDyqsS_ zB5C--n5D&ok9xztiL4WIM4StwVixkJTz8wII)Kldejhu66bz(-eNN`>rVAv)hBp5?_Y3c7qXn@a1_*%M6I8f4>wH@+739N^=EZA0=@e^Ott< z@SCzydf7J9+}rcLp5w zrbnHBrtFmzR^{7R^;%ILW>p>_WUYRA?p!X7=zrB+);clabDpc(Br! z^8r?BTIu_YS7V+KT95W8ZlbMdnStVlG{>su0(o(~+LrtIOL>M@pC)Hh&uwwzpbOHj zg}&D^lQ|A`s}Dl(ps(KyTh7aPl;0!9Ln5q8C7a(|q8vPp18KvvKxR2vSK6IJ(5Q&I zHPEtTBSg>l4Xcs1CM481*2C3SupZDy)@}VqHoHpxH(=1Ss=2rexj`*?<{HNehxcdW zO`l95%8We(l+W^ZRMu7L#7+ceV0mM5rLqHviBO1dO7)<%02a9Jk!%(>eC&S5(x#so z;+OC^_7Qsqi^;d93>R7oHFi z6Q6b|m{*;XLiK0UmRDGs8H+^GmTDSHn+bcYZ_MeSU424UAF9^-B47>+4_Q0MY2#z0xkiDHL^1`@Ej4upx z{q@ghKyIi=CN(d-7RLBu>AQ#6M*AhN^aS3T7sg-dI^31bO)?f5TP_w-UPlaRv%PpY z`{S6185*VdW1?t%@fXoSP~v^=y%uVDD6#{!uzpoeyj}y*E|^W?qIA4hff#)8*DsL) zxhkIbxlh}Ezc{~RqA24m8Fi(@bvT>o-r{~s8!!QMmnzAr!@mq{%!|1ic}o9h`m_f8 za-%u1vd%@B^vu7$pzL;NUD{8x85=mnT#b2k6`3*&Nw8)9BDGPle#k5NAzh=cdTcMaL zYEwCL^XeX2-Xu*mIVpl3h-w3P4-A zH$=bkc44^$_4!11T*!LW==rcsrQI02a=iof(%r0(OM=5EPc@Pc*r~QOxQ82KISK2i zPx@S6Yyh!WlFmrG8hK@ZSnNr2Yz8w&vdxtPt`TE`pZtpRVpUsC8O!K=HixA)nu@z@ zR{##G7Tk=bN}Q}1;(2J!DKOHzTh8O&5eRE%PZ!G91J-lfo<{T;yVJdH8?!7|JGn+u zy7IB))M&aW%@!?Dx++>O^nKheVJC}f7Mbdv z#*%tXi9MhJ?efn35PEo#^IR#-(-8fuybA^&eUA0p+`3d0-2z1CBHG%ajd26Es{-6-ichR*GwQ**frgevdMzl00mQgG))%4Q zx%OkzsV@U1r0!M&cKJRFm&P~?R0kWUvO4wQQ9KOiXK9C4Rcs$?OkJK#C2BsN*`v+O;v?pM2k zjtzOqL}rN(uD>2D$)wuUxzl)rpxM=E@AHY@qf41Iz)mt&k^5}*S-UqxRoJeIzD!J{ zq;Nh0iHr`sv_i3&05DdMnhTp3g~W3~M+_k~8U(~nT_B)_&}TG*8trd>7ly*g^W<0{ zuRxrzp2(O*j(V-B?Dqo}BGw_|D%ldkg!wxZ$Gjx`6Gl1(6FHd&f$|Pn*>kRZG`b?X zByXqlA;-?N6^JpuM~zuUyLeWQ&%FaVc9tcLNWR2(FVGs` z8x&^@0tpTp`9OM)IX0kKV|9Ms`iPtO(Ytuu2SYISLb8!`#v=qPVH?x70sP;9S? zC&zQ#_7gNcDD3p(l7?M;Q*yWppVL(X4~3i87{_1VsLy2m(REhU+|S!g%3sbYeGxoaZLkbMO6S`h!G?=3e-nM&?6;oxOKKgwln^)21{cWW4{@yC zx9Mr6IrbpC{H%94IIquM)s)8q1eZUaDY>sAU}ABJ;gFyeLlh62&HE>f=v-^snI(83 z*DrCy9*oK%`fnLm^$)wf22|N3T3Mp(rJIFTqMUc$Rd znTdjjOKR5{K{K%=C#)k}#hG&NPoxS4I{EFCLI$)Xj!Z(O-GN`h2wrhdY(V<{!Q=+k z^@iVG@1TBK#P49#2Kb!ar`4^;t8E6N?|KVq%AbtzMvQVX2dv2<{1Zho zgbQasFY?()fF>P39U!yYPHx9HC$yrlE)wFa)NV)dB!%}5<4A@8V?Dqz$@Ds4=bMf@ z&y(z=#B2Iw${EQi$fXjAbVPPjodo@oH~Umj&&(rDKRG*VAXhKQU)Ee2S^FXvd&VMH zbIf)YtDV6oS_KwZ9X_KDBHviau^JG>;zFS-?vtCU{yV6%)}O<_X-{z%KhLoy&_}ck zFET62Z-(=7Z~_@3);0v);{6au?{U6Gb3W|U{eJtOf0W7>oT}z4e`i_lFH_ox3GJpY z0h7P(IsEhb;LTf}t2Sz=R{#6TnR5^QbYv;>Cip3PDHUueNq{9dX}X6+)g~D62ge;12HPe*eC((`Sxd zz2(c!+2^9`Rg$zH>K~k9epKrs3yywia=D_RhuyOU3K6YS6USmMyU*xlJJ<;jha#^wJuVE;Qlj73;DwiFwVNgu}VH*T0_ z`z@hg8KypVu`1yq6_GXfu?&ZKpyd|Y6BUM=HoKU(P4^o9z76*LkwOo|v>Zr3<0j%k&RZWfXo6B)vA`YA$SP z{b~2jKQK~r29R2t`u2Alu3!0l**0PEG zVHeivG8wJ7Fz3mI31u0T6A5>}0{O{ffoEz#^}p^ecTHUaM*P&mYhOxbUk`=}EF=2E z54%3G*y8XC^J84)olMGl{>j#RVY#2g*KPxrJ7^kWS*$L2immST$J|~-IcD!W@;yG6 zeipn>+GT?#;VX|L9oifb{g5RW8f=yT;=ot1u4vvakU?ncqyV^FS4`s@qDX<%ainfr zXbUVIfSK#6|CT&754WAXx8Dx^V-nQ`JCfO z9bow!R^|Le`J;Yn7s4tA+DzZ2Q@(Kg;xi>1qNY*fC$SMWbbB(DMkemc{~9#;s{6)z zcU05q?F^!^4$oJAb_L%ry_d$?x4gJ^WIB;nK3A=7X*~)4aFiQdf?#p;(oh&~PF1yC zn*J4T27KQ;_41mX!XalFWQ?MnBJ2%bw6~(22#Ix!6Zp?o? zZIBwgq8T=05j`B>!DqBE;Zh#yWqWuaG!7cQ?;OU&1>|EnVI2&h_AT0UNKtL`(uv$? zii2NqEJsX5-x%XLzc8FpIz+A&bqd;O?Ul*B+8i}=_e*>ihA_DC%~k+j%d3oPyRpsY zWYzH>7hSu{Wr&=2u^vPXCk+*OgHtENZw$6W-2LB-#0pW+bPLG(SflyNZydRWhgH-d zTwKRavXhAjt?taU?PKRVDGTVHPTaffdE;=s2AEMNZ^YYu9#w&JIM&!*`ElZTMSfPA zL#-A;!WN$(@%J6Bfi%Jpm-vR%H65e->9}gOn1x>TMWH~p=e*KGn;7R0^tq2BD~Kmp zC*1!WylUU)5&F0_u9bd}y*E4V$9BXreqI>9$QyX~IloxXbRrj}lN`mu1n3X#wTC~D zZb4WJAUd7-g3^g3A=q>*RZUxWdpd3<)q{&2H0<_gAC@5lh_Q05yqDvt^O7Lnx@U+Jp`^2iF*LfAuRO8hWxRIl3x#pvB0a4~rf zdT#ipiV-jL$Cw&uM~KeGHyT%&1zu{a3pQk{+HL^2@eP7d^W63pk6Uo-@rW0+4?KeR zNs`dIHcw>oLAx8w($F|kz^L)~&N3+r7(eF?Cb4co5TaI(La*t~*!di&aA5@Oysp44I$LsLivvkh zY~DxlDY(_>KaH0yTK9HV@CY%^jt(VSsL?R`KAmtN?yOwhHpp4dJTrb4TW_Gr^=vx! zkFgum4-oc&J$*-mZMCGO%?PiAUrOGfIA1!-QE8;D*RJ@;ZF--FtaeljT-B8C#<5Px z5~8{53{6qVUNKdY$;>kLkbVk6Kjb+|4`%6%LjV_hJqZ%X*W9}bo6PL-<3qD)eu-=`uUgT4c9O8l@}boimo z_;8+C&aOXY9V0HPN{RO(lG*5x>CAM<3_7}F8eL*UKY#Q%9bI3lHJ#@BZ#OD0bj+@I z5_z<*5=(=k6CHV)zYS|*kCIKhlkUM_ISw^ioKI#7os3_~>N5kz*|7IN8MbZZsrwB7aGg?bXF` zWS7$WYz_b)K@)!rUaRpL7)g(rC8=-qdNMa>{0qh?cN=if0eKnDh4pl|r;4Le-N;Dq z!E}iI3^XOi4utM+VGWoYqPmc4B-1cGVh4EP3u6}oMh$SP8MznXD&!t|4M}jp_euSo zrMV3XRQN`X?M0`uqcCnl35w$`HN7-tEXClHMJ$Gen|7Sc%v!n=iIdjpC?4Jswq(wxkAmI zi1_Z0ab>7CKN*}@U+cUXQ;vULh z&xN~!%yZc0%6NS?$93kR|9LXxry>2X%iW|T)%ev!(3 z;Rvfy#+7uw;z2auBbzVMc#)EcP%k3~y@o`yz_v-S1i_BdAp|ze(7DO-&FWkk(EwtY zX%&}xFQWPZ{M+cm@{Qzs-9VBpVGX8d)9JS{&J-P>@$e=3+^2sI8G5EOA00d2R|bu+ zudXNEBOsrfmu8TAW3iX|%J%s&?}bzm)9%I{n#988D{yZsiii8l|Kw}w zACBD#8O>mTdvpAM4%6ed34Z(i+!_)bM+t3S{aO4VQ0P7Y4N;4z6n|Kw&HrR3tC-SJ z9FFKyVQx;Q@^;}KQJm2IaP)?yQ^;NOh?mZ5)R2q(K+LU1BPCuj03IrK;h8F-GRb zA{X1$`v;1`fYstOTyt7*lP}Q~N)1aT0mK~v&%X@@{ym^k z_&ma3e-Op`5O=SHKI7%6mfLrk=#Sn`1m{urSp7JX{(yfAtwjhJ#eV^NHvPuErHp~d zx>xV7Ka#zZ7xFMj!y>E5p+?h(Z6=+I(t~d{e}HekDNdCG&leP|sq;WJjoUz*nqcR# z$yIRL0eTsko3biw`D&2^xwupGropBnYA&HkugK6dm28yD}|`^-k|+=$gL2pcUH2Ytu+Hnqn9gZ zx(4)d=v$<+9qWnI-dB0do3J3xI*Tt~%bcBk6i z8?R-|@@M9%9$d3ds?0aSE098lg!D-?*#hy2(uF|JSlwcV>TW*+J&2)2(Whf4skQu3 z??(hnGFHL&F(1*8u&%)NRQwA{4|1c0agjfV#owrgN^mFvf>8)DQkuylFtn`D=i#UQ zY)MQ>2AXV5nRzpFWpqCQqt@=t$O(>LjHl-sb;BFlTi)RWDtB-D{EL70#~`}vy_$4^$XQsrDLZ>@WQ zN!w-fr;S~2D}yjhgrn4^NMDkDg^{#E$ro)6@eIor3V5&bO+OjE{dP7l=W4wAepk$S z?31=1vqkq8OZA>#M?-xu3FSUtMB9F#pUZqYg(Eo!qoO(2Y2%b_h|ZNS{h>k9EYQGL z%K~l+AZ_cQ5X`HHOQYSI@7hb29n~k66?uENuBM-wSaxMRFz>1dWmT7SkfJYsm}(Ir z6;#S^G){>`X`q6z=MDD5t=h;kAnSIAh;+hMn{CDFe&R2lHvP>IAlFuej%W5!{%b4t z_j)2K!x!gXb+SpH*KkaGo*?@ri^%9bR;z*%e7H&%-c~Q78{Hjk+T&s^=vS-_5AcbJjVTbU6J1NpR={C zST4)wT_^{#6%h=Q@?w&!S+YgHbrr-@L6N5u-M}`U$EdPBYvG zcFB2jirY(?$u3xMIcMu0vT~p7_2A=wI>eEF83jTovW8dh^xuqC#IXJ#l5O; zZ#?RgUe7N~VjZy5Oa7KOtd+!n*RRQ)tNMYTLC7l&FPtT38LC*?I zmv>?oOOHw0jAwXcSo_7E=_XN9!yi0zl}gzw*S%|Lz@aLWul<%at4}2&acd9Ekxc2H z$ty1N4brwh`is_vk1qxh#s~nktla4tOr{*OEZGPs8tA$&LI&0kBsYs!YH^jDwH_7ybVQ>NVzQg@9&XH7MStR@ z$t@_Acfx_A{2B~NHRX#TM)A@J)avoK&!o^9J2Q_jU?L#?g`_HYqB2wdm@`zFB2%qC zDZx_L^&QQys>=q*27~Y$!xZlN! z<&gK!H&PJ{MUMVg*Uf;=p+q93v%%udpm#PSf}fzNuT@r58&}83=rfTmxKiQD^Oz@c zm7L-E7|Ptngjrj>bRWyo$X6ggyFd-tzg;>t$=gMpC3x_4`A7=o>OPT;h)&4cnJh03 zJefnJ2usa~)ZhIAVh7#3BwnKif&2NAJ%2-z_X#|%sa(~NeWW5J-hIVGW+QB1^K3f# z52f>+f2Xh8ANgm?BJp=M?;HrIiHMB7w5lL00t{L+Hzn~SSMIik^!k^F@xM$Q2}1Fx zhKLN-XIE3--x?BjZ%(BmC`;}$pp)zV{qwW`M1YE{&7ga_Z``HI3a2@P?p=p{BE%?| zZp=LGZc918D(jHWMniNDXiysB56A0V%FEmnqT3oZ^%FJw4|!$8zG3}d(5-ij@<@0I z_Y)=p;M|(ziIv<$mF@jq3u>(z((7^;eqO?NW)gb2t1SQm;09bsqU9K3Cy?!lqi}>RQdyV~&UqaAk$(Pmq7| zi+@e*^;7z+U=D{8X7bV_jhBY!?EWHt9HKK9@HgqDfr)&wSyp>X75hMbZ`gc8p5@|- z0C#0jE-c1D*i@CU8gq;jCu!T5QMred+HzL<>XoMIlbND2V<+jz=7h-4SlK1|-ySE% z(53^i2b;b3s+v=MIM&!Ql5)+j5=Ty5f$9P^#wKi2Sy_Z#QC6H#Eq8^z0|KcCmWaUi zbTL<|yWqI>q&&noE}@fGruj58+MBUlE^;cH`q+c-IS6ZFPm9o12Z{iMwMYu4)3Pv* z_b<;f3Oj*(?>P9F7XCX?mC`<&6T(%EiLZ8X!g;}_o!(GH2^y^1E(Je9u1S};e>D|0 z=GSY=C#3q%sGsu+^~@Id)vbwZLSCEjvPmT}U5&GMPq=Z{YLQkomypKdKTTRyO8P6J zpTcli$}LW!%E7%XA>omw#E~OdD>gR3>5_xijAY*S7t2Tbkk>5iF}<_X_fg zZ7P0=(n(P4+aMRjFC$1tjPGlrzQqhIV`dITa-Bc)=w?OmWum>+OFph;c-Eb46bF;1 zj)$I9!U;hkW+XktoT?M_oMDSIP}XLgSK{!E@K73B;mSZFqD+)(v)9bMA)9I!&zRRX zz^-;Pq?Vby%UDLO3K+lpf$rpS8~8zdbM{*2uXprWn(ohLl9njlWsC?FS%_~;jle_^ z@qemZSd*z>24QdPF8%!5h_u9EB8$#_fj>aO2Lxk9_t`8`;@E?-*=8J)?qB55DOldp z95ra=Dp&7mHXNR_llDv83d@# zk&prOE3182wSk(!2*g2JVKe;XlV4`DEuPc-MoRtwY{1JlgS0<(qjkyeyYr|a>n8^e z$ntrTRPBRk9#}UNYLTuK;3j-@R;Y?3q%v>OAacvB_+wY<*KLsO?Z0Vt*%frEtdlZ? z(i1++Ui)9E@W;(D%K3&83Kd?fSz8hCL$=wZ+XRM4rXtTq_uJJT;z&N+oZJJF6yu zhP2D)gL?RQMZo%+qBE)Xl!ScKW|;Z!p(Oq@+GUCUUDRpT8}3mEuc0O4qQwblnLlax z$q#vCyFylCSNrF2@AiTvIgCv>93cOh3K_L9Dgb{c@?$t}~{TgsHR5xpw% z1Vmk2CzDK?w=T*|J;s&E<Oqgh)@u!)D@mmy z#9f3)K@%h|_Om@FPWb7wqV8Cg-uBs?WMpoDz1m$N&j=nSb^hf0;gHN>UsW9z6W>xL z#GjAhlW#~^v&At>CQe&$9&*;AjYQtgzIhZ-p)g=Q68QJ%jhPspxfZQyvpto>YwYsi zA2h@B{RAQ#ha!I9HL39kn#bsaG_P9$od4J+-Q_V%BcSo0)YUpQHZ^vS=1A`QX)InF{?)na0Wuj*j)KS&G^oYd2Ewa zCCN`#G~-4?b`J<+!$nsKfAUMr0#+P-1>r3CuS;TxK5(BP)W8@lme6dGU}06k^*>nM zoOt4mzop4?uBR0NWDgPPBcM3f`z>SjVX2HbaW@Lm^SqSBH9&pR{Fg3xFpv*Wi`J1y zwn!J9t6;L*9J&=Riy*0USI$fNX_A2wRYgn~{`HR&3R|-Kb0iyb9`|;xlI-`^z&%0f z7(&8D^A8G7=)_m_3?`L`=-51)N+z%lU}s^V2Z?9SNcyhbO`8EkRfw8w>b%sG%^-ZR z9C>Y%M$UidJPdkUf&3(1XpO)_%Vg0jaQKty|IUS|k>cBvw3ltO@rb9%4e5}zTYz7){~7RB=~Zs zNov+qSvdqg0T7~Z{K!91tdmb}Fd{QH09Q_#Q)42lG?lVq?0j478(NLv%bo`7E|zUf zPF`t+yq%3N!?>%Gf`%Rz)3UkWxT1L6YV;`DWfT1{&LoA3qb6$HFN~p<>1-_(>T5Q= zcmE!7D}-oz#-78n!m@ERY%{r<#vURBgH(jz*Lm`!xwU`IBB ztOF{!jm1Q^zqsnj*d^n`^z{fBzgz<$dNQ3rR_Df&02;7cqAe&@IOMkxF&1E(j&s7e zgE~Ny_m}9Tr#TFCo*bGN6ttj7kG}P(Uyax;F}#L-Jd%wQ);9{3if#N)2-{5B6Bx2J z)`VGqH7mOXS4qrNqy4mfri2XR3Q|_=3*kB_ZV(B*gC5luc}sx*R2P8qc|u2++?O`J zCs6a~!?_CCf&9TR0#aBa*JWNNs+m9zIK2o=%QjmiE$*mF+ScpOSGB{A;-?@qmoODf z!TrQtWC@B)my5Q5HxLD67!sb~mMi0r$?vzg*--y;2&?yaOVH2R&?~UN(rg~Vu?9T_ z^$Tzv#*f-;zag9fjxU}DLKm{}2yrL=4p2W;F@w=2{2_8`XpCd}QL=b; zCBVgIf{u&9|AVRkH&d-41EINXiPA&n$a?I_U%x0JokAf6@F>ldG4GfKT(G5_{hAd^ zK*R!0j&)JfL>Y%V108ycLs>#w--Bnf`SSrDw<^vGwUKLrreqGZfI(h05wM9nA%voH zD6WZ3WA3}sxd3rzhD*gUfj@@@`4nA+C8J=nhzik@&0&pU*^;!~4fPk$jA|V_)Z=|7 z^r(T_*bG4fIFl(W4umh!hBsabl8K(!1HcvcjQ;$!JC z%efnX;;yh6d_)aRQtrgVD-WX>QM}3|BKi*srV6kD9*P7)B6R5xnhos*^}!~O$jys3 zj$QctZ66TYMiLSH0<^`Krl6p;{H zpHA7$ONJ2EAylk#i;dm*6Fv_Ugt~v)9(Zu=sRb<0Vy=|LZfo3kSUQi1;N?{lUhwf* z%xZQuIicNA;jUCct+*o_X-Z?|&7iZxetIP68Q#9ir9Z2B#78<9+Pu1xQ2 z2A<3}7E^h${I*A7%jGR7{$X#Y@TQ+SI!WVAA64!8r><;+Z-u<@WUQw!Ju5gM#%XmP-=o)zEnpKE@G zNOk3tT^NN>L$eB1a01-tA{v_H=J|Y#m5M$4VgkZoLgQWhvheu7Yj}Q-WmK|Nxy-|} zm?v{p)URqyiP&ZmhvmvdCOjb&PiB(mTgvYL_B16`nn}V2l!^V^#5x?83UzIoa9_-1 z+)z65#IRy$<7HA;QXPR6tP`xmGU*4#j(qTZ3}cl{+Sb)x$ry#ZbRh`i#&u-VtHs=y zFCgv)7`N#&eAHO*v2HE$pRG+pmWj7JMPzf1kGBV@^1{%IzYTfeyZBqAph2f}-)t8S zJn=tYSR`o33%k$l0U8OB@Xa!^-5`J5HvH;^FZ}7^M&!R(L*I-`m0!FW!5D_(!&H3d zFM;~t3HGJK^wTh&dzL*q1SCw-G}elxgAiv8u15AytDohYo@Gy-A^%-poc^L%JrHm> zcyIvjRk+%FTui!r$hi#92Lc5E>X}GJ6p%^%kf9c={XdnBD`P#GEChl3*cZ^6kpDLM zYVWHZ>Hpql)}iw_2N6xMp?QJKm7dL*dGT_shOVeNLi9@W;mxU7c?{be&h(jiq0(F> z*NK;gHrsT*pj;(j!b{WW$#j8yOC{&;Ee(C8X@o>TCHv3w6s}_wOV^gR!^L#TZAw?# z7(oC3Z>JU#*jT8#>&ATv>eZz7%jf4Q+>ADhI{M9VmAUpNC(6i^x5Z3{M1-$gN28KhB%ZIdyu5r> zQdCrn7Nxy;Qi8aa2wFklix5Rc%^e=5>Zh?dZkP*j1bk=!$-FXx!f=e}NMJP>n~4+v z=|hW&OTr%J8A!l!a9iFsLueXK2~7nn1hyKyfG-k?M9>VJT9T;F5A`J81A{OiFR%c8_7;p*Inph+dmn>Pn0&i!j z=vtKEykK{MlbLcrFP)iu6dBkO<_??yKgnzXhUB7{z|UcLgYTIw0$%!uD&W^JY9J?A zDJwv5OKTk3wSsyRS2PR$cEN|1;D^SIJhd)SOB31)08O!!d>s8 zjbS#xX7EO)YZgWTp)XV7dK^|@*_*0g*(1K=DA!!ia#&SywuTvS>-*KYoz$Av<~x7@2ux0?q!Ph=%}$3~mHKU}!Q< z9X1Q}0AsU|LTwt*EF3-B4HgCy13m_S$g&k`(}cot%xE8&GB61ICu>p2JkIM9C=KLF z$^ga!vr)IenlLS39Jt?ri$4U3k_U6bgba#-wMG^hI1yMixR}?=U?veIO{TV9QII7k zKIl4=|O9!aaZ`0k{4O0nC^m&4Ylz zz%ntef@pEr0?^-}$zTJ9;YXM@y}`YL#Q{?cnBjH6kPKHQ^d;~eSPgg{>qkhXW-<}09Z2+Zy*7)cV#Z8ng9_PqQ~Cke{|f z5hWGezQ@|>5wQW?K{zKn72=|iHpOF=WD&A!@hyQn(&_)Gw;qCNG>avs!tq)U*=Mw~ z;4b7mf=r=jpdCrv-2K>BU#XPpJKm@>AFM#Q=HY1Wsqy0GgB8}+7gO&PrB&i*%f4!1 z?^RRLc@nj%&v->LI$NJ=N8S$Y@(;9$@UW?C)xBAT{DfkgtoNej^Mq7~rjHsHlM`PO z75$h^IW|O{mYvCM@*8m9QY|{}Lp>G@m;Y`yVe{gFP^8JoKjBI3mZ%e^ny2Gl|6I~< zK3nFUcqd1aU4+hs_b1ik2i1SqRa8sA;Fu+r{t14mhY^U>Sk7p4yQclVK);i+^9ee< z4N85;viZf7^n~9ki27JXy!HJo76K`TjLvdh*d*`Wy1x6pw|%eEhka)yo$Iw4D?|Q| zx}(KE)J2zHh(ZrTI{sMK|C)RMO3k{p7~a!Z(F%1|QoP}UV6A5KHMq4df;YFYO&g$t z6pnvyj{@tIlwH1jv8lEz@^cI?s=y;#e{k-!jV>^`&?hb=tT#pUCar)#Oczdv8BxXf zLEC`i08GLki1KTt3yP_bw(uNP3Cj2gqH~*5y9SU=2J|?V;?o3?S?fy;p-A=3FOuJo zbqX3kHOIJ2+o-gWe(cdcD{eChhoL$*W%))NvWtMH^BuMgzg<<=wWcP2Z;^!el5|8m zhRbbrm6-~3(H!fdP7}J*kIAO|!I4xKw>@n1IsVmB^nKC=`F!^4`;%ggFT`t?CBW6h zryw&zTJ_o&@1~yGQEu$6Y}TSOD34Q)8>eQ$+@#?mTU%4D_LQGic(#a$e)o8OrP%Q( zx>6|37(|9;9XBrC7?p{Vgfecag1PlW7mPmj)O~Gt9SP$b4!d<6isQc11=<=Y3)1|V zg#84f`ysfqg*w%Q%>J7GXKE*@d? z$`^Y2lYYk&kel~o#XnG5>d_I6-Q+HX@1ifk^G43dAjj}Zt;zVvYT0<@BI(7gRNkGC z{XOX6u2ym1)Fj`AKa+~bH~g`i`my{J(TMH57?OJ1HVC3I^7;BrduLtDAbZ|!MEt8| zw+=~X)otjM!(r3UmksuD$KWY;Tk7!4>fdf1w)3V%)Z0<=90A|=D`xXbIIkO;)2;E> zM3<5NS3Sxu(81cvYK9}0#t}F6qt;o6dCL`b@_)iJk_-u%k#ffeD4J+B_UkeH$>wI1 zyscmEPDRQGrbM#oKx$v(8tUN&E>?zVX+hmr4U*H4uoh}8{1eK9KhneJ^h@XauA1L! zQ9FO3+fChE2jK?GWPbTOrn>D{Z^sSNv1 zcokU#b=?cs&Bq3NIv2(+_0#Pdr$sc|ES#zh5xOH6MeE{uC%v}xkr8Gzsc3JZ;*;K2 zW8Ol76w*bdq~CMbTkem06%N`$12AIq6dOO}J<2Aa-q3Aq(08e2uYo(&MHI+`W$jSL zi;rK4Ph0D_`vMOHw$(^gqgFe#Bnw}<{N*PAUs2d=iHXpdu)-tSEuW*`-H9g>>FP`& z)XKkAc8`lrcAGWBZ+*XNWf-`)cV?RZOYLtggFo!}AQ7~cIvHvGhhsCUQC0t9?y8h4 zUlxx9`Tz7fdgbB$QUiap#2+qyF@8~gRT@chm=YmhLwdLvG`|;KJyFbJE3p&hpK3Pq zb)EEt^io>#+r}M;-Ml}o!yEZtq{NAgwI zt=gf^LFbAAwd{Kw?Gdfi!^kiNqT#MD^v5tMW9vrvsw!EKMDM|SP^B6n2eR#`zYS`8 zEx#Wtdvpc(4!>pJa;yKM|6XBNo`zY`>GNy6o81m*Z&c7#6A&zPnX7 zBIjWfj&!5axp}k1yw)3gDI$&d)$0MAo|6-d`HEz`*O6^uS$F6wF$$>TVjwK=9 zrj7(AkV-v{O9aH{&!aN-cdxCn>cd`>tSv%J7Z!7FstptAez`*zqJybJ?Hgs#}ZI|)VYA?XqGNo`Pp&*Bk% zVzic1(=1A_Dn8s@dyJ&IIB)04l&xeb z82_>!xbPGb{F!7EAh9_aaJ3^zdVRDQEHp{3KRK*uWGAHdHHl1}<#^BE`H|u^RUHL7 zWd4tswYu+v8gAZj^5bU6jWPtX{IL|fBP=#`cch2r>-)M9r5kO?YZ%(0=y1B^ksY73T;h(yWEl5w*>%O&(fZddKZOPXYSU3P1;r_{EkIcVkBh&u6fb;46PH9n{ zLU+7BsJLX`1LXfw0t)>Z(wW9ze8MOm)Ge#N4E^3Pif&#!kQ`C*_(wi68OlwdK(b-4HYwJlpm7N{B9xMQE%Aq=fKB}F? z-cRrTVx#{989d+WZ1bbY=UE<0XWk*x>iNR9-)5vXKBSnm2!Bqtd9}E|{HElvBsSvB zvE>vE{DwO~tyP^$HRH;o)PeWf+p+Dd_Lnxo2!~kv%&WZ8qwWKlW8p)*HXaXqTq*?r zCwfeda)_}{IcA^Q0o`n*FU?PPWJYj?CR+yG+EOUX2z0K3MTkvpH20|-jYcX@1syI& zVZVBs(>-#~k)EDBL5T6z7fDiuzpa?` zU(Hjx5EXJSn!VdC#F4o2dWdFtU(c6=9!q=@o?ddQ9(4fvb$0$lu#_8mrO%-{IX$U# z!BjmFM#XO36EqsBF6Hq;$)^M0tqmS==$n409LlMm0sX%G%iXtaqA34U`qI!eyP^vW zD*J!%^d`_yzhB^gQ3)Zb>{JS6PxfUhO0p#h$(Ae?jU~jGne5q%ER$uDvhQRGGj_=^ zWT$3Gc4L?^`}Xts{(k@eId@(&^PKaZIcMI_bMJlbbMGD9m*9LuxqRy0%h3sI88cbj zdZZi0)g2T_cSO&f^)?uObSGl2D?*|3v3sY%unYd*+-6#D+~VUuU`<^eL0y`V!JczL zsCL-EQkh8b&vBsc9z&XSp}+4uCpE7dHy)-WmI=|HtyLU^2MjymTcUAQi|bR;ooRM0 zQFbkQ8|TLsGGzFS;`Rwqr1i;y&42kgs;EBwR%yCLfmii~&O7dsuLypZj4rFQtqWt) zAhSckljWeFE;Ys2fL9>~jxCG+KAi>;B@?Sh2Hk#*&lqSVTl1`$A5|!s#P2{( z0YeO0YYcSRrxk4A3*F%5lM3;*)m$NiSizTJFl*FJ1smxw7hR3Y{O?=&)M{(g%hCcy zLGFPM{Vy~CvZ@z?*4J>5;z*lO{_qaOVtMJF(nfRR!}@#nQU!P*U^c;k9g&8a9e38# zcf%jq3=PPh>P<8c*+2Y6RLD>COU`kru$?36YFp-N+(t7)ZJe}V<?``}Hta2gyv#T`CipjWCtT!3rxc`wqtMn24`Xzvbh#SEcmzC`6#r@`Ss zV@KpDb1qD$)kP}cuaE%_u-UY9dLuE4v_hRS@_`4V#W|o+$iQCCE9My~R#~uWJ=Q6G zsvuWC4bwHAXFyxfXRD?a{_Wcj+&}*XaN@wn{K~b}p9ou9PtMO*+BrIC$Z!oX49?H} zlQud7j;f!>|1(@)PmpGn6~lw}lShMSg`w`ozXP)S0bD2gL|^TfF-9W-_YaI&9HX0g z@I?{UmIpU$WnEgTGa*x9YDlwh+$@uQ^2x6PYMeESPr;{o8UHswv&l###R=ah^@h&@>7y83Q*0Nv3HfS&qV!AhFEk-9^veuzl^i`ejgLVo8bHYGqQgK!S^phaHNj*V&K0i1Jmr{o)?nYqlPhNrU_lw?X)@7Y&yx zf`122i(<{bOX`ji(rdW))}kpQ@$UcuEG^8qrn#EfEdIT#ZXHm;NVyInWt6kO+ogY? zXbSRu3J|{oUa>V^f5IQ_`~-(*8P2-tK_J$ra{)uH0Y(o4o;=r!Ffx-}+6D>fuDPdn zF6R4f^%0G5*DZy7oS1Bzp{~$>)Ioy~%>u|sFw^3Xu|8d2O}FKR-WENr5fYs5wGz=y zYs2!V(QYWL37Z{g!UN4FuqL&gBmzy?f7_+~mwzCEk-z+Q*+%{kKg!0ft{~)2?P*_b zQe}`ks^EJh5D=hNnUIN0&-6LI5w+E@XZ^=ybnnu{9y<77J46KDCm4e8O)9StZu5fr zSahU}KDKw8s{m`i!v{XPvT^J{qZ<_gFLlc8gTJ&SK;G>OjtLn+5TcX3blXAb&v6>U z>iQb!YLsE5to)dEIQ%gER)ypkP*)%N^!&R7EN`T6ME5&)%MT)%LHfCx-Frl0^cz)l zBiHicdZd8Z80}+?!G6YQL&ZCc+)4buoUq+bI_IFD3L>rc+zkuZ+F?Ni4gF6oAqP(y zWAUm7`_9sxLoIk~$=kXb?FELBC;0k^dw=7)z6TI~X!5UjUQkT*fcHf2KhyBgS}XtbI2%>%`w_{2KAd+l6lok}Ao#g0-{3=iAqPlJq)tLa4` ziroVDE7Kqo<3K&SzZr6QJxrQas9E?^G;+|95v?&WZe%93ca$M>HzLGP;R(3^S-UIW zI|!er{g~+Ehd11I{~Vf5Uz}6i5)JRnbUhx<6|p#H=TR!)VJ+DsEMmg3h$Cp-tomrl zN-h@Pe;}p#a7t8S>dDx-R*K8VJqP4-Fvjvr^C{H8F!OMp0=N6 zL6uR2kR&yeKEjU#WnP5R`};{0LxYE$QKa4&yk(`1G%ie`58;#z9M_)@zNSr?nDtQYsItA z;~&TPSH>_5J?K1Y)5NS0v#SidjIMkOk6Rh(A!JW*cndE9dR@QjmjnM&I~U;g-eoJ< z7ntmAc*U!?D*|=?tt&cx&<}0^*u%?>hk1iknFbU~`xE)Zu?XITVphg%y5({{zqEwqK&?Z7eOS5-tTZd`Wv1+EFQn zRLI}S67=+b%}Q3UEvpYiX<_y*&ij;sHl>r=$!}hCj5fK}_96~rjsT-tx(zmK9-a4F z4fz@owuG#lj;J0&m=TL3#ez#CF8?Hq`>tZIs7Aq-Ze4QTk;f>!q-dn-KZ=D_Vp3LL z*lsz@)3cf(0?2r`Uf?TRn5@itach&}@RjjwY%=syn8x_LX0pa$_>0&%j9EVw{JeNT z)MGvZwYlh^VJRtlb5ARy8qN^DD<#~EBAy+4E&7RI@g8-e*6YK{o-U$hboXuyuun7f zO1^KK(l{M@w?X-XpHrb&NwTlZT0ld(sbdf(z<7F+FY=Ba$ zz;8iFd_-GWiwId&*+*yFXwf(zL_-q2e7ag~h%8)POuB;(YC&gE0G1d|-xzcKBsyhU z?Ud&?w}B}e-0`*LH#_n~1?z-O@=dt~A4BHeuEP51dXesnbz-?EjQ8Idd4bewEPj&R zZi@0al#_cBo^tF@t$dYHciznU#SvFk6M#N@F3K40Qngq?1=YzO8@2;`A9cCCo#cM0 zu0d6;>a!AGW%ShkL#+z2VA!Kv6y;S~*_vs zaXi1r&8BZe{Ms1|;i-SIHQJ;9y}T+x|1|bpHs#2+LicxfqutAOZ0`98n_h@SDEF*@ zJAj)ZJ}XdO&;fXHCseXQvis$cc8%?Uy1Y*iJL%8Xrs{d?oY+vn%!dI+;L?*R<@ar- zou+#uW$?$fda2xNFAle_a9cm%&V+GKp8MOl+rs7i0$wAHM(q}!Y@V{=^QQ&7=ke@s z92<(nxl?@n%Q4R5*`lXl+BMSE31@l|pR4x+gxZZ}50eb;Azs>AI@ik0@@`j6(9rIu z42E96Dq;Qna;L;LGmiXv3^w5NP2F_nZF94^`~2Q!O8B(+@^n_S>?js@7!+ZZ39}2) zd=f?ly)h#3|Jo6CN0#Bje?h0S4L$GsiS$n-ug8{iGAFz-15ObST+cnL*> z>}tx|98!J(9*l+esu<|MXPf^#n(GNC)b_U_>OQ%1IJcN-P~&}wMC}gaz1O}K2N>Yl+NP( z3X0e=Zs;(cOdmd&_4u44!v%?`#7(X&%GYq?tob>iZ6U!!Jkc@xVKSVWrzfWX$JvTf z%ERI*t>=YuaaIa~6TM#}Ta6Wwdg3*1XFx}`h3m|EWOy0&EIu^p?EXZK1ZoZ(QQrgeH| z$1>^l(h;K@y0*v?Gb$C*fLps5&`_wnVz+;K>Do_C{f{u*NQzGl;exM`_b0fxz8zgp zn*3@OHj96{`7FZjMB|4RD_;g6X5MI2-RCaT@`{`6$Ya%E*jJw+g3ng=^W&Tn6Sd4% zy}Gro(ddGsAXQzVd?D3CZaku!8kp<7ktW+ZzHLm&a-Dl@c@pT0hw3SYN`UZB(XEy^ zpk3$X_-8DO{Zr2<_d6f7o>;C+q3c}1TvZqfvN*-TpwjR`DgTK9UAi236PVM1k5=lY zblER57I_w*t4lIZJ}#cQgZUOw9Z=w^z`O&!$aI7%Gfklv9@ozB>#Pg(q(&46WMVF& zZeT_hOBess4OYNRDo!jNH_4gT$WA>_Xb+cySmI2xDjfJaaYd8$_21CZur~(XE{iXB zg9C(GMSt@^ijeQfk>UhZmARMGCssGn8j|$ zVT5jOab(zd56&S5Pao?L=LS`%hb>G_uY>*q@I&J{K2)I%lV5N*U$&*4r8ArVCx?f_ zdF2+;rC!Z(*sU{GCP8CZ22>vZ(%{peF@~IVZdX9BR4GD4l>#|6Z#cNGF%&EnD)ag#{3HiScUv+C-+z6Vqp-p`zjJLB zE53~%jb3{Nr5Q2w<~d{y6#prx44b$MPvCHEx{Sd#LF_+b+mQvpTIfL~_dp}_tl=T! zv(LjdQ9*Zvhl>`~i#pMPaX*lZj+?`>=TN&>V`+~d$>j+Zz_^(&E)K%bGl33E$asib z@iHsPcNi~{d)vN0t8;$YA=br4{ zQksnATQF1{@aWX=f!UWUII;xVa~LXWdW zs&9(kX7!Z0iIIBm!Q1ZTu940lM?~TcJ${IIZ%6Q&bq4gs$*D>OF1<}w7ss6Q__9Pg z^K6@*bnTUk_z>C*r+emTakrR=(q4U?XF2=cPZ8kVBmhS0!JqZl8HWsnExD4ThJ+j+ zv=mblP?v$x4Uwsi`SW2I;LyyU{#2t{rI*{`F1*3FR>8b>J=+wgLT;r5Cs!`D7<9bz z%VL^q2H^p(=RC1Dqoguvam(_NEBy7Uwbp}NTxv?oibyOu@;%NbBbOZ6@dZ|99p#Yt zwM>=?PX4u8(bU*<*?)7Q1O|_M#oKuTN4f}@u7~AoPJGQh{-KaG*HP7x8lL4Dev{RO?b2REetg>8@T1OAT0P2chwQp?x`etk7oB#c995)nN8yLy$0Xlab(Jih4!Dwg zc=RxqdnQUYN;U@mW~}orz^)<-Nia!=aaMv8d9t9i%oHo8p%*U-3Wovf97M1HPbG@AEq^RoD3)HJr zZg4G2cv7;K$&HmExUBqFDd^n02A8E1B*tbu!e`y5jjq zYq+pHGtr=~&PC(h;Q)60kH=~sn&EWs)HUwjIC6OZL`jhpR3g{spDyXdwvVq8NPdnG zzGOWmLssfJ?|NmM9SI-*0s_3Y%xe*rUUQfT`uK5R6#<{?^KHm0>d=$L_vD6SAjp-O z9zXo~%YX{V#pZL+KZ@S*Eh-=NW|i);vrFQZ*1n=jO_Twm%^zr^p_%uFA9-Zc+*bmI z&APl7g95a2O^EAGnTmsR51W{(LzW=d$t0%QMQ4sh-}HbTHvGUcE}a|>YGSTg9tK{& zsyQxc?dLfU``%+(Ym7x+bl$Pc_@k2nTk8}aR9! zYE1(l_;_S5t)=`yS?O^$yuXVhR6S%4(daRHmbps>DcI@7ajt)3$gC;YN6G9YU-W}@6>nTC)lU|9)UU!5=(~J`GPC4>}vw>v=FoN&}~jRrCEv6`a~1U4`khdjNStd!iNSq9-OvqGi!Xt+eztnke4oWZLm2<&&qFMRJlo$ABXxJy4vRi zk?>&+#x-|3c}JBGQ!YI-GIT>_2Q$_#a2}^{6BYg%J{lDnvTO%@v{|5(`Ie06$dW`) zHuk_?bbu$*W=6Iej4|57UWF>*T>&JiezmyH?Zeg3HmA$P%>te#2Iov2_Nc?JP}_I{ z(kH0T^(aCJa;WB5W4BQEfr<){rV3LvsJyK*zjxnkxTZf{b+5H)_?8eQ_f}H4g%?#s zet6u|8^keHCw3%!u7al2RZ1u|EeJ6b_-7*0&o-`nOLA&Yt9!e&g&6V9`-ioh!FT>( zpC+FT*y3Idw^7jK0imOfx-otJucWEr7bjFXn!&#q@)=GK1>Sm|wL=bS4ws`dsM2oV zOOl^HCshZ)orJw`C4rX3AN!r!^=7&JE~ALk{K#wPc~Pv@^dru$O5@Y`d#HJ78sy3x zcW>?^(%Yu(%Z3{&=}!s?4{y!2=IT1TCJ?qwI|~l>Kcvvl80*P}#0Udhpy(#L{?`Gt zO;hK>f*;uVUz=@;!`kPN2aRmLRr*RHfi91=4hKIo0{h>eGWf72N$f<$0K2(`a(AZ8 zy}e(Px(532_t?_arRRsTO%k!55at^eU1-2K$M`to+_vmUdIO8|6mp8~*Ykz>PH(C6 ztQQTGzalz`ck@LybRO44Gahfh0zSLY*xq6}JLqi9%=(L@4YavrU5K3*Yc(g3UAAD zj&Mp?*e1nQcQv^}*pe3?j&aGX4GJ0NUc6Cc8+R(#f9l9jV!Gb>W$5-{p$f=9fFMJ6 z+i+IFm%%c~aQay(+^>9bFhRuo-6LsFB$#|qLD<_amtUr8(Yf^e@zn`c%9n9tU=zO1TGw6s|^AX%f z96}PDIm3b3DkLYKn+JldjODNI5c8h979IYR5tkjDNf=4-R;4_bCr}Pg ztT5B`GO*m&&S&5eZE7<%DDHD^0F4A*9BB~zli_^&eyN26N$2?Pp93yyfv|!p+VT z_=j&-Is%3h%I#=S zA=eMPu@@zUe}XB;xf#v?{Fk? z<=+$3=c_fhjBKixDLZ8tvmQmfr-wq8Nec0AM`z*6wE8eB5{W6sP588(Ve%F?kUF!!4Az(NWUto_BD8i;j1k1` z*%94iQamsBwIdcHvq8@~aeL&~k@t*sZT29Tk z$zP7%xsOyMA5U2?0-PPkDV=b=;S*MWk$E0DcE^W#OO>eBGQr}ne>GN>e!s1m+IFfp zvftraHZ8Y8e!EP9-=H!l&RpJ}U{rlY;i}{t^c#gvhgi~-%97pY(#02Q7JuPuw<^{= zVYOxCp5}_=x*~~nAMJwr>9jSLNH}BE%&Q>2m3D;;jnKKRE6rDmxszgC~#+8in{81^dkqA?%iX}h1*?y%w2=S}unw|U*U4cL0 zBg~u`cEc~yi&TgAJ`!A4{{E>`reju(Ddj#=)^=p-jV~K?en2YSEA;;0DJn4j_hb$Y zY@PKtImt^N=D=j?m}uX{m~H$FXq?RgWBJ^6!xK@WVB;nC31`RQFl%ZqKJo&`|NYK$ zP?eWB&81g<;_AmalT?v*1!{DicJK!$rHhL8`vyCUnD+>^_jfE%7xQnAo;T=x7z9@)}7CeD8I-kbG3UUXORgL;?FBz&M1Z5 zJ%}mMbp9T-SD42)-2+eVII~1ByFsyeX&3e zpp;&YF-IMKu2L^RifJ)hwcq`ye&6M-SA5xX$nfT3Ju{ zpu*>$Qaqjg6maW5^B5CpHFYXFc~(q>f`1@(fQUT=Q(;>_KkrL+*eT&S&C=V97vmmRy{VWSy#pUemqp%NRd{^9C9Jz-`nZ)a68Iz^q7M&22}r`9Gw?)jQu( zR)Bo7IPw{N26D&8c!`m=`SsVCe?btao%F=8Vol3Oxxh~Qv$~@BJfl3KZ%ignAn-{{ zaD5@;Ne83iFJjYt8p7wN*u+{--oq#F?N}_#++30(%Kyc3wZU1J-5#If_@8diKm0te zO{CjWOS3pPw1ekfI_Nk~SLoiK2iaq3TZdA%4%uT4GNzSwDwUdWQrB^1Lha{gANVee zgoYIr=sf0pySR{6URQbneX|IMKJ?KhIToI~V%{w6c4-e^x*aJ|7SGR91dUNg9`gW+ zo3dbAJ}=ch%>U*D%EX2W-eeprX1fy<Pg3Kik<(d`LkSnRIpRk9*c;7D5uAW%dw-n%}#Kc&MUY7OvF29EjtY=B5 z?a8F!!gZV1mV7w@sI{eBh2HVBC0`x}Bc_A-{)fT+0`)Kvm^S1Kedvq)9{!IX!}Tlm zh48d@+RaW|U$mnA0wwGkl)H~^)(eoJ4fFuAr%jFm8dEEdr=6bPlVY5M)NRN!XZGWa z3==u>sV>OnNvCIc-AT!Wh~-IiNzT}g!eDu#e1Y!aWroE3p2R#wV!-nPQ{+AL!s@Uo zDk0I4Bcf3wQvW;AamTdEjjVQh9{2o0b7kVJjb$HM>wTJCcBnyK*>p^3=a*umji&xx zwvr3$lVG1FPu`XL#*gRUTeBQhEVbNDY2H)gW(=Jm>9?MYi->`}8X(^~K4F(toV(%e zb(&L1P|(BXTKSOqnc4g-CIzw`VtTelcC~_2uJse*FVH5j}V<` z@sgXgwgkGpz-Piyv7DomqZ^ZjGvnx)ayQQmDv*0_`A8#}E4XgsdZfrQLB4sgB>++X zb^y*we($5vJlL;`P<@E34Cw(pumTVTwCsG-OHTt4XI(RB9gZ&A{+YR)}5)EjcnqpzZpy(Vk3cu_AJm|j2H zPlP)tBGZ?RuOlB;P6QRUJSsShjxK$0n`@#l$E%Vv>BIbeo3wAA>hbVl_#|Fyvq9!; zKQ!}4^NVVI1=36f@d_Y=Lw-kseo^g3e7SO9ePrm)vPn(9Z*B#17u4&duOdyJ*5+te zC|w0=S4e-C><8Y*Mm$C&*7&Iqrz$m={^#=mW-eoZL@<8`zx+ojh;?yVIBMiAwyNeX zdt~#Y#LeY~qwH!iboDIfach0AOQVkGRD&G-b)JEgNin|JSQ%fvA}`$F0jn4zyU$9 z!gdBgWO~EK481kLy4jr24=xyN#TSTP{4*5guUZX=3cIwQa?u%+g(W)RP&)OfUv!!& zyOY^_pCkKi##wp@2~<-eYs?OogQbmzt$R9MyYI07Fn~|i#$P{NSyQjGDH{aiFYV$N zt68;I)<-NBvAs4~9SZL$r+?aC~q3sCK^R&O%`p1s_UIL6TbS?k&P`wf_TYe{}P zPZ4>ParP&$7f~I-aJ7CKUv6T~EO_I%hwY}fRi5fYBpXudTz=aL!9s*lx_Hl}XRNo8 zfW?#=Rl`bXidPz`bJd5v0lt`j4&RNjgTAgEJcyk1({7(##`DewBGXx`;OBu`x+Q1^|v+wmKY*x@iFEl3A$n9m3UP1(;B96Y&AO>BV7!bYQ&iA?F6Z=Q|*~?g^cZ6s~ zwG=`R(;#%o%SGYi+<>F&G|64F_f=pb|AbBMUL;bS)N2cPEP8d}p8-$Y2>JL6=rIEa z-yG*7q@+)-!pbejQ{i7-UJA4Fm36rGgx{uLkBoikuk0Tgi%>{0jlB3*PFS{FBxR-c zZ6oRPJ(;8JWz7pv+kclU7GNrbg80hk3F??Iql|F$WHwd(o5^cCO42tnUqEKvXW*@a z7TX7*UUQqFFyW81CRSQ>75p#WL6jajTB|iHtouf?XVc!ZeEi-oVuLv)QAY*C!%Wc$qHorTx~|!!K-`&YIU{ z9&}&Ti9*h};=Z-JUgN^qi z%4WZwbbCY*ZEv!^SHNPjj!C*5+w&sbt{?7EO&}bc=*F|u=N()ZwlWFdlY#z6plcqj z9~`bn-kLq*;SlY@8|r0rcl)O=^o-HN?JM-Omj|(vn7UB=4}i}&(u&+QU}2IMyDIxQ zat2BaK7t}Xr@#BIihWPLWq%ggS$oflQxe9D3%Ak&|L!>HL(2$AiBO6{>Ua!Vz)hL>*_pns$F}aF%4q6t^fU#jzJPK*w%hqq0Sf{%ld-2 zL;-L0)KtnvTJ*6eoG+!2G`5O5WU}3CW^_=ci_j#3s?{Rib9QCg3{V))x;8(4C^UvA z^cEf>1y$&!!=pIjE>27V4MBk=;E{IWgOg{;-j|;%6aSbBY0-pHO5P?HiD}!EkG?BT zXERxjB7Yu`J*{2^k73e%Kl9{0H%CbZL2E9rn%iyS^=X2Gfu#D~!k@zIuiE^wd(Cg0 zyZw9oE0B@3azhL;KVeUz%$a%G%xPlnAz7b&waNIWQe2?fnc*X0X-|GY|?K1|aeBR`NUoa1Vu z8GJ4{$T9h4^Y#xfu}WmsNdfF|092!Ou1$eDT;EeBWExr-LSSV)xtgwT2Qn6(CIrQX zKTod9z+CC5ZRXv24d;dHw8t(XG~R3Dk9d4;IX^!S9aP749Gs_5i8H>9ey{o{*F>z+ zTy^sCuQf1u!T1d)HYI10bFJMSmM()G9LIH>5tUEYynIlDqq*q?AyzK;>C#)E^NGlB zehlnU+-CGjST~{loQ=bu>jN#7&FHB1joVMcCdlBpm){F10fvoVYdh4jD0BB|igJ3{ ztsXP2MuW7LKN_{5uAL&NhSI6r1Qg?7dFGV%VMU00NBcV8gtNG$d0=XrK7H_L_Ludx z24lPZMnrm?%`n|^yc)a}r!aZU!wy)yTQ+~uZ)I3mdrx~INDpW+?lSqX=+{ClvK$>N z+#vmB{mz`=YrXaheg>iaj%>N6<-BN8VRWE%w{GeB<%)y+cN-5)kqcN@_(1Ym?fob2 zgVF5Q?Hx~-Ai$_P1n@m6h77sIH|@zsw!54wboqO0?e$Ycuw8jBDaUdZKh^YZFOqke zeRWjUZG5DU!`Hm^;Lqdj2U3)XXYl--{a?26g9R|Ts!IzYYOGxL18QlQg)bTk8aIqk zm<~GHYVJE&Dq7?7s}3@;4`?_*Xs})nebDSGPPfz}f5Nx@=c)NUYZJsZ=~eKi&%=F| zvf<0`<`4txXJVz-`~c6yYOjHRNxtjDjz7E1+NtKJQ^Rg`Zbatchxe!Bz$jy1A6ZtF z6r8?}YjE2zAqB;zZ!Hj51y5_`IM%oEw$Ofce+J_d3p}=C?5nfpFEZGKd)ofsDztVG z7JlTxyR+O#6+G;N6I$R5Wo0ds3IzseN zq#Hf(sqkkqZ4)BWcPSS`UJU7^klTqOR1m=bpi$F|MZQlfyUR1}4fF^hHP+}9xl(_^ zIA@}AUk0LDnmOgV6pRt-(c2t%T=iK^J;GLfSI|;CR%7dkQLOd~FSa$7Sose)@fd=J zqU-_a`5tLgm%ea3Nzm2aBdg|(yeRWU{Lwl3@;#{3X8Hv74r@b;tgsljpWd~fK>j<;%3>sPt(hHA(PHhjp zg{M%5#L|Zx;db|okFMCM!%KS#?-CoJRV#-APPPgd@-*)eDX{I3>1&TEmc_VT@uibf z_OC6~gd+wTDz*npHg0?K|Mk8j1Hx#el4Vz@ZN)DYi25cA6vL9on)xYCcg`N z&mMHn?&^?#TxF05)%c6K&2Fh@UJ|SQPju0)H;M6Wr&la&5vOPH!>{7Os^x$&Mt}1b z2v(>{%$U;~Z72;WmbidLet)U0uoqUdZRnCl>X0J7(p%jKs-mno;)m-oIi7{8gAs0N zB!m=kU%H9%pHy+e>evqJs#j%{)U6K$-@{R5;(L&%*jc-^u^b~RHs$~h-AF#R{Vr07 z!}t$8yU;@isEvneF)NqQ@c>D-9~BVGF*yKKV8HV~nZ`?0VZSN5B@_OK5Jk5H!vBzd zk1hNYaFb@H$PrtSEoORtfTj>^?y-4)0&dV06y4GZr2h--8-jr1|HWHEsv`D(h$UDl zV*dlWyLHw5aj<$#-V!ziN4J}W_h7g{{M*%aEj^g{m6yFiEgo$Pb-!`5h~}*+IzP?z zku)o-t}^VNZ%YfV$>>C~*E}wb7Mbs5=27u1??=Ah&T$->0^5Gk+$l+ux)A#)(eA`I{c(O?@p z&IY`)-N4KKVDJ!RqBzG1(l-zQTaHa1Cy|OAOZ!jm;ngM?&Xf-k(B)Rp1IkH;;x=?& zyqqFLV8?U}zN3f{WK1xgKR{AAy|joyTQwoJ;Xd&QA^&=z$d6#IaP}=4QjsINwdR&z z3OA*hfA|klW;Pq5Ps2+Cusf%Bfcc-df>)sj7GfR$EMF8peHlX$M$tCSmXa|xJysO~ zAG|_O1Q*jyeJR1E8}#B}WuiX`F}8!Z-nvmy4{y7!wYSi^199fO>hRh+vIWfXZM%_s z3CnL_#bQ0keU32yi|3jTE$r4Uj02w~>#-X4x1{JHGUV`C(fy-|$T!sFGN|yv#HEzA zODsf0G#uNDuwrd6yh^r|BQXxke5hvaR;A z3lYWs6AKnuX>rHir1{Ub*g|;7(kU}8vtb_C3FIBXjt2tU8;MMBW&Eg2`Ic25uI1O7_;*uuREVOripoYg=p(vF<4se=%&$FfSzXzA1+8Y8_nZrqT^sZ9O)xD2-0~2OlNKJQOY%3kN0+82jA08JjSrR2yYWP!7jk^7v6VNAWdA!wBNAHIT2J9k zmIT4;THAoeC*@&*^@L7SO$%SVE@vcx|IzLTPV~;`yhmpG<~a1s zt}R_k0n51dOlGpK^AbO9^W1&XarZuBW+?1*@<&n+bVbk3T+?(%Bf ztS@Z;a#sQbt^HC@QLy-^PE7nduh>Lk9gJaXzg)(xP+{QC$HM@9sh+x0Bip$2lSR`F)@dupsVp++ADA{6}#Gf4O5 zEkBU%9os58F;IJ=8r$*&7MlOlJ^yF!+T;-k!kS1CK~~S4Pn#QRxu3hLbP-!5wPAEo zYRUeP5}!YG_!HD?r1DoyLvHB`O00gk8!|h)wl37Gn$G@U1{yBzTp1rF`1*u<;tg_i zioIwn8km)OCPCg@&FabgUgev}Gw*7-2=>tB}b0XWZK;y&b;AD=Yg00RmVnTjjUaj$vQ~rK-zb|esF_zW!E7Nd4*}e1UV>|wdCJL*YPU4mhn;kVTHELZ;&1)>)K${BBN5&XL)#(=m; zYd&gDRzRsRWTMJz75cBH!Y-f)R&gV=LeoNp_iN_=!cT>7KB1Xv{y}4h8uv&iIUmAD z5DxA#I+>oZ;7Ab>7@75%{ia7oy7h1<1>=@+pPsi@aB{TlwP z+pB3EYm+}Li5an=&L=$)h`&7mE8f{lab}j6XTQeT(0(3=>P*EoOQ&k6T8-gLK5s!>;o7Q2aE@(pBe49cd(zCT6p%c}CJ`a@CoIn5$LnWyT zAH~T=e4cRGW-ZE+4uM%GP57pXroA?9(NrQ0_B^mtOKQ89zUSN?9Vs;4%m@#5US$v; zKs8@04bV+It6k0=#9w@u7xH|=In74R%YwUM=M0pmGg#6~_&YdB6|CI}JGH(fm6d{f zn7K&qc?zUGxAv>7OMvnG6siF){Ha57pfgVoh*kI$DNO@&5mRJTnr2?0p1GG`vx&4D zI+?0lZ3fxcKUMete1=V+qAs!}`=+tnp*FKdBLSo**Cyz0*9}}vY00~#UDg@`uM{BG zz>k|Ro0vI^3Ke&4QJ1|7s0w-MaoF6?dpGg6MI)4}o1K0Ybh3gIq@WM$-$x7y?lyMQ z0SrU7&!h}0l@z7$WHMMuu!}6~Tb&O)Yk_vpBB^2C<+|y2wNft`Pg!PDT^%866Q&pi z{H?8GZ^Ph<$LZwHp~rsUtW4O~f~^Uqu)pLsgZV7)kLK;U9r@QZZ)Hy`pqkNxBl3;o zz&754pIGV^~&*6#4(=w8r>DpGoeVRI+A9=Vmw z3U=Ebq(1@7qo10$(>(xlvZ2sfZg-(KMkmSFXJgc5VwPl2a8Aye)M2Hcuf8=pJ=55G z&-lbjuZK{A5f}ORKS^HD#cc-MXwr!nRuZ#fb#Jt|IWsQNREZVh!z8|{jMWh_L zrolK3UDcHCK#vsjYXE+nZkmSw{=*_8B@Lyk-;g?bC<5ITq*?b^)lIc&7~MtCw0uzxkS3KDV_r?>rA18G0`)h& zE*OjK!QP_31g;R9E&F^fK#u+OIrkrOUFbQEFBV!eF;A9~uL^3~0!zZp2YgC+H9}U} zOVP!@((ht4hH`rWrZxNmk%u5W+iz8|C&lEMP3wgt8t{&jo0rCRL;Vm0Q!vj}S z#rYs=C#F`IOz8)CK*4!~!Pp(xjPOWb5ZVhh;)Et}^ z{=Dk;Ms17C1bL){ogJAFCKyd6A*9A2KBNi<6^v@apx$uD=gN!o^zxeqJ5FL0Wny%S zLJp6kbMBSppP`Z-NhwMTN*R6zG^V>MT~Cyim&_iyWw7>HI#?KhKHY#ne6KT(*AfJO zR#=Z88trA3(0&-e2a0YePpsylXKoy1bXWzVuDNI@&RNXsVE41hBZGvq?qKEXh@&Nm zZ6ZS*f4?O^A&={4!<3P=PVV$g;hwZr%_SLe&QWi**`8PXn(bTGJ;?n|UGLA|3%jO?Q#Z~k+B8v*>p6!?IQBK(*C{}XFU%Tqk~7d2oJQ{@9P zj?i)saeO8De<%Y7?paEsl)h1bS$s@dNW(o*E%i8FCh=3-vi&u1SQibvZ?m z;@d0U^|Ql)k3oYSDr5uQmo?XEe6#o-$V~oB??DPodox%m@Ue4ZXpO0X!{-8}z~2#Q zV$_@;vonBR!{rpdZ@o9UU;mBO0~CpeDUn7(-ja9PzzWRqcP0 z`FBCSX{KCHS7@j^0`;GS|L`Ujg5if)3x1d^Hu(9&c?#bcTcxh$+{?;vEW+Up!G9gA z-Do-rYJu7RLi+ozX*UH+&bJBR=HkhICZJ|mi&fw}9;ib$II&>$|ECZrU1xMGYG(Rl zHPt(_H92nkerP#L_YjRT4=pS1@VK#4+^asFHx1L z_Zn2x-lMQ?&C8j|dqY}UE1<(|V(E`lOjPNxWb)c)R+}$WbsqlzUWTd87bKHcKX8XCO!QTVS_ zjLVNk{_xQAXw`pnafa>hd_?~n{G+Ri(`M~kjH8y_<7@A71=s8b_kmw-gX%#6`F}jO zDP!bZn{E~N+<6KAp&2v?m0SUbKSLs0250dlI4yF!C}?DB@#e0I`c#K_w^SA8RD6Zz zI7*#lR<$C$YqP6X!~*loz|UjnT>UZD?(_KagNs1VK_kZ-ZGG2fT$|GWc3%8z?1`=Q zKB%TqfJE(4xmMghG5J40pV1d6p{PUZrg68NrZrTyHb%}RP_(*c=Pa_Yt3J? z=~6#f656`)alenkU;@>oe4czquCf-HSxc19S70*N3+ zL`AyPC{?Kf(nEqG0@78a6KT?k(tAKU1R`BP2vQPy0wE-Ult1r(&YUwld-m+^+`0F; z_nDnL8;0abmT9Fx_~A(J+Y`qL6q*n*G?2lSY>eN(b8tIZ6Tcrqyqz3_-)~}7tQG{T zP5g2Wr`^Gg8NszuX%RmB_y8c%cavTk{tVN7Bcd^8)c}=6OezUr&&*dG%K0zi^kT-WD(zT1mYm+Bx z(QRE`>E%22u7P(CGXpEbM7$9eRwX#zq<)DT$tI|LtFV;qo$0ipMJKtZYEux~S(Sz| ztnv_-`et#8P*>2+`F{rVD?+;`U1My(Qkp||3cRBC>T3#TtpqTVb{;~mWQbG9 zA=iqgt8c?-#eKE@9PU>5N;_af>$C2(ioSG&A+$moZxRZHMv}#DEFIUfV>vfFwohQ- zLN3r0st%Sj6V^9FMYW;ZwDjj?zAU&7T=152Ey)O;%*T&!LFj+As>o59$E$HSYmlY* zbf{0B!iSdlJP$VGsoaZ@pm(T>nImtC?!Xc{u(*HVLVB3;dN{calQ5&) zp@_HI62N4T%SbVWIn}J%udX(3_!;uE z8VClbcT^w{$J(vT{Gm;}_Kg*yGgiBgQ_6+JNOb-VMaFMKTqVl!mMPx6qTz@!quCEi zf_u!=ZYmG?RI+&L#mpH_64k@?F)_)aMl<32D;Hi=fYQLC@1yVd{){jr&BQHZ=g!Z& zaoe|vQ~$GRhv6iMKYrTT(DRN>u-1Kl-qhgiJSXbIk2?PNC87O@o-68e>3uj5ktz>i zoQE@qaL9eCFN7fohc7|2x{mPJ7&AMEWX5ww47GNgsUT6YPw&nt7$V;!e#Rm`!h2}a za%tNULkmU$<^I7R7jl=ka+EMiUnM@Z->c$2Wcm^&r3?^;iz?riFG^s6Hp7b*AXl{9j_ zmAL9SAn}LmYNFZTCP_ntL{^V(8*8(TC~<`Onm?dBJQX1YkG-G76kjoeflLP;YDg8) z+XV{na|rW2rJ`NKM`bHA)T7HeN8D1R;JuMUv7X{*B-Odb}-@?DC z5$v(M=AvG^@as^uAx`uOUHil1@*C{?d=27m@S8RG%-u_~O3Ibn9HiXINC-yOq9L=s zQkdR;dcpVRu;HIgsPr{bU~5h5NLl9G6K72a8+tCvmXIg)8}(2X*Yl)|gy3*{7Nh0o_#Y-`#r94lhWWJeJbkw-2}{Z9{iJUK*bVCT{ch zQGWzdj{=Jq)oo2S_li0uiBU)Xb<_aSStawEsZ*G=Qu)t4H|83pqYCbyn;pGH*N#3i z!;`DzNx?ju#_h<)j>%)`!9%BTxp~3Om&TaFQhAe1^DjHk+doj$?{!QBULUCP!aP6D zGMW*0m{#Te1-=)quP`;yd2 ze4&e&c8U3bTCLkS@L?HQ12+KKGmxGgUH1Odmjioz2b}#t8xJz}Q9t4wJgom9dHeyQ zGfQ5L9|}Vu%my7jwNsxoq)$a1Y7brUv$;Ooh*gQ52hpyP zmz=l1t;}_L@V06xP$k_sfjR^g`(ETpHENOy{mzHeq%`ODw#-CYKXd%lRuO+bu7TcHLJFNBmU5@E)`cZV%bmy8KmTM z(Ie7QGPA089<1JHOSgUt8G9)_-T<$WNn}7688sD&y+hSXUppJpnGeL`yx!>_Lbz}z zshK&+w6>Jv-1E)gre{8iAHIKT?`acFWaP#B#H1JGCOtj;R(U4%aUJ%Lgm@(Y}vsjZU`HgO_WK6mr zF$)G`BZ@mrc33&C^8cfWHrr9<-yI(kW=uK|qsKpwp})bUhE`06MCf{>^;97ePE7Kj zfzNxx>hL-`-f(wg%<*!wQe)-aEA&B7ON&&5)&j%G`nTyB@}@2L@( zCjD7?iwLRoqmI@bT`Da zmzo^=6&XUZbkv@@wrA?n6Mr=X)*W-}&gEHJ&s%z_{{{+GBZ323cCnO1_XsWAaLDTX zY?%wGEmRAgEHR*-z-sXJe2yizn`P{n4_wFU*MUDwXq#^051)Jzc9j_RYM3d*0Y9&u zkjXx5CXm)?_O60i2&wRjsheq)9SoPr_|T1`oXu{R%opS235nqrH>r6gSHREBnW=xd zRh25olAb^18m*)~vpi>goWkEPn1??4db=U;OM5aA2b`VU&eKyvHC&s=dfEN(9z67F z!2Ot_-q9ESq%NN7Ep>~t-ur`p&Ja~SZEJ$Q9=t(=mLc&_(57NliT3}{rAM@HlUttL zLz&aXWiEkq*qOE9%$lP%vpfsDD)84ow99d+R{8dgCzu_3shia0zT4 zT?x|3!8#C|0J#z}ReS@85|`lGoWpAaJkxwSHOhauEJ--20~rgGyiX&u*is1ep_*wB z5DWu?egD6>vti?mq+G%?*<6n^PCXz`tS3t`&;v)=^x*LU=!-X~o8g67?zf%D@pmv+10ejvf>kSXvSoMRj<=Poc3wBWBk`{Wy0zYQ32e2IqPB9P ztcL@7T3Y5h^k5P;YEP+j(Q%!Pe4;r4`C-26x-jR=KBd;`Y9?L>EMZ)Uf9DcoGcg$o zn&O%s^z#6$hJ{8MZBe#dVZ{hTjns~}bnlcInTV(h&x(-mUmvYN3U54T+{4JHu=Bw( zaTl{)oL#}GiGMa3e#+y9X!O9*pK&;$KpB*ReIL+)M7tVfV8rEF#Oe;4cZ`hS)0G9g0kr$(C%VDyA|!s8MDQNP1^?;b zB-d_)rpeZ9js>r{vJ(&Qy2MunY>s1af-X-U6(Z5<0|&((;X?CLUL`dSJq_%w_<@Em zJ4Gr-$IvL0PT3r=zd?M9e}Z^x_KAJYLl$IxN?z5XL(Y;8(k#4XCI&iQIo=p=P@i{S zZ%+B^bCkB=7W91n^Nv76a;?J|R&D|xKy=~Q?+L6V#;c$PUV*Hw1v5$+)k7t1qhu)r zCe=H?GS3$_v=z!3l1n(z3W}sWv9@9^h}RURO>KSQyrWgKGn6e*)Dm8iDRvsp&A3SXtVlUc zKxV=}b_GXClz1}SFF>!*WU(+su*-_mN0S^h%@;eiFOqk5F_#Kb{KXx`?F#Kng++8~ zMkaHDqiA9;alH1g**i`^#G3vsB`&8Tmk^P@Z0d=BNO%D-`1;SS|aDGqszo;5*g~%(FnK2qN^RBsW$bi7dTG8^mmdet0Jv~63OwE`$+-lX_zZ~Z##^tTAD0h&Gb*sJXd zM2cw7DSr~dff;VIl-n>aF9~&&(?Ycc%I)C?+8)c%1AMXGo@KCN6uP39X@TAG7{ruh z-~yQYY9&bZMEC=yE%sCcBXyI1FLw#AY6R7W9R zPjW9CcDddkK_u`nj0ks8=Y`fxv}lngb?(r#LRwrfJ79q3VaVXYvqL$F!ivkFD{ZXB z(E<#a&U6Lj_p2S5q4Gm8;}~RgH~eHrI<-D&Uku1e)5Nw5tr3AyKrX1*8h~;g z8=(QM%EUym=2N0F!WEE7)JKBcQLvFVxEw4y{=Ly9ru$ZW_ADk*7S9C)RT zpD37t{^Ilm+U&EY7eB-);-{BOHs;4oWj-9jy0h%Ob3gzqGaUKF7eqM^o zOrN6#yXV=&?YlY}tb8uL4O)Id=+EG8jE0?I#6$&if_owF#URV~yMmPg*P^T=VZ)Fw zJ4c3@CT!~2FQG9jN1k1ckvK&}Y!~^hVMcONS8`Oc6R&?_iy@ zQGqr=%2{l1?-F~b^5{4uhb1ZNNPY#R=4tteKN1Z}0Q>+ZyeuLL?+g?T*F{H)fqSW1i3#p)6CfK!`vkWofHN|CIZuGwQcWSp{$gPlAs@Ttc zZmo3cqbJ}u5GyL@Vj5L8o2hV&=Yp~mXBBDOCjkAlF@d&|G*fJVGvOg&4F!njVfHS~ zXMlWG(opJ=fai?&iD>r@L7ECtLWl&XhzudIS?GXCMBdqTfLkHViSeZn%7Zxx%%+;L zUL4PkVNG|+K|n;D=RcS-*zvsYZ(Sl^J%I}aE{*0_2HTv64?ryCXd2iG&wrYk$YP)_`-4U6AC$ z2wubqco&V`@K_9Z3Zg;e{;x|n2tp{($A2(!iYfNksRwqxDKH5O?;)`EOOnMNI~UpfSd8X4 zj@S*v@|HDcF)u|~zf*UIqWmJ3iCvlsOvTff6N|}I6UASci;i71cSBkn;3TUz{G1?e zd#znwv;uRgv>6z|r;TI-57X3HH_hYrsUN55U0A%>c8!P;nvq!KY&%ax3T#lCSo956lrX=07Q`@h+1$PIWl5NHyx#2PYGUowObXf?j-C!jRGudcFDU4 z1ETQkfFUiB)1Y&VGXdZW(91MeEVR~*!Al1Iv#N0CP^%N+n5FF+6XTTqXdssYX99cWlQQRlU^slj%n&YsPJ}|)#mEE&s*XgbVs<_(mDb&25 z6o)^JVS`@UIIkIUa!Q^sv5m}(0<-5)uV67dD!#i*^in2=ywl>Z$~-_Q65$9(MuiUB zhKLhuJ^u}7!p+aa;;GH`1m6tY^sg$&h~3mLK}B>$G`Od&-iAoU>DhvdXfGD~y1*yo zPa)Gn?KnYtL`_0?CLFi4@QQW{mKLgsMfg#-S^qsJkTY<~7>||KE~Jy=5`oE6#S*90 zx6p7F054L3d*_HmAqMyFBe@XfVHS9aV4`)wag?TOcyu^%beh72mduI1111`;A2r}sB7Q@0kziDt@r91dZGyz=8%&}%L?VP6 zo1PUG5rHhl_ILFw;rkdM*F}CUPc|%K3H*)jh#kN{CqZukFPP~8M-6k75W-#lm(b`c zhTGgGz8Hn5O9a_0RlJNi&p1|=fAfWVuXl;J6RAt9_NRdFtpF$nhp<3a^v3cEyAAt= zB-iETS8z&hC^u^eI6IYZPqw*V$UDEtM-x~MPK=t-w>e~!cW3forPNqmI6*-ZFvDGT zk=F0zU70g?L)5cCZ++bt=f5%!=_UXLyz|N-t^%Wkw~L3(=x2d(0`QJvl7l@`int}T zVkf)|I|Gqrxkp;4g3kN~DqaYZo=nW7{;!`Dd>@!Zm{CS5o<>9ZB>wVy0{>J(8CTYt zmxMC7{V2#BZ17Td2BwE3aYTy^IYn{8s%y?Mft%ni%nPXT1t5TCjBV^&66`clM9Q7U zT+Ex)Azn6Q@Pf`QzNhXe(%>Av!)+?3xn&RHWHQoc=eS3haWP$-O7hA7kn9uzY_~H3 zxRi!6>{%*aLMsBU$-uhQ6#;y#imZSXvtqmhxH|H%S|-W>XHUQ({ZyHdDqyP=87|5E z$MnJm-=(lsW1><0nnU=2PjFJ)R;J18Nt0zZ!euP^&Zasmq)gAic*ev2OoIS!z!4s# zRymUZ`#^oe5<7xJe!GZDPuh!Oxidc$;B^A}KT95@>HLRGoUrInaWcL=!?2XDjpG&5 z^aOVEz*tCzQ-uBD0q&(O9e0_0V@C9R1vNL&23z%xVJJmVQpuiks)_vwZO@kS9BVT9 zt6vdTa~1fRs%1#ODSQGvN-Go4y3mnGr3tkC2mj|Yz&tO#d(j7gUib=SDg*0M0RkT9CHqrXLe$P+41IJ^fKQ1P38#qZ+iRWf zQ;$r3-m##_gymsz!;ocjtmcgw8YkAbht+XJ>my>WA_YPa%tQ|EWux|vvvKYf znaH&PrnW@~+8O!_Vtpa+RNk9rtZ)Akb?I>il9v@mA>UKO>l2Xd8TjhxWH&}fA}dE7 zh=L?1a(dC3=TV>^e#eZZ#!T3{01W$!OP|KAj2VVhCt63kJLFRha~Ou+ZI|2RiOK(k zr9jGag1G?lu(yeEmEit|DWOR5Aw(>>FTs#e@(B%}W$KwGp|r##la*J@KmPEHU$hg% z^&?>xaUx~_61rqM)s>n5c|G$^ZbfDeRT?Yyipkbg@>^mP6AO(bBHpj4rycS~@?Z5} z#&{F0TbObCIw)jiG-i+{BZ%)~MUb*sL$5v15DVXxuwcz`vO>u2IXESos-8rhdN_yV z%JWad8Vb?b_t;p22-`XXTAyy=8bnpQ^@_QZQTt^O7 z(T<@wuk;U3$g=%w#LiJ2veZGe4@5AUStqQxkZ48S z?jv@Bq`c!@JZ;!id5GmED{-#5#DU@k0e@QlzEDIzRB$t$!W2F)4o*BUeh zrblu*uGUEO9Gx&7sqM@rkNbSmph@_>xqlSL+OOP=5&feIJllse%mn;LG8x7H%?lKw zkY&BdKshqJo`UG6#n{psU7@z?2M$B@o9&oswvE;sZK|7wZTW%wprvp+bn*mYkd>tv z#Uk;8T8b*?n#!=5qwL25h`%!aEA6lcssM=vK9)`5jDZc z?OjS&0AGsoWdn55HUuC5N-hc>$6_1k7aa0)aNo zrbc-TpnvIpm!LBEGV6Wuosh>DfShdrV!C(Rm7GIR6$j#Zhtz4zSr!P&{3p#c6gaWV zFXN3=i zi?UXNO{6kCV0;uJDtML*Q^1_wDo-@|&jpz%f&`+{-}$;T^e+HU(Jm3?oe9*X zMW_}mu*hV`j!3d?PNtv2tMk2e~VyVxu2N2mU@g98G z$gxI~4jSHdK7$-g7+hNDLOh2?MNJUv^Ot&2oOdbild!1d=Rgz>jGKS{B(_i}Cl4n3 zfq8LhM-j-fP+_d#9eD4>Ip!TsbsnZ10pJ2{jA~ptPIf~{D8W*wfnOWEGfkX;iPWcI zFphuZ=fK&2aEd9xE(3#GlAoY!u#n39hW%?sr4w+f%R~v&O%vfnb|H3>QSM5x3@Yyc zvN92vdiNgDhO6V#bbn_+COU{5%F^*G*e!}4Hb7{Nd9ehq zfi=+#(JI075#pbMrtjRT;zsLG08zmlu)!{bGc%WSpZ0dfU0o6Ujy8Le*`0~>X=UcT zJA@n2Cx(H0s>EQ{lHGrV5vLLES(^1P=9P48U{az)SkONd*HFMpr^L;|rRM^-LlBre9va zmE3oT^%VbSYp+)Tbnpxg=Luy(cxD4qV&f}7%_v;Y^L*<(%$}@d*yO{v z>w1R#IB;Z+<{&(QStB&Ie{FJPYaqfBw)hn3j%Sg+^kgW)V(p(S0^b=^x-U%wr_F5T zF{Kd|H}($7LL8&_uge*q)Ir8IeRXZ8!$U&?QCe-+UoBV}3kPw|lR((}WM-2acW=UV z*~{y14@N%*V51hm=nO{KFO2gL*gK+A^<^th-GZayair&OPCdPw2>zqUK)*@O$soF? zGj^(eAUS44Hc609HZP0+%C3*N2RJIKf6!?;xZ}3|X5`zja;G`Axj$@`OMS!`vOfE1 z>D}M9i|P&*xm5ixK?1H;K9AH#b6$x@7`*-R+WPXhT;V-~jxmEGfxQCnDEpUn$D&;? z#V>+8F2sAS0Bx=}{ql|dR4L3jRq#mVV1jG^Q7(ZNb5~aVv8Qd2(X=JQfFShN7+x>0 zI7ZM~w(;CiNHS|HB3v6hO==!{L+{)8$Prf2@h3W`h?w?!!Xk$h7~SGiebg9r4nF=Y z>o^XPD*14y>ZtBz2IgyvMJNY5J;m-Ww-n6ezF~d=H-nG5wa0l$_df0WmcjgtRFJuB zb+@Ih#JM$WQ(eDCt?YH&RvK8nvFgMD(IN-NC$b_3{z)yqFf`5;oc%WEMFD7Qw%UpK z`#$3-+U#B@yh4|xko+E@&%eWmG+$y1!P4BQf;N@w*Gq-8ca>-4 z;|#ZL2e=44KJcA!D*mzvnFt-CcS%O=GV04O*#E)}4IbLM+Td=f@fcYRqz&QZCPN#F zBkV+19}-gWvHQ8@5W7+lQ%oXH@~p?}^N0dqYPs8IY6-F&#~|v^J4`^zeP_8>Rt$UPx=^(P1Z=hhp@a_nJ6lS2x(n zOhx6fEp=t#6hm)v)3iFrI8f+@_&b5!M5fCjX+DCaDZzN3*5EAc04|x5D6On+2QRkph53+vpCxHKON%7C^w)U?nvp zN$|jGx2N-z4^lFS%$wIGLT-8gaua#=-+QNESgH71^wMICeI>uO>@QaLjFD%i$@W`* zX{Sb?yvf%(jw5WX-u3+<_<}EPI?6nyql=Ma{N|;D{;O%RQf2$7l$gL3+0^ZG&9`p8 zRF~szjdiMkKWKRJ8fJ*;^!$+5tCG~jKMrat+biQSiB0}(P?~-wF4gLX>671{r(E-A z^zfz`&&y@pL~@-UAv{3ND2}?1pDKwo0i1rv%YsegcMo1i>p8%l)L5sjTyBz5xoCvs z+`>o~MZOeYw&yS4J|k>mhC~}8(_O>|Zw^O?n1!PaAhzX)?ZTnU%7GYd8#h7vnC;>5 z1fd@uCF509Lp?Hyu68uYV8Q)j<47&$l0Nq&PyC$z4VUZi!b}x z44JiO=-j0IcvtqO%H1ePIrqLbNynrMk%vr7593m}kZ*z3*%Z5YRtu!CrHib900s)DyXAPXMDd9xDqZF*Zx_HNA z4Xjj(NWX5sz&Cntb&R`%s}$aNbkko#d(>iW^;d@3E47+mw~^nnzT*MwNSBYbegi^1 zz98K~o^|W@AVc)gOFLwN`G!g0HLa5%ZUbGpWAfHsJ}8L)uPL z5zC!=yQjw7i!4ad8i|3=CN+1z*?c&t8%$T93pbxRu|~Y!^v9quK_;wEL?!O9Sp4nI z(%$<0vD%1V)vg01X9FWEK}u}8%KdXlhs$Sr@(-O(=jctR?E(Y7*O4u1>CfS)pp6{Q zit#a_x_nQ`O?-I9=K`Pb?{;0N9I2L|LW6$3zR<@lM-c@FS=X=zbzZitPrOiNQvzNO z$>X!6uB$XwY?dAV#7QPTv#7*Y#5omo*I&(S=S)PL=^Xbz)q?RduG+GE9Kqbws+L3B z?C@iM8Y#Zy)Ce-l=`7sWO6_seZr-NNb1m0z_2^>QS3%ueFY^~;l$Ws;rlVx5dbS}z zoqtqc(S<)LnH%T7uh#9^o;vNuRsHGx>l=xBFMV%ss=ivh^oGAhR((xRBGp&rYO((3 zkp%HQw~pC+e+*~%#gnVw-g=W*uB<(Ty)fRKB60nj<5dBinwRjiZ>8m%DaBxR`F7UVHC5`oFG|3z(v{S+Ue9~GX zRn;^eB3$?OY?ZN?`QtE|G`;}cpjYH;*rm4D1`p~!^5_nD$uV~{U7)`CR{xX8EHlk< zdmH^#<<02VpbQ_bLko=j<7?Hpdi}ott*$5ohXBb#U=iUP)wuc8-6*}EiuMK{!9k~7 zttY;SHxG|Q8nweTmj794I3xHcE;rr!=B`+=b>A~LNvr4JHi&d0kz>lR@r=`7Tdbz> zLWL0@LcBW=8eyDy)gE3&-%wrOY~PtX_CS9i(RobleFNA{289+Lh#Kv{wXreNUY!m<^b_y!f@SB z{Zo9~quq~es^jb5ZFQ4zKX|=f;4GuH55O<@6JGa)uQR0=+sl6mA0mDn_r{WcFrz{Y z=jjUsyt!X^Uy-6lFJq5q1Kcb(7K z%jvmX{!5nTAvvTDQdEodUi)n`>`xOKi6C;aE2YdOC)o)yn zQvUU7z1ZP#;s8g}LxWfY6)&zahrIfe&H?OV+oaa(0*@^->&m4+52qTYS5T7#gV#z6 z?;tHlaDNA+TA1oRuZzQbwIB9FuDFIEM11m-pXm=TJ+r*__k)sTnW;%BNRw^XI-rEj z<5s#iEwOnGTFK|b1>S>?aJ=OX< zXZU}rmmFgD-uKv%9{S5481s)%7M~*7uhJLGV67YE>?78H#Xva%N(jEqzeUfCNXSdZ zJQDTL%+?uR1zzf?O{~nKtM=9@lO5`4l3J?n&9$o?%2+$GZdQ|+zn+eeS3 z&JOyD)4yvxAGm&5a*(ddNa=0IEt(bWNfgGn#DC9In0FO1+3?Me`8)sli(MmHX#Y`# zF_JU%4Z>zJyx>ge^5$%P3ct^5cmQCx^?VzD>;rgQL8qOyOL!nKTwiimNi{jMaJp9d z^`b;r(v9Nd15wIZb&5P7f~qwhTtI0Ax40=(cg6>;N8A!|ul9)vNU1Iu2zhC2DcwOh zYP;C(>}m=(`khpyU;mWWDs^z27XpTKhZOC%gzHH{Ll-=}73&6n+n)Ap$^M_{v0?0k zG3|H$&kJLd<2%!8n?@}Ap-3mGp!X`S%CK#$^o_BrWs zPj$1O7hyOiKVuRTfh`|~C1c4Sw>kKSuyTL3!_>y>Md`P?M|=Vb<;_%#uE=F42|S9- z6%~aiMMj)xcog07=zVI7qt)oj(U72iP}`_;kK~KyERpetec7=k@*-hZ_sq||@v**Tor*IIV$%)Xd_Unq$FL-P*z0FRr=1tsl}Ki!{q=^}@L}4RL0K-`+c;x}rR# zRrKd?m5PU4@4gVpuJLMJbtPz74wd_%6kJA${u&KV+&jN>4mtPD*Z0G5J}70pIfK{q zQESV`s;j@B=!XCOt{M|`Ztk;Mm3SQ}U)!=c+MND!q?Ohbg_ganALb#- ztScX^cQf9hPhn5|DD&`c`qT7uEhXQr_ioIEJUM>B7pv=_fiYaUzl!N|m#a}_FjeyP zt>3T-a_?XJ(blJ%qqC)MMJI+~Jl?l>p3lstYv}gZ@$`iYfx6JX zleUq26`H0C?$^SeD36PqP5xO-2(#mn6DhB-iS_=(^Vs|8h>4!%9dm6JtENdxBH_}L zXH(sp93$KDy&nD72X4*h@=STQG`4h=hpO{ElG=Gaxt^hpYPui&#lC(qC7vMYPZ77l zTx-@vbDqrLPFR`Bz8d#Mvj?ee`?jz+GkE@)QgY%Kes_Z=53Q1;;JbY^`EkWjOS`*$ zr77hTexa7EGu#^jL|9tV%jQGG>#tif%nJW{O6GWYEW&UK|5zYb%F;$^u)!Z-n+6W1 z%kRsmcQnvijH4}b!MV}})W8{L3hTT(RD7QTyt>zJSzIFWOKPP38OLk)pzDg?{7yzB zT4veh{We-yIa=qsL2mkb{WHRp+;kN)^@U@z5b#ao`Mc-vjL!*=&Xh|$a<$1uiK4cK zY8;h81$=Xz1dilyKcA4<9aWY3rQqv;wpCs+tLGf8zbK0J#V-X);GunSl%|2YTK(>j z2;pR&@|%rOr3vz9A)e2Luf|Yi4BivQU22oE(kVUt7U)N|Tjdk<21biA zdO5eS{pu=`zTceQKT8_8Jxt4PLY2sl2 z9B_!zZ=Q3>V~Ah>3vECoiWwa6qdnYeMYPal64|(wo@xVkyuY!ZM9gN*tua($B{Ye-pk2&ZT5Tc@M?P+QxJoCA+&M(T`W#6!#g~IkhX~thNfLMIbE#Y9h-MbJaOrQP~9 zdqwbQjpXvbq;S0hEy?=*J*2-@mZ-mee)(OA?6{Q@x}{HG%h$6dHT&TF=!B;bh3q~% z^Y0a!H$BpHg7aNlHqMQOf7flyytmVuTIwERIifZxecq#C-t(z_SrC7CX;60gVb&(K z7t?nybqDC3<)<^nD4pK7ynM$CFoklsQ<6os*R7eC|MliuuX)oz@|#tP_@VMc{Mwhh zqZ&b`8KOl3$i|P;*6Zn_=91WLsi6l&L1y zXgXPg;K3!Gj9j)JCO!+a`z%4WU)EU^w7Q0)GR4DMDq1NWpP?yKO z5OF^1ED5p1-TuGrf0NB#9Yji^vy#EZHm#2i_zg@8%ZB9E?w{2CM*95WOd(sesm8?@ zlW%jAXb;VgO_eIyF!|z5y?Wpk75T8{Q^6sIOLJjr794<88JkHf>%veJL#W(NI6VWZJ1*zAacdw>CsWZnJ<U#}UihoTef~U?w)&qEI!*tOi z2QBWbfNh}7WFcS8%*4Ynepg1>18ABju`ye~O*eUEm5H=GSky5?+|+MN^L=a?adpI5 zw>suCr7W%``I|(j_T-~#&D~q){;p+Yha`@7>U?(lnk@clo@eu{QS*gRLC$qZL5rbe zx_*@D2R8K`wm6yVYKHW~a*VQ~?~I9^TX}@adgzCd=)>gu;a6;vzj#y~K@0IeW}m|+ zf4P+%53pq{Y~_69&8Hk~=J}j;@;l>4w#?O^T+n?IkP9~cJ)fZE3>#u3%V5oe7JJj~ zw_c+>QJuqxpKk|j33Y&r@hdtw4@O&40CGl zbjkcAtN)@CUJ2!tI}(!RYQsJ>@*BfnA!$xMMw$=TOdkOY9L#;gs|K<(Jh+|tNe7b> zVxGc0Ka5gUmD8YQ)4XDy*iU&kY>1Mx&(W&2`XqB}@I%(YHm*$EhEB)-j!>V|SASs~ zxGY~jL)R%j8rrk~7n#$e&dhYR&D7w`%Uh=*L)sF4t;ozfxCZB!xaa<72}V89@QFP=v&C6Lysp!B(LS) z;bY`zx2C<4s= z1v3fLeW7a)QLtD~jF%q{>s60BGF$y8%frfq^fym}tUe6V4=4&FKdQMVB=geIBn#SY z0GjzeB{~PPNGB%S;_d_>6i?o=wO$GC_bD{8JleY+NE#-Sh$EjW&6(vTJ>^?_U`wse z+eh#40VvgyXJgH-!OXq#X4l`Piz{Zb(6TTeUFNB%t{kT=iDFZE+wG%jk8SDmk7mfE zA9u(c?Ojc@BFFNCPYR-@*LveA?`a(E+?tMwY68Vx?dy6nbMc2i$OWXr!p8%_=gPKX z{bU#UWl{YL_Z7@barN->v@6LlP1%Li?Mwd-QhasOwjkh7XQsP_IQ{Yy_y`x6cmk-wNTBq4gd1yc%~ z4M`Zw`9R{G)F1tFS(-<~ySn&C3rk>&Q39PtT$YVP{;TBRcMFY;E!5)NCE#OW=IUMDt>RbrhXkGRqQ0hd5%zrPn^46cr6-LbqT6{yzIZJLX7 zZPpmQN0~U0XmLB9;Z`9_1tR17~Z2C^S*qM z{XQFWt@-vfI^1_Jvz>3q=#{q`=Ue!EJNU~s-U#76XFETY7Rg&^JHHI!KV>`L1pn)7 z=Swnr<}J0|*T018y=c4M%Q#gBD^)W@K%B^ zxAFDht8DyFq~}>1e-+`cw}rnN{$H^1EjWLvmbt34PA#aq&!qF;pkJ!S>NRLP^p}%{ zq1ILJj~@p2*MYIi79$G0*zBhWY|r$3s0_L+uAO z5$Yc{wIr}h#d(;RSGC4Qaerg9i{B3{@EO%BgMpXe%FBBQI-=gS5VWTH9QCTI2NyN= z@iwsS<6VMz-P2X;tmT1c)LwU*uTnc`r{;yJvWZ2zyu+VUT&RwxaD5M}ITx>6;<}4f zo_3A7XCyK~uOd<}8@VSJeM6iG$+wfrvhMe_!t6Zk3CS<&M$byJmWVt-?y}M3O0%|` z!!fcwU!|GQwkmBoYauy0gH|o`R9Z?zui=YDzNBl6$*^BzY)17pECYV;g&`R%OI zez)$otguYMJh&w5W}~x+j6e&`8brS)!o6#ta<6yAmWjwDoi;riEBBF&j6$2t8l!f| zhTN$tWdkvSmSj~Zt=N4I_z339gVlVb(n_-K@O9z$KB;bgHCn%m(JObcUKfS6_o2P= zkY3Xzip|$>Pg`tmtW&8eaF4bb zEmh4e$@a|D1 zzV^s#V{`>m(iU%`Bu-9x{i&my}VwvPu9)ttq`moh1q?RD`ec0 z#;d`(t9=0(-Stvcin3I#*0oYKq`DNV*N;QS)2MT8X*Pu(nD(1}Bdbd|Xwc68v>MM- zHh;(O7mFP66G|%jEGL4wV++*}>`;4TFoQLyzqR=3Q@&_`TD2^J-+?ppO|J+h^Bxq; zSVHEKn#`zX$?Ey7?kC3KI&|;TD{F@+5PJQbt|P0ilZsU6>jZdzLb8R~L`}t&?5=(e z)d^wN`Omo1`x|?#>i9_!Hj~wwRWyuY2&2h=hLPz=zYFo~>T;%>)Jt4C&Cz;Su&3s} z-~_(r%g{?H@8`el3L3Pxo~{&m8fPi=_Jn#y8CXI)P%V0g7vr5P)xG-RhX&>iMhX%_ zt~XVhy7Sw!K^Nx4C-PmFVkEgu2D|1Ap?5OeMxp7Jkp&1fr>kMeLc=YCt*TeisfXw+ z@~!$c?xOaa(fg)mbf@MeSNB1$BWvDIg=KUP%kZl8_d@AbZ^R5%e${_eArF^2lq;qn55d z9(wchlsn{luTFIi{p?P0je!0m^n|+A`Vr`*&<{huHM3g(1o}D9KZ4%FRjt1Ry)X2) zpnsTHt-l7nHS|}ZZ%MD#*FqlveKqttDb@NC=ta<pI&w`!=JqP;Lw(EwV z-wizj`m}o0dLr~L&=a7)Z42LoJ`MUASIG5ls9OKsmEyV*`mfMO*>d?i=!MX~f!^1a zYo9?M2>ny&KiP7B5A;;%??G>Gi{}pLmqFhK{Tf>>*$DkX=Vd#=yjnlgTB?K zKMlPp^rxWTY|GEt&=a6P0{vr~`)SapK)(2R#S+Sm^1t+Exxd8~W|g_u0Z3 z0{uSdgP{LtyY6++Y0p+~=vlV>xe9td^edoO+VZm#^x@DihW@gxR-NYxHfbi>Kz-kK z)fRAlJzR&Oce3SjL+Iy2uLu2F+f`HW{~+iA=%3l@vIqLD&@JdwZMEbtE5+3n`bjI~ z+GeW_KSA#W{RikJw$y$JJs$cY=%3oc{}_53=pRBKYIDB}x)1tJ3g4El&CokQ-voWF zt+l*p1$#9UtDt^t3w<$Mm%#P2(1+VXe**g1(C0#LYfDun^#0Hvfc}ZC4o-xA3G@lj zAF;)z0(yv^nnGV^i_NXjlc5iTo@uKi1FYcSX5xCNdu_4o1=r`nbx-I$ZLz!z`d!ew zLYKDCFN8i6dVA<)HutTdw}O5S^p|WkqzUw4(6gcMw#B{<^oyaVLvLft1wZslp~pi% zWh+|)`Vi=+WytlaE&LOhIimeToo@@}JDK8YN$nr{owj=X8T1y^{-JlX>3g7$q4p2` zFWXgjK%Y+SANo(Wyxa)AH?@E0FWYiw1@sH4{X_r7mOD>FZ$RxI`Zu=rJR5prYX8vp z*xNt!j@164-(af?7JfPObE*A9f5nzNL!h^#_78oEEq|_qK9$-(^!2v* zUj?0Zpk4vpYfEn@=nbj;L;u-!-SeO~hu#|cpSFB!4t+56rqCa?<#PiWbfNu2U298i z3S2j%_7DAHTYuq!UXR*8^pUnu{xVZsS5x~pL$1$lb@?agw^93tevU1*Uqa8M_7A(PwgLiZ(A=|3B8!wKlJ9d&?iElOzj`~O}4zRfIf=aKlFXJ*xw4hlG;D?Pi=K) z0Q3sz{h@zkb02|z6Z9U?Gi+tv4SE=Q7w9K#*S!FGd*}twd)mgtT<8x#KO6dSoBPJl zv!FME-p`iaOz2IZr$Il@mR=w9ZqVbPAGF0&Ko3Cw#|XJzvz5wkMvCh!=s!ch-FDrh zMsQ>^@io+QZ7t#;T;BoL`=MWD%boY3H-i2y^jmD9ybe7V`c~*&Y<1@)=wqR;gWlDq zFNfX(`cmlKZMm}m`bE&^LBGW2eirl#pg#=#kS(=Sp{GEf41KJv?%xG{H1sjhZ?na- z40;^&66m{Zxic7gBJ^VDr8f6{p?jfU3;lIltu2IJ2m0mE58L9?5qc-+7eU`|t0irr z-w8br`l|`mdNb%ZLqCh$+rp_2y&QT7`X@F$8G0G?MCk9>!goRM1KouFrmehAi4@oE z(0|AM(Azfm$DkKL{|@>_Te*J${aWasL9ejo=U(XD1?^|Y%+i)`Z$iHg`VQz9*~;q` z==VV12>nA_{8vHm2Ym(fdA1()S?E2XKMnm0oBO%YAA&v``cJlUc>sDk^l8vL+w=+0 zBhbe|-(idANa*)MFNeO_mfm5|XF?wW{X$#(`$Hcu!q=f+w#B9=)Eh+j>X7R}Tih>& zT3>`O!N_fEw--Ro6XAl8tD`O4R!|=i;d9W}*MFlURe zW)_csGVbuC%3De%Z@hEiF{>;d_sn0I@<%i|-COxp`;!7H@ z8x?=a`V;3~x_)ev7uUD$vUfv^#V0p3I=khj=@WLn@_WN(n{Q}mZYeKH-%`*%<+UYC z{@(g@=Iz_c4o`Uf+Ey3tnAW@WjV=SH?`)YlXXnSWo9+7S*j>BKz^b=D={jil==gzq zA3c0x?+2T{+1I}F_)p*eq{)GlX&XN~HN5zX+t&~Na^KQvUp{xz=R{~k`J`poc!VD^=ZfMJwG&m z;jRYbM@`H6;FZiqaZ?`6PCm0b=dD-gH10U$vBp`wLuYOL@~Wl_2Y(e_)Yjen*yl#e zf|p)w*?I2O=WaXPq}BD)Q(JGjsejw2*1y^I8vllNA07Iu-KbmV=igQQ%Ef0sYu<6} z1xcOqru@=5aYpwp3v(xRX}9KJmxVLicU`_^b=TL;Z@TUaW?y=C<+w{5jQrx#+Y7$A zH2ib7%T8VV`W0>Nm|6H>vp!cB9s9kvfdM~8+2Xk57%DzlaW>Q z$>TrvpWCyQ?cZ@p#P`dcd>d%fiH z)sfq$-CkPy(XJ26R`&a_{F)hm4S)Ce=@G{sDIe8&!l$EV4qj6+`ugnAJqJ&_bH(Dm zcWoWsYuwLnA-=}(DURJZUdOQ!#|tjKnbvM}HhWaCE^@fa7c&jc}yl zh{N#@YV*%Hj^OwN$2&M)!?6~}5*$zBn1N#wj?p-7!!Zy?FC3TQxDZDx98GZ4!I9|F z-;e&?65=}?pW)bpV+W3nI9A|z8pmuL({PNl^xtzEV(ITjUxlMHj&?X&&>lM+DL6bh z{*prcgyTyb`*6HX-xSVK<|vK>ICkUMPS25XJda~O4*IszRC>0co}bfu#6t9?wQ3w4akLe* znx?(qLB4i zqJBGVwXc(l-{%RmS6^ZYrnR){np9_B79shjnm^>JotiI-6iF+nE1~bV>5HJ#8stLg zABU>-$Dz}Vc@Ff1lxqDU=(JjNKlHAFYW-djyasn+P*ZHKE8v>$N=8C&pH!{iDuS(> ziJPImVT;Q^5gZ=AAtZ-oR%^WxLV^fKLh>z}%PXP!MEJ6hY-@`{M-dzpzBnXrvuW)_ zFeltLWbIVGJE`{y&KBX8xN=6dtHvUj63!0EcWl=P;Tm2M&IrlbY1L|y2zJISOnz!} ziCLITq*>UnEhPQ*9M3;qUqE;hl7%-uD7wrVt^<{$6W+OxsgNhMvX>1;t`LS!>CD&Nxr#bqG;4$VieYtUs@lgzCVujd$Nr>-Zyn{J&s~gjq9>>ouhhmh!BR zsa9NOOVY~OgN+lvc-hmhUpwaZ6Yi^e{DS*tRL*_$cQcQA<(OpR-KYP_|7DH8;*+*n z!X!2e7jXu9Wgg?xGxKp-=chF)kxoqGMeG@SU zFvg=rWS-?F;H3{Rj6EzlZ`>U`Z!Bg#MtucyAJ5WN?&JCKVSesopvyUzLj{v1mq9n)8=_(HOL8zKWiGD)_-FZ-^yS#vX|D^>cz4l$f>H*`XPb$62K>$ zVrl&sv0|A4oL2A}ls=kVb=r)4p$7O>pWkI|c7pXOGjZ;}XsNjmvFqA5U;O3c?zwdS zp1HsL{_#gAj@n+={Dtqg&&2t`vvEAPMqfS=C&$DEdhie9IVIU2Xs@>g);8_?!f@6hvzb@AqqJUdji zP?KjPRe9Qpq{Fkz()RTUC);S*hQrd@(PeWqiw$L)^*PMqDcIaIp_y97e3@DEtS4;^ zR=Wiuu7|81_G303eOuU?<}qT@*O7Un;G z!dfHC2hZ*QFzeQS#k%xg518BkVU}zD6-}cH{(b}feeQt$Ju%?@3r_%_nQs*H=>&26B;fWbX!lqnDSbx=!|juR z+o$@pFY*uk7GvJ5VtoC;u>JM`_do1|wx4F*`tJs$k$pfTPqSRh?|=s04;|?Khu^b- z?nn7O=(KnTL^a))q5PKdUzFN^2HO7vwEry3OQj_;=nZ~f%`*V&9{|>8*+8`V99z(^ zAK*+|pGK?Cu`X@@0p{}g0mt&Z981*!?+p3lfOY=}buZR?y@~_YePO`5FF;*a>-B~l zuzI%0(H9p z$5Rei_tgRGzAEcZK49I~23+5-LA}{j&m`&#;^}pusS_-(6SF@Ij;GfT(C429?DJ31 zXP4|#JUe%tNj8*V9M^YE6~{FDJS{P%Dq&nvYy#=))A?5QqH{RiU3-)+PXlo?A zeFE=E))**bX4p*ley=Vg+_-?!V?th3BRXBhGk9e_yl1WxIlIOf-e-m&&Gb0NF>Nu* z{XXmbK1KUWl#iyjnV_ zIQl2Ia?HeWI=tEAt$_cR`)lQybs|@3A$c0cUBG&|jC{#4mN=NV1pn=mzM*M0%Lv8` z?ND$gr)t5x&by#|E5Z37w7*n03Cs=UYp<9l2aPjtQgT8%DZNInWGx@2f z4bfsJNZj}izFWw?&Xd}ytdga8C2IxM5L>V0o7)TC%c?K$P>_s^KIZqVQ+N2>NO0(c zlkXr-vVVph;mUfJbfQ$ogE5rFOzMa ztiyZF(4O}_&fyziyaj*#3C1VN59Jk1oi$lc0HC4Nuxki=Gv{t7s02Jm^W~`7T-lYQBPtIhY&F-VpGF?`3!?W`w7- z8LYLzhIfuYzhBV<#Gq~b9oqQE zfNlI8+W3cT<0fiju)XHZ0r#3WF-y1Z^=VtkO>aTlZ-XrGHE8$1a?@J?-`fMqvhP3} zco)@U`lrdV??4;x4wy^pJ*fYWPtB$E-hg}bKVgq{j8EI6{~5?5K6SmyVf{Wp^e=d) z(O)A7*NpWt_RxDDsQrG5>&!L$3)b!19P>qwfR!VjeM=9j?2Fc>*{hn8E9wKdYKy@S}1tG)U$)OC2;Yz^ z`**YnJY41D;XnQ2S-<5!`>0P2RK^}$FLH-U-T?d1blB~pFv5=jz6S`t-XvZ&9xN#& z@8BX+>ch+{;T=ErY42m8z5fR0Tj26na=wePSNmY6I39M2f5T3Z>-;aYS#7k?9y3X! zy@cYgRQpf)?SF!Ij&eoYN^X00y|@#skQ^yv8bHr)X0UhSP0BH?+qnpSe?qvYSh^N? z=6#5}7SO#RpM8t&%T#^-&F_=*ZcX$1RIx5>gUE-KYu7mD1EclS!QuN4L?6>Np3$3m zPj;=|sr6?65#c)aW(IVZ_tuNp#9UI;BfMw-63J>sIGha%4jtey`oS^6hr6(!N3L?>UeLaxBVo4Hzf!ZC&w}Aid1? z+p?f7yI))L{kAOGmJMxvXTY`=`)!4xtw_JN@_t)k*;WMF`ff>E5s8P58^pa?xt^$x zhcw?{I4zBtzv~(OVU{+YF*4?Kz~;^RYP%;}rgfT*F-O-7dTPdEnNTM@y+vO`PZx%q zN_c9Dr`2XAbR;~zt@v~}KJCqVnuuXN1VF}nvjjX}*dTazcOzyX`2oipa(+M(M4CTd z)$3g@te+q|+@U+thJf|~^#%hYLe+Z1 z`gd=Td{Hx@?Ynf0>rrd%3V2pE=vp3l9V>Zs#zvEkr*--RlqgwuJ4(eUo2nAbkj_do zqPHiwkX(OwuzFGU$GTx6pTwMINE@=NkQ6v4S^& zes5B>VSHW0J@&$^smy-4`(nI8f0H?z3fX1Uijau?S~}Khk>khTxu1*thz5%q)gj7{ zXj6W~h`}&BqE2UoOL+@P*ItQ?JZYnf-%Ij=%gYBTPn48z*r@VPmiuLx+aOqmrT1=7 z_n%GGcpwtCJ6Xnqax?ZLWc2U*@&L9qRh4_+(~|?1|6-8xho~I+9sV8;<%bfKie}RM z_eL-l^{aj?>R!zZ#G}qSjwR=1XF%YNJW#O`f>^jZ5_6opK>*Tl_Y(zmnF$9>q!E&99TLTF!Iu zC)N|KCZOtjNl(Sn$?)EVI>u^#i=;)xg=W_%E|hBqn4LoVW@a{E9q~-%%={Ackc4%7 zRiNMNu=VC7!2MN_f--yt?8{|FlAnb0&C*|os;9o;d{wQ4mXQ5{mUSDn65 z$T2w&MlGeS44(>PyozS?m&mz21tER&u8*T+8s}{Q34RumUoVlvFWRW&K!*qO{^GMM zHmZFe_K;-Q5HMZIgY~cT>!)~MS^MUVBL4^GKh$w2dV5l`9H2(o>k3 zyLgfXb5-88QOVzUmih>-b4xz^(Y_Gb4lzF%uDslQXwmzR-uI5zP-vh#UW@q)r_=cRPZe9s8PBrh=t9Vex#(uvG@8n4itcJOK zgQS{D{^GPsZSyoIHJOd0C%xIv#j;wiy$Zf9h-JBW`!!h)wVHn-jkQ-osci`P=bWm7 zmtElcO!Ri9rVSFzIy0aYlC`dT5EN3_v4$NAjj5o z<1eHv|DUd-QdVV<4miU*5m-q+!7upv1YOQY2N)nEpOVb z@>C)IW1AH1)$zVM`I-K+`oQ|-G+*az68WY}b#fTfyn0wO7R^;|em!w5Tze^P8FR)v zMsMzfSh5A*D)QT+o<6TcSK6>i=}Io}5wD-Fw0)DZ5xG8nrKdu=F=f5 zFBbDf{c~SP%9|PAW`X}clI7h%B_e;9unGNXUr6$}VZa670&4Hp8iCVgcv1I=JT3MF zk(1jh$;q8-Zsd3~8ZYMMZXO1Zg33%9e@!~d}M>-FZMN7!im zp1W^2&t=BYyyHs2-@VDd>bNiEGGfJOpfgm3-q8DL45W>Cvd#Iipxx{)pZ-Snvm<~kNL=<+JhLJQDJGuG)D-uWeUzdLtq_&0d^bLIt3+nQHwe_MdHT`Kt^P@|2tl4UPB+H0i z@cT$86ZA61r}xpkc-A%-p5wi+xl@tWKdCLD_4%U#!`qmo^Cd{VPo@?1<`#@0x~JJ$ z2yc$xO4)QomM1~`;>_SKn6+FU^FSFxi+P|nkyk8II_!^2vn*rG2afovp3~5F&?(C% z0@Pde9A%U04A9uq{yZMyuK^_+?cXHi+wR7(zCFV-geLJ=i9O?8-3dI~TYOe7o+W%d zzO_l{iNK@$a_s9vwRdaBL3{rs8-}t&Oxhy!I_x26bqL(c*4`qm4z_WyR)?fvm_6BY z{C~2{Far9tyG7~V6HDl#Sl;HBlgz$F3_!)ALJcVK^rfYq0Eld<;Z&k z`nKOPNWZNmy!qTMD(A5%S7#c-w+NY{$BP&ZbjyiYXV~7&o5ejG&Reg+#>yHZT`p5BSK(+E(b9^$)Z__`lR@cbUdd94ox#NJYlQSst3_op(Oly^Uy}{~v z8Ee{C&z-l+cwDRJBQ@cV*haXU;*W9LmZA+qojWAAh~j zHRQdntK5y~?fn*Iy95m(WoUF(DQ@)$;&RiL{`Qk1ezPU>$^lm+SkZ=}Zkq2-9?F9j zl?f%k#`EB9^I7h&u4FT;EyLgeSrz9<*h@?!8PI=SRh|qPEU-Sts`9LE;M!1Um45&j zF+L`j&2p84YcgBFP`*+tQhowwKbFqW@q8W6&~b$}4PB6J=FdRqUCqrPt&ZpNesL({ zpFEJH67PmMFWretPC1{87dEH#5oNaFsG zX7}l(d1fcU+TNyTS$B3451dD7dQ9H0nv5G_SDi<{#JN=PREqhwDZWL>_(jf==FgSb zrtXn8sNBMBOxdNr!1~&yJ_r2v`2p-w%1-p?W@RU83)qR~z({`one0TzLXF=B^i5ly zSDgv%FO{PZ){Gab)7sLq-t5j;Qj7Ta4L>gLk~@U%8!jXh_%>i_1QR-VA=$(*W@SR> zVa3)A`Dvy@l|((bvXOdnsDo!mvKAv^1mje%Rq?1m4Kw_x)W#|?1It-%^>|*qFZfIF z<}bFE@VldY=>z>qusQfw3joX-rw;)9X=b{*{frQzgH;_*lT5SPlt7I zHp`et^PcwK=*wFRUX;%#xGjQPW5;d|+U+d4Baz*%y$y8kwt?(+RC)}&_as^Uh22h3 zWx#IN(I)M7p$4qe&u-T~QQGZPzi78Bcwa&pvty#P-sL)w_h+<4JlBbKk9YLxdiV5k zpsB)NC%*Nb4pa}nDs*AP`v88|bL<^0c9_RaaPxUMPe6y5J52Dfvx)BUzvH$Dof~a+ z8c;v<3Hr$dvWIb2k8SXJHj+Ho=`L`Pz7-#wyQS2IC%B=y-$rAnY?1fm!+L?I-)10f zrcrhSyxcB5Y1RI5;}+#ZGt~GrADaEXZ`Yg>ADZI*GE+4ckfUzdqU1KT^`1m0yfG<@ z-VM)QMBI5Nvxivj%adWfwUR_FGMz2Bw}x)09>adgFxum%(CZ{aW%A348r~!rO|WjS zmjfzGvv|C*L2*-zQWNh?FmPm|eN`W|njt`yA)dQ!GHQDUosc9i<>K>KbYkM_T`YII z=ttQ1zQ^#h&8Qx*+%@3+uZVJzI=ue@$s6AcmZn1$ur78{o>ABA1?UemkYnY|TC+D9 zmA6Np1W^1IB}l6$`-j*fD|e@80kg@a?G&}Jlk)xdvfN$pEPJ?dy7dAmN(HZq?-XV5 zKHe7X{JW6-HoG7kEbH|a#)h!mEuw^U-QIT@e@`$ba|J{sJrcO2E~v9XzdHl)}{^bWpLr8pzgv zlAgQjFfP}Xf$OTp$lV4tj9pYiWFUt1boCTkPs8*V3{L9_bk*D8J#z=Wms4x~8Zi=~ zVeEreF-Jd8*B3=O-e;7yy2yic4Lk!(l{^`rYI+yt6_i^F-cNv6DA>~G1U((Xbu~4f z3n7O&oZ`rwP|B)+5!J_6vxr^DcE*?4F=Nu|6f54AiYsg;OIu@gac8Q$Bh|>=0VA+b z|KA1B;0*$sNbjG?@JYt10;%Cp{n~p`I$0yjs$mDt>es@1-+;2BZhpkQ>fB13#Vn->dLrM}@NJa&dcEmJgRIl(>nGTE@y?zj ze7iuH346&sKqHf}Z|^a-Oy(rbbJxGMwcs_yx!*57$+a9oGeUi4FNkq1*L(!@InhAR z*du)InAQZ(6;?f<|#fm&yHZ%Q-idCE5WCe&L*dK>oAW&}?m zM493(d*b3|NrO&p;fXgHa7AYg@C#Qvr`Z*C5Q`||bjXr+Drw`G8UZ;TX4|Erzx184Ieq7tG|j1i}XDdvfBxOr`si-NO$)>A|0SRJCEn!FU@O`5+AVcR)EY~18ud^S^s|W z6vB6UYK!k&2=73NH<8}i!qqzys*3OQk`H#y&^fN!Dx$=ZWRr(CH9oYsCO5%o&NGEI zy{S$-7cDi=DF<32??XG~fHhY~rSASz217Z#@CzEAwAyX9W%g_Oz2Gw@EKi1 z(Fe;Y>R>wjpK;&|JC5b$q5kW2PKnL2SUz`<@|lB_&mOS+xa841cxUQe+ti(@P|l0C zODq?*%Z0w}Qu*v(Dftfi?C0duu;fY4z_arh=70AFyqm${j#jC&PbP!(hBww1yatZ9 zC=TJ1Kq}0$p@CYMVf!eUmBUb~13g4%P3;+elHTJz8{X? zj#8(zb%%00kK$-p*L)dHWP-9R=_A+VRxa@3fI} zoi1TbSBl*1!j9K?f$&R0U0)0O?0H9WCwZcGGkW^0d&lsi z4HBc@CUClFo5T@4<-& z?!gJ6-4Lh`_U*TF*;zc-d?e88M|27>nNFu>%JaLEOdK!D2{VO_EUS7(X;ClffBt9b zUpu(|mmEa@ibfe@B{Zt^qw9cELMz{8Q3P1Vps4MJH*azpQi1+JHec{TEcNT z0%6r}GX!2Rd&pgQ69ef5jP7~}ya_O_i3*BEEB_F{FWSY6Hx=_x@uuQN=4XMd5Ri1T z$)&C7H&egO&>Ef*P$`t05gP`dR%cT<4tv<$23h#CEs0!cvR+c(5cNAy7c^j>1!`_3 z-UKtd3gkFb$dBr#A*T{|_gN;MA67DyLn~OW7vB@oVg?$I@)39f;ZrCr826-TkX2%8cp8Iyt zMMySogMAo(QJzrDWre3M-u-B~X`jK#@`Inacj*mm+47!Qs7DAcvL2c0>3%7gJ-l;Ao|hE;Q7_ppd~v&-g`{sI9!^XyD2d~|YP<0NJ`QB^$*jJQ z{tcQ2>}v~nn%$}gW5;sdLV%;EL?bVj^wq|7nm3Kz0DTQ3*niavqk@sC55@Rwml{r{HjN*6w^#K#kP z(p}r74^jJZz`qJ)A#Y>o_t}E?SFz?mv}XsK*pL7z=qZ+)ejJQ+8QDsDvdtRTnw(5E`LI+o4_abLyqLUOu1 zfy6A9Xg|1-?nHFnZb{bqrER>D7oYNa>O$oYfwbC*AAR9*RcqoI}O%CQ(V45 zW#f|}pb&f_ydRXU^x^HwR=S9HYsd3${e*t@nAJE1U42wu>_}asOSn)6Kh6i$UTW3fjkEuyYl>(}~BZGg1rMK^~Ut5%;qZu6whf z4KD===M*EaG-fJW#(UbA82Pp61tiMST5DC&kFFPe)i|sJ4Y^ZGi%I;qndMfZ*U^7# zgI-6urHi?Yb^+QBk>3d3MYm}P?vGh{7hQW&{mQMvTjkoSg15>QybS2N$1OjRPd0%z zDo=!OxVs$>au51e37lNNL;6~R?yk$IpjC$6&(8<=Lky+c^Wj-(95vcSPv*InJkZSs ztAXOFmzK=O)&6|sr7w*rAGK55!5Q>TXiXOH{8aw$pX?C1Gn}`Ao)K5b`0w0;lVQyq z89Q+7cW(YEBtwx64`e7#JNrvJqs~G8OoMPZMBRw zy@dWYYVAzfsq$4Qd8Cj$SDsm-Op8M)B&W= zx`6aK3uqW10gUBVE#bM!dWJWk=c-)hhIRlCU21eLM;L%JznJU6*_shkF{?P43Fl?l>-HY9te9h-x2L3Gm-RGl=a8uYw#%iEl@R1bZkqX;lgTx=*6Q zt1i!T@R#9Nsb?Dc6X5y!SIK7~&qd9kr2CqT49|6(;`MAG-6vvf_7kl*TNbGC<7Iy*o<% z9ab8}vkm5#FGQh&chR~%OOMVxUmvJGN zkp3QclI9~qxc+!2%_sbnYNwsfp(qe{2JvrvO< zkfSeDemuD2TtXIKvEy`a20j9RYUjc4V)qg6UX1T*_%2Ymwvvf_IxXaT>al=V>dPX} z4o3ZSIium-wW>Dk_tPno^hoZo+y%hty-q)}l=*L^0scy}y`wi7mp+(O9!gtJ!wS2S zPDE2yIqNF}?eO(`n6SfySF&<6wXwTd~I1sFaNSHo0)7Pim}^N;ip$Gg^n9xN8I+w4P#9zfHyU3-U~2_FFx zz)E%z%S5JQRvX~Sc&=+RSlNrtVRwHg6WOF%jpC|*2zok|PoY!V>j}TNv!*A@4d&}P z#{*6(Y3#E#jcE2r(l1u9(|ED0Qt&y6dp-3+wYQE81$}@n*;(oX zr0jV^FI4uti%NV*hpBRy;b7i{FYOe5%DL=vqI{k54P41^7ZC9PhtlZ~(00ca(CRKD z<(CSZkJy{9*eUjUK@A33Oitr@?enm|o(3yqv(d?V+ds0BEeX<}&~N@DsB<#ypV@%T zYn_g<5ujc1DjoCibA2+#2i>SQj;P^sVoo^QN1x22gTzXx0HDObXK zXnO{pIKP+Y%2xv2nPyr~Bnw_cROq0X9XF;=)`2tWKLHMT%8(xKd6?sox~s2XuD*!j zrvo*fA%C?d$?tChSf_Ke2aRAhABi^?YqmZd*2imjKZ|xxEq?RhTYM;fYXHvo7|_*U z;~I0wceH!h!=}~hn0!&*dK7r^f9PIP$F^qk#rf!7GauV)7Q9i38(1t>$c|1tYR950 zy_e(Ph2L&$5wjk1Mdf&xIqv>k(08m!$; zffiZ;+SBVPU>aIwIkT%QMx3^N6hD5Z4a*`m1fJ9wECqZ*ONW>ps%Blw5RcXxH*`GS zdrBU}_z!zr%$!i(dIU!B4voOB)fu%8|H~VDO?#-$^7>v=t23Ex)-oK^LR>X4rq&SJ z1740#A{}oLv#Sl}R-ei2`f7s1c3~zxfI+W^Rrfmj0EX-aOMSPrjLp)v*u8eLh*ik` zn=Q5Sp(^4VAv#^T9rORhtLS?HzJCDF7n1Ko{mRhhj)M0g{I({#p+zijnP$q40EAu? zTkG}g#2S_gp%nKIcqY*S((=49`5^)p!j`$na? zd7AaU^G1dVJhz`<0k;vD#Qe%u)@48s-oqx+zG&$R%n1Ht7bJunl;d-XR{)t|t)Avr z89iP(NXag{NFPZO9P-+0FBEnUmoH|R6B~1I720n$k}WZ=;utkGbF_X|a;Le+`*S>5 z5=)5xMEue!SYPM(>(r6@!H!)f`S9AHSLJz?nbTHrS36&K^pt^F?_Qux{k_Q-(GSJI zo6UN?zhO3QBV*nPvdVSw8K6;pRkubs7M|U~JlVKM!@e7C3s0jx8sw6&b-f$;k?uqb z$!FpbqI$e5;Scyd?#9oAS^N|1m$3wTDuE=Hu-L zD{IoMH+#MP@sC(6Qb<0Ftw77q;b#Qn489#{`XAWuV7$n0<^#W3$V3i+s*6qbxPjwc zfI3S8*K<-}5#}+>9E~?3r8|aI=@`yTep<%<9q5THF=U2yksE$mcOupvH@cYdL-KK4 z>mQ?B5_b~TkF=!5@*!C5npo}c;64Q_V?-jR;mR0GbPFpZ6=H7ck9rC=Q?0^bc4dmC zssN^H*fV)0%sIR>L{l`UX*Ig~uG{HKrqyDOX@g~qvp}l)m<`jlI-O`$&>_atiFRN; z>v`kX0Oea`+qLUCqh8a{tIJ`=VJ&+AH9%}P;F_+dHN8MWj*)-}c?H>i0ICdUR)fp; z>nRW@@{N~sdl+Z#ur8J!evFX<#*zXBG}RPhsZorbYyHk>WOg0AQMZ_BqX9;s<1n+w z7_cAjqm_<%9Ua3yq)xz94IV@y;tM6GuIF&cp^8!26!)HfPCQX1_{YE z&LH2LS;$um!40m4W#}lL zZ5$U@V?G9;&K1XOIW*=~{lPmm(JF#$6F^ZM zt3BfN|Ju@9{?E}X@&9pT>p?XYN5r%#CCSM|5 zEMuGv*t!X@WleIznaE8b2Yd~+e$d-{;}0=6@@3sxhjOWXqz)3s9q}l64Bbbyah|33 zP<>ndROLNX=hoe=+cRLFsfT(qb&x}6z_VNNS))D6Vz$-DTx$okbDJnT3g2m@?5Eo7 zFtcjh@M4BC*wyF6!g4$y@m>(0!nC@2cy}hWF^g&8*{tcu*do=s&DHUaH>=vUpmwr4 z0lH^69qElCMc)llk`v+gI1wBpcCOxfzjU-Rsa<1$dp^KG0L&&U#)CD6KoAO?nSE^8c!#u&ONi)+) z{uXkhh)Yr@Ht0{{F!VvtSd)RDEi9Px<1cS0pZnDyBQJ`m{7V$O{zgdVdSA_R>|EaK z-RIxQK=zm`MNSEq{|vOyuc8+Z|Akr3mESb}qw{ipF38|(IQkP6<#f?T1GG^?W7?>R zG3AobQ}SDMdR*}4N6<5DC9I1(4Ad2V4m~Z1XoJZ5=RrSf`{j`ub)`CYS<5jKgNh9) zt-B8Dp3jRo7w}~zd^zuYSvLp#wKsXM%s#S?U`1QG%)7!r;*~)CKbO?s$%VGrA|+Ei72B_4jCxU1 zmY*SIeLOzoT0%lzrC=~F=eW;gOwf$7cNyP~yXM27%|2_inqpNI+tU2DD(%hFNXOpM zw>@l8=>NDQc1!r=fk4C*}z4xy=zU(bMtb15yiVfdyCu_#0pp0ri|9)Ih-*L+I)IE^-Y4^Gq>M^8Kmg+l@03sG|#d z`E59;Q5EYv1{8-p4mlZ6e{6CLI9UuhSzK_k{cI#qF>tb2(Z>7tE0ukHeaZQ=DqoP? zK>iFW-t;9XZzg^qbW|O_%_D9Hx)Zx0iQi1(j2i16zMdoB3$xzjl9-71G+{h{A|KL? zJcoY`8#zWwbp&z%bb)LVJZpMa!qUY>xy8iq|6D0@*S488u!B8_`JQ0Ua2=F(l5BEF z_0^NT-_Sy6-$noP2bdY)k+I#1M?MJ89`t!6#moixPX_pFPx3nkdTeasBECfNP|Dk$ zMBd3ucxU-;!PknsbD(~aH~-)O{UX17i2B`pko^uhsD3dH?8gV__dMwLf2iLr2idPX zK)+G4xHC3lx5z1bBHs#pd^_*fFXmmwg}mFmfOmy<@Gfg7@3t@E-QiulJF?B^^Xh)K zNl?Fy+WvhFwrw%KdBKvM{NChoOSbYhKAh#2Z0C9HS7t7MF?Uj!f6p=GsfIbn)QyJL zUT;Gjy~}#NHsa4|{f|{hD=o~`3c8F0S#lAyX0nypXQRD=y>_lYHqpNpIEz1Sw}{Oq7rpp4lyO7^m5Tn&N>sCdJHKp364! zJiiq9H|*F@J6nOZD1Fh{G~=!ESM`_I$|H+JKu@=sMfXo;OVcGwI+BD23e95<5*2*Iiec zY!01S41@6vXPPzwG?0<-_AUMh#kmEJFh$aFryQXJrm#U= zwdP?SE*mzl6hL6tf*e28W_AeAh8J_RRcmz-^*v(OM_D@hsEJYx+5j;>^o|I6gW!n? z@~w7OwCeYms(sw=tbNXF&g(@<(^~69tc%^~2`pa*x|hqDGaoGpF73a1qLy`SrE{2G zb$XC2!HUN5#6?gd%94(0g)}Qk6r`l7Go&+?0Ht%j=CQ5hnQ|fp)^{-te*k=@2?6!PcZ=qTMc}o z@99GT+ff8tb${6Y38f{lAuQDa*bs{9ez2vmv>$9009$oG*eaRzTkBOj1T-G2Vyhy5 zln_<{<`BL|zhsh6SDM|aS%1Y<3^dAi)#B~4_$$V&CtVJlP`iX%qut2Ex^zs-6qZVi#dGHI+{&B=dMgat4m>q8h+3rqFoQtISF5)3W;hW%+ zb<9e*3E&}7hjTZerA4eiYe`Ng33P%6^m&y$8ElCP`rHMwfHl&!7SZYBejP11)=yC; zNbA4DJ1BK$m}B-H_xE^9N5rvy+U5*pdHq+WkTTBYsrVtV66P2>FO@M4Cw~|rV*rn9 zv4-ch%el2wouIauLPu0*D3!+MX?On zcuHaqO)xu=X4XseRz04}m?oZ^Ity_fihHu6i3Zj-It+61WwFuZn>L%*vn%x>F{V~4}($n zXx5?39&R(u9?Ps7>~NOZBY?k0#xZSVlv&TMiT=dk)UM0V18g13(a)5|uZf#TksCCi z-K*K<=LhvGtx^Z<8;#6)jra**e#C?#Kj}qW^G4$2b*yMd`U%Q2lCMwfF!*3;JO*1v2!$yV7f`8;6^WgcYgi`Sa0 zHL$nZa&NVbCfGaEp}S~xoXXOncW6y4fp1IcTOPjcqi;*$+pp={GG>L`5Xcp!o&hV! z?g#rVX_Y`NH?mk9sb#+%i{a=Wrjt=vD}Qto`*r?JJDH%fc-tAxCOa^@k%u&`!laX1 zv@4?gZC8d^MJUX|9DM=sBFUns@kUhny6CusVj@VTGJOWg=qSQ)by-#NTUipT)6vkqy>(H4fvnLF7Vt_l^Oi!GYx65B?A2T{pIgq0Gxj zfP1BruoVXJolp?{Vp?bj^(>yEIS- zcUXa=n4r{qVXt$7R!BoxAvM^?TOBhKdXV7_i*$=7$bfkpMiy?OkzL0kw)1b4o36D5 zmwT0?#VT!y8x>cPo$Dp8Y-wpr+<3T(&YX5|@%**Gb8%~8@Hv&+qTV*>56ibv4x88c z8v9g`lv5y1x9+r9r6q1j#MZ23XyLSGxaNb*2_d#mMEsfpzosE%_6JMwJH*HDZGG^& zS>pFuAHSGI7j?y--5~PDI3PucT6MlWQ4cH9dMb$9VF3%THPJCL(VuA!a7+g{ruFSL zq3ID*p3ouW@Qffo*@t_$g!^Y&5bhN|+>i8u`!Wgl8$R6Xo}oi-6nUBuZc%H94>z8Z zSX&2$n`ok3@A0Z)GXr=o*9Ej){h%$^%Y8r2$9I>Wd#E#tr~L9KWz4J4r!On&(^{LM z^v6Q`?+x_CWUz|~9`WWiCi@NX2-u@}2IPT8;t{v@;}ME8;Ewg-{}E?+PUn|ek2|F5 z;m+kI7t3|5mD{jB1ka)TY1{_ZseEBDSp#C#u9Bx-)##OyB26#X$M)Z*PQHc+?-$VY zYIH`s68gH;qNZ0<)bxgi)%UOsT3(_9}~yz!J#{&371nqfcD)BIGjXXCxO z=(Q$phbScfigi1nu7-C*=#*2uc$#-|;4}~Y>2lNIO?^@o_M!uq$6nAX=%nx-iG~60 zlkIg59en=jDgZszD zgn!(jzJDC2l>!O5*g}Z!lz8DMoZb=GTc$cUBQV&3&YF@ zL-Fkt`hlQljFZ82IShRnk>d<;SRwaK)_J6OLwR{hi!_ zWT~N0yG{c+s}^KKT>H}V#)@TWw4VT`*=&9@0KBuQZf76D7-ZH$FJYMV(h`k*?_Uw_! zPlrQW6`-GDW(Eg80Z%FTWD?fJy+I9nn(j+co@{rHn7xi^wdKrFDgRWg7&>EwBz!T z%vwovJsx`odQI$x@-)Aepss`G`S37?nc^^$UKK}c2~imE)%zkao?9_bVL*Pj_oMOD9c0zFJBk7heuhe2}a(E{SRlZ1v5J#3_So>pBQ1zXq;KxF>q$DMQnXnX|5~P z%o6^BID`FRH13)9r2g8>m?Cy)??edP;l0dm8%~helMyq!ikO*#khPU!=CHvq6U?I* z#LKO?-`qDiUIG}Y2aI^=btb$+T@x@eRbu3bz8JX%$Nz2D6c||`_Bh$+bhHMvxLTn^ zmy#F|Xd7ceO09Qm*A1GreTZzPuZdEAmGhDZh zcfzR%=$Ge{etEp2zn&6_;w|*MITiIw_}q-174oz?uv2yicFHc0e5W#zzhLGsOg4e` zfWr@J56DHFTgtrEqWse&by^I$#wE1VGI0r!vN=qFmp!$ z6^@4bV@9ylA<*Mkgt5Y(5A9Io3}c8RRWfTn*)GS~%&`%lTZkiVhyT~Z{}J*!cq?xU zj=df9Qd}c$Vl(k>jJ8u2zgs}`wXVe61Oe-z>GP@1C3w*$9T+c?UvtDwrHn;(#R-kX%9Y3`ZW#nCwlzBw z5!hI4+ilV&H5p{+DFBPn#!@C=V+LX4cI6M#A^3)De~Gl&7J}^;xwNUyfF>H&>8>qW z*iyoIUev_uCC<}xaGZy+(lFWS{3r+1 zC4t9)t^(Wu^Jvy5gfEa?$(dV;5*%6ahg1rFQ-g63= z21RGpp||oLhW7+46yC}cTyu|zn5svab|-NI;Y<8YK7*mRE#?lw6E)>Qyo@}E_pnkK zR?vo3MUYhjCv-zh&EHJZ_Cj<5p*3JU+2(0l2IFbaFl}6n z*)budJ}PY(_eXr2f{?>NE+i>6lN3_wFqBdes#~gks9J1h+d@ihQ+mjFv@Cp_Mm^*< z(snbvP3|FKhE{dJN^6{@m^Kl(p&bXFgM5AhKslA~LP(xb>-GXQvxLjE zeQwmX3wqHX`2+Gtc4F34jI$sNPA+5lGO>DIKzlD>?%kNc+!XkYUIF$Loni?$G5au` zrO+aNIO2qn&K?1%wW)~z!$?Z{8ul-+a)iY!%eCO!G?c2cDa6l6I`i7WN7H9AaR?Lk znF|7v1vr!JPMp^c zn2RI$THSgkWhDrEzRrDC8OG2GAh0_=soP1)(G;QwZ(`|2a3WG?KB1TtfI^ZFrtgx z@P6I8!HH8#zj4bJGkcyImo^{A^>_{PBODjMKOYr*G76kdTL62TZZ9ljc1}j!9VfZ? zBGfY%mU!6Uu7y1xBe}PBypW|q208&&ItXue7w%ZX)`vTmy%_g^6Np33meD+Rca&Mc zV*$1kkq?Sfi|1G*iuC*d?Q^y8cE;Gud%V9=%nZUY49bwIGo0o`^2c)|WeH7|PLzy# zrsgGYnkIh7n?|jNoiN|yYni5Xqf>@)(OvsUkGj!~i#d5p&B;%3PBh(>65>0)-iRl* ziVNN>x!}iEERMK&TCM4-GUisD$?TJ=h|s>*!8&p%uu10U=N zPZeAXW`BuBvk!|xMR+bXnFTZgbG!^A(OQU?ua-AREku4|;tfl+d;&;6TVS65Zh%Il zi+P?P=XoGZeCj+K#gz!$~)PTmwm>#vM?ru;`m?>F3jWqfKGd#dOY?2f}T|;^{lR6i+dStHuQf*YkW*TCbWSV?6A(@ zv=$e06Dy%LDfyGXXu0sw#9f4?1l?5y=&m|IcSBN?)gogEi3R8_-Iw0_Ey29VI&1 zA9d2l>OmiKamCa#*IP{XDTkv@q&1>OAjX4Hm-aA^X~Ut$2-#!6+N89=>!bv;jf);T zr39mm;uIUWpH44`AB={TI~t_wG3!j!;%t2kL+P4EJq9&8Lwd)4Ahgg!N#7ecnrT^p zty$`MEis1jpgkUB*Z4SsVZZWhjtI}@2c%qRx1u+kYiwfLIB0)@!BP_ej!C|((pJVS z*!N&GlW|8AXUCgR`YxM5{w+VUgv{L<(98G5giO3iX!aG(pPavDVq#^lkD{DyPr>Xg zK|gdX{Cf=BBB-O943gHAq9(#VnWoNET^gVSk#ex|a?SiV*%&iG+|X!a+-?96Os zsY%e&EdTWHD9iVoIR`m}HItlkO|q*Y|M9UCp$ZcQ@s>4MprVxb0v zClCVLtrF9vqZ87)(30(=VPuo!$c~lz@*I?+kEW5Gqed3%Gcuq6cglW2+lRyGI;OCc z6xi&}4(4{kx|@ruT00V+eh#UlILr3DPNvNSnx8LdU0V>RI5m4A%9!)0=dsGOQ1|DZ zJPYkvapul~o{y5f&7Q^F*|6%4zF60CNC!t3SKZOj_i@;F(K28!iZK}X@w1tB3_Lv{ z!SV^{xl3vgi;>qHU&3onjtNiL#VnR^697Rs$ceAHCak)7(87r(OC1kzoD@+ufs>W) zYoCJA%VO1`N0l8ukyhQ^wpev2Gb*2&*R&+xnW5uunCG zJ@gkO8-As)z01~T(M$_DHXRZtNyX?!8K+>&d<1o6j`7+>c=|Xk|pBND*N0d=5Bu4v1N{6%q@8zR=@*jq}6k-jpbL`R<>_DQ)u8qp*1sX?S*(++ho^#94&qTM#r z+U3M5?$!LW6Y6SsRbIwkD7k7njpVL51&$4j^GdW)ek(A}SBm4DBF4G;K;u;HY(Yx?NuPLJ{|po7&kl1Jucp0e zKa0e0UwQ;#3=0@n*#5r6$wQ@5opIadXwWwlgw+8EcNBF`<80DBJ5WDcPX&={%HT8dA+aYCZ?vo-{Ak<{`>yw& zTS5YySrS)f{ZaZ0j!uyDCnPU>4N|FyEw4o!MMZ2m+OO<$LE>90eNfJm(!}|AR&Xw@ z_f8do!iAT`740vhV`axWEc_A)kt)F-+?)R zz(SD&yiFXysvz%@Ek#YDLuwMWn$RRt>QrM)RE&G88uycieL->D+BO{bR)5^D3_fnT z<_8;hV8q+Si0vH)({|!H`FqX*Pm=kqk&RI?Z$6(X>-D1C0kw1w%(Zg0rM#`@RGE!PUaN?PS$ei>zv;L-5 z=7r2jq|16pQo(F|m`&xUyqhByJF{9@e3e_14f z=Nf;<5dxfI%-<>*bJ{qMvWI~r7(5+|Shd0UrynXUB_gzxUj^cyHZki>@@2RfDT@cZ ze^22q6Oz~5z&O8!vh0&eB2oLjIz6?{P~7Pl8)@FD?|Pi%k{`G+0sl{YUJ;VK;)+3d zMR1fCQr^6hF@~-5fU7OsKdu_a2>YLXiIOz6OMM&qW&LgF^U1S3nW*K;A}jH*dn+c$#(k5 zup6IJ5=(iG|Evq1EiQSs)_=ATo}JLIp3Ns8^qIt9u_)?}ft&V`-@&`j62co6YtZ@igrE+Gxsn}& zq9+kLr<~a}QmRc$%WZ9c%k2U~NVSbhG8n4SS?DGjpIxVktg`hwK=?(DnUhl_|Bhsn zb-Zn7yoK@0nrpC}0nf8n#4GeB`fVE+FL^p|Who}O3*9;7$KherfuA#=BoBg;1g&?S zR~_G5Y=mKZe30muk%6oMjM@m^FZ0Ygbx+eZbgM}5o+c4v@x#61-dLo=B#V{YQM&69 zm2>H8dAELSi2wXd8Qw5UMsE8J z+%@rji^)94GUg86leNw55tk&e!=S8a!JNPYaB;O?W8}5U?_RyUFKoFjH}SL~q~Z>; zB?zhbv%rZt*wW_fpt}g!7vbCqa7GADk!>v(*tMqw;fy#hDSmnzFSVPi_pdL_oEDxO zh8-vjJ5WUIKzFl|Vbo{J!~Q+PK5g7kk~ghLGdGspqqYXh$FgGHG>o}=Fr}iYzn2ox z)Z*5{Zf6hguDB7_q5n+CLSP!53iHLC*lS?N`anJhZ(`jCh~bo$nFVD24rH4}Ve7+=7IS5I>Q$4jJrR_dc5 z_osB>)k8KeLwNPHqDARF%}n{;%OiB_bQ}Zb3h3HA0`>;e)W(2xw*cSwD7tbC$MuCV zFaqPa>Y7Z1i@b$DMfSjdU-x;;EhTqHKKq1{Np6MJcV0i4i^af8RWN5C>dnP05XV(3BCO>kyA{`Ajk*rb&Apm za=%-7cj}fvp1fC|2*$#C=HRig7X!blH!(i-wu6j?{qqz3V`0|~5DVL%Ki&>9#aDRW znAf+S5d1OEX7;-;`zydDk0Fkk=QnG`JhZCq|HyH6^E;sJI|K32Vh_=tG+8yZ{cZCZ zZumS`wSQ-z{VxaFS9vtco)mZ61k0)dW&Ou^7r=3MKxPxQ>Y&akjPATyayL-gu_S$o zdvAVGJNUgfCk5`k=@Om?S@dh^-^%1F)e3sl%9hN@rfkVPky=^^Em`vm$?r4dfOt!^ zCGsgH=YZ(y097rDHL#|LDxC+VSk@fCL1}#VSNrXE=R7Iy3(9$44PbYVkKO)l+|#d( zb$%Q71lqX%0BwA&-@Qc_JZVaQwU)rWMPDPl(apDm-huS>er;Xqw>3V{*4GcBt#9-j z+qM4Kz7ZJP4gS~^P2K#YqV0QuroIX7G-|=S!0v+QD8c2j_kzUvEuQ=T*n1QBx~gh_ ze4l;BJKvm}q{(gCdvh~1>6oNRo6c=IL+4(gX$wLCv5GMPr2_guPM2CbMGG3UVE>#*YI7P z*BM!P3t?wrby8o|ZG1OYex~yX?ujw{{B;Jt#odaQ#-}Nxe357?dsFO$R;#Y3Q<1Qs z)#nz7>Vx+9Uc{2Mw6=nG1Z&hg#`Q3-Z-i4N33wouxrdx%`g$v49i+4ndQ~P3f8AVOP*~Pot$;A7+%^S8<*of zX}UB-`T0sU6OGg1`*ZB@y6p|t?OQOvZwBiYQJ4)+!F!BaEe?GX)_-n{t9-)W!`}jm ze|yBfuAeyCzRn+crkLlL!nbqwnG`L6Kd~k`Vj}gJm91svhlpN?9Qba^B*t1qgXvT8 zcQ{?x>V?q@kC~=1+;L&NQNJbR0ep+A%hlTkjBf?F1X=k;HFH4tbG=5QVhqFS_v4LJ zJw@KFjKoQYZU7~8K#PU^DSCi2_w8tS_+pHmZEqkijt z(3SaHW69X>!oK=m2=AEVJI}hGYqcxdp8Y*dTj0>Etx$bi^BUUySP%QXHqzHr^zG2~ zZ9($xwuePGaz9xr{tf86#6FuM=k680v)e5o?}up2`sC;CSNdXl74mkO4tmM`x;Er> z7T1Oxsf&FM=Cp!zu^SJ772-lG*vA$3Yd!39w6h)ftu5*se!(|~w?3b68d;aE?C0~) z&l>9I`v>SpkNbzuYTflF(p{&k8j>rYu|*Hre5c`CJECm z733rF9kkvNxq2AYWUi3sne`ldnOCR>jTohtF8S#4ZV+c#ug2xui0VkAYl2ZUt5LKl z%Q59)7HAZoQI_MaFbcPaG6kpLJ$;cml>bt^lz+O&#CNg{vw1!n%1-%mJe+mPb!!%x zqadf)UZkG0kJ}@ng7b{sAwc$yBUd)n7_p%AK4A+IpsrK8EyMA3oKIcSACOJFPwt~mO>w$s{&y~bx~ zudx}Az&xUyOMHnh4bQcve>f8HTC%Y{UVwe%zsrpDhi2Hg#RYaXMa-XPCW|${TlnUl*jzc zD0&37g;4#B;dg72Tt(yB-|KHb5}d;W5zZ-yhcj=AWsfE%+hKU4DF zH79QrnHXkEw*bWTf;Nle2@D5R%az zV==}oCpkNKVY0MGejY>n+=yJxSRu)Lwm24!`^+Vo%FihpXJco?(62cVXS*8aZ(#gx zIKS7Y=&3i&IN_QQN8)X(M0(ZKe#jP|86=84>^SQ?30X{obAg@)l66GA1sloS=XH$q_xp6#d^XBE zQ`!kA-5?M-6nP?XDF6FuhH1Y0-IV~%JqNPXPJ1@xWA zFEB6)r62ZD4OJJ|n~cYG?G}to@pC#Zg>Y$M#`h<+31wy*{4qI72_-r|^8g<1tmWh9u?*C5ah7gRK2WQiR!~qFsDQ zofT)B6=y{#M|2jR6{K~&VQ`k{UhP$C;Ijge7vmV=!#`8mBwLT4S37M#n9tzv z2L0-`fIDM*NfKVKu(umT2DAvo-fn>RH-wP)&Vp5JCF_Pi@%rl#le>YUagHR3tm8sB z^EsBh9%l40Smh@BxBykVA(#XEY7Suz6LB|*viB;XuP=TJ-Ou zQ%XtXy{do2^TW0{4?0+VwNrio-0M?j(f(Ah`hn-@Wc()V%WUcm+SP9oSHB?kQ{`u_ z`Aa`jSlK#jF>3He)Hgd`6ZISE0WVyNrQIAD$6x^&m^aFW>HIYo73-kXM;Ls`d2`VSQG0BNa zgm@Q9QgD+(}pGVcI>1Qk(=WMlm6z&1%_@zMy z#hb1=A>z>>ni;wKMo|+xmd?iS3V$MK>K(g`J7auGt_gFlBS!M<)4FC|^BzHd$^Jf? zr{dwm%CwPBR&YL3uPdNlDXvH7CLdR}3x+`}I5mt$RIv*(#wO9<*c#$}LU%QOK%VW* zLTA=j!F}B4NH*XZieiJ&8~@YZ*-FvxB(`5{|;jqs%2Ar9T%ptGCb7?IsPs=Xn> z_J)Qsd&54?o`e5j<}P7m)EWY_bUmY5;gVwRJl*x{N8a^gaM#zloxY98{bhECiR#vm zwuc6F>z|}-50laMF!8{)hnz_sX|CqY7KaNAv^by*pkK%W#*WuUy{4$hM5_osdYmR>tE>wRwA5yjuPAF_WIYs3IwkvP-RKy5n+_`TlZ}rLu=Yt%kBiUMQ zk!w{sk!|S!dk+73Gp32$jP1gkiE(SNo|vCH3rEVaFQ3Lp`-tqo>@SXh!CR!)HG^r@ z39ZdmXrJ?-``K3T)lM9TYe7miYP4aROXL#Fcv~d;uc8c#U+UBB3U!)!)-$Nt@>$Ohj&viwJI^MD_%FNC7-e-Az7Gcg2 zWtL-x?=qsyI>yOek%HS+HBsgjMVWO#nU4cyriCc8E=-vSW15UgnYfpjCJHI0$t7`b zWlCf^Fh|%G-YQ(*m56=6r2iL0lRuY7PX#&y#xfT1oEar9%yk#|3F9$M_oH2JO@h#C z->~Be z_c21sJsfcl_%8AajndtiOMRHfvCdY}Ihc2hb|twXA~F${B3K2Kc0enfFh^Y{-m^Pv zn>I&!ool=WX3#~tE1oP__ZM^*!RQUXi`W$1@qYMR!TtoS(F_}QsLgi~^ik``wHqvy zDj)t2&9M;S`MpN>Soab=KX0QY+*hc2_a;U0%}DWRK=HvNt`o&0vX&K8E8hrfJ3CaP z`{6OFm2U*9eiG(2%P!UE-WcW##d{wPoq4Du!5!JvCl69sMp{KULk;#2%+uRaxra8o z0h$tL;kTqjt_Akc))vN-EGk6lBW#hiC(usetU%luzZ5G$D_IredG3S13f8A!{GFk_ z6Smbpfcb&1jMzK2JJEzYO{{ocOLLN87cdWgZg#E9Q|F$OICE95e_*R_N{ zp-uYkJogiDsy9UaXw%gm@J~nbdrbX#Xk*C6zGUH@)VP){a<7s_PHs!U`RMh-NxYr& zf8`E!+V8~Nwtk`YHL{r|IMe15jp=!Gglwi~3GbK)%Zs;EQMCEuf9`$|FD)H%{{tJvXlrtCBK-XU3(bcYKoONE&YRmRiiI z_T=#bcgSTh!^h%S*UNh=+VpNEkNQ-RZE1^Ufjcu(;QwtF;e;a+>Tc%`iDnU>mYv>d zW@o@V;scA$V0<@C;BDiBiCN;|M8fdoi7@82?_rOKpLeO5lV32I+L;~j%@a^x{D@JA zdjJH;>uth=v3Z~)VEw0Qn8%Xuf;+be@t4}&(QJ%&H)`k-wBIrbd9h6H zAVfs(q!PCG{R-QAR+Mj8)AbHd!wye_4$=G;;k_-*XWA}RzrAO^jdppH zKtCkcP2C57734)gk!5xta1HPBFhZTi_}eA0hWja@H|L-?WdNgZi}Hu0W9w{A&)f;C zK2VWK;u)*QnJuzj`GY_6m<>A}b?w8U#dVzhZ*o>}2mxSJB`C_$RZNT79Q6O4oM0O{&`j6Sk-Cz71Ii{IIfH;v|j1m{qpzrjzs zIjVzzw}`sZE#gIei%5>}T4rQW8^x>7@C_ns1UDHu5&4Gil2~m7y@GgG&xCGcFUnAE zRXJ|q&DvKm*>s=JrFh0K>3yJQ&@_->%|4g`jEeHQM^tiXPBO>O&{3x~AdPAmQA|$o z87H@1X`$IVk;`tU%6GmY8+=vqt`x`b<+5-q@d>Mo?luK=lb~94xw2fCt)=*WzCq+b zKgopmwXfNMdhAZL8obaFVf2aKo=SQ$6m)D~Z7w)IHX+Fdjze93^O$H7 zHjKn6!;@e%lZ!{glR$daF~)%zzJaU!-4W;pcbP%9aTv|S*LQ5FyHKIK2{|5kgnce(CGa4TJ@cS zu10ukBZy%VL9Y9Z!fFX)m<+4T=m5jysnYEFX?EUW2b$fuFidRB;0q8(Y{I&Y0?&P< z9P9Q2Wi7sVKnxT2hLSC=yozS&1UI_aNBSD$#aM0)*=H3h@lgtu_%w^Hv&Rdr_vpSC zQ58yFq;dq4yKsc6n)Nn!%-r2?y6+CL}uiD7|r%HwEK)iBZs3nnU^C7{)e!9_IT! zqgrs@5Xbuc`Z=9Ddz8wZ-L3$HKzqM(XMZ&A+}VepwZ*IA|IXamqe8i}zKI$WqeXLW z?08BFfiIViV`nip&A*EuLhRpiCq8^q@Qs4Oq`_2+b6>@8#F z#b);F@7_|Dlj82zIVnetnHPK8vt#AO-cptqd+P!7Vt-VY7kl5cm3gs03gxua?GNX) z9D9JA7Rxbo=~yV&?+ zV=#RqM@DyiFy3K|mOpU&LE3+7S^KX9?N5XDZy!hdcO0bsU1jZyhjja`(Ec6cX#f8l zr2Ui2+K&hAH$nUVXB_R{d64$sRn~r8(0)6#f9E*bzw03FpHkL-bI^VZw13w)+Q0iC z?Z2n2{f?mhW@!KJakPKWLE3+BS^Eov_NPMo_l%?cdk@n7nPu&-3EFRi_U|1>`#(8I z`~Otdelci&Cba*PQQGG-ckSsqPWzm)IBk5_yr0ibTtj_w>9e!)tik-Jv+1n)=|N(t z%lq9^(eFuT>3*BX(J$sqolE`x?2!8XNJYOJ_UL}6j-y}9v-&Xg`|pR;@4r;^+aA!l zZ5;h#PS*L!IJzQ@;-$Qool~^xGHo+cb`T zG5_pR>i3~T>i5eP{jLuBZ68O!m=|^h_4|th_B--CeE1;e;Z<}Vy6QYU7S6*qfjNH< z8^h`EP^MAAcvB9@>*P?!DX~UNp%2je@2X6so;uXh(EGX5URw5UFulVbeO!-J#H zuX84+hjJz#p)>iwIg`JvXzPfetqGyFemRb|9<6BWn4qmpsI5oG(bnFIwoVG#nj30s z?j7CK|;O4EQ}jse>>OI z+GAi1J&gWApZm2Osg^&+xK^;07bBf@B=)UtDrdl+R*I5wn#eM7qVQ(hA~$=FS+t)tvUBPt7Mz$_h$r_TGhuD(8oK2K7JAI;{fwmW)0Xap*|*!IuBp<@g?YE zDCpy-f=i2{QcFbHjyf9qSxA!vdFDIbG?0i`CuzE>LNP;0#+exXJdH+m;}~8}jJM7;?KNdH z%&Mh{qXB1OFQDyqptqw%k_2Y;oETwGhn8tdhl_YqT0{^<-39kJE$1TM z>^LLQcdMvjih`ak`X8ApGLba=ERP&`P~RkM=-q~uh;v-apGk|yYS+}ylr+zGuF_n4 zalCWNyfgi(3e3?uQlbs^VcVHp*=b&z$jpXb=Bo(L1z7X+CgO+NQ74VhgSIvqJ7H%& zVdU)h!CxEUFZ@@qW2UzdBcs0syZbA4LgW&#ySsm7$VDmPrMg8f#k>5$)NuY+G5l6g zGX`TSKBI9_g8FZf7U4e^j{1FP+*_QW=r;*xgtrv*a%VBqYga4Lv40nNb05;a&J%g} z>-g9xM^K*1Jl%toEIRur*IVPXUkE)TPCML`ZlY{2g^+!%Ldbs9iO1ZV$*;c*Yuj_Q z?1MCN_h`gx$9LIDpSEQmQXe!phofQNN#lYYx;!G>M~L<-VghSC$d!0czZmY4@%V5) zp1cWT5%aO+g(Bh+_0tNE<8Lp-aZtp$DhzL8!XwKvey< zC0CC@)inWC*D9(WHa1mHs-WtG5LN$l0IGf)sCvyIQZ+=;0OkC4wWG&DtC9HS4p$5C z4lhyacBa%$%#8ID*@g=&xen>n5YXvl;od=XS`T!(i|DjL(P?8s($^U(H+B7zu?up6GW6)_!K&P#WPQ|h5^tK8*%?;7% zZwH{$cY#h{{|C{jX#ZxM`ci;GUmMbzY^s@ajjo-XNwL+0Z+aG2PyUDMRod3|Z-HO? zi87qo((}j4o_{5H{y07NR9woQ{ftAV<5DmNWp9RKP_kk<{f3x3bLlsiY;LC5(Y?>u z(eoQ)$DCgqJLW!Sl%h~_;!1Nz$K!_I(Ig^P*0|sD<$6%Kvc}ah-{;@1iuncnZ8*J; z>RRsTcoJJMik*+c%5JgK@Z<^QC&Pc2sIl)b9y5|5TjK41VXP;lfwtLdU-!@cQt4;k z7mA;G_x{TGnQK5h_`#_0Gqv#M=0lF3u~eM#yB~4{ro0#PPX$diUBhL&y%#X^j<(>_&(xrhCn5%lwPxSy)wjwcV&&m9No=jn=m&JOzd?TGmt zte?9M(9drx`q>lo^UR3(Jav$M?ma+1&s6kte$dbFM$G46{rv0z{rs+?pHBw;JUe1O zPamY8`w!61vlab(Ht6T~Bj$6kejYqPKfkZ&=LRJS zVm=4!=g|Z7v%jLBuLk}6VZ?k6womsRpr1bk{Z#rlFz)4X@^3tU0RM)@ko`LJi8kc{ zF~?RFmlVcpl00EJhtD-S>&mG|1{sX-GL-5X2^!yUMi-~Z| zBW6awh|zTPxh)Fg?GZSuf346hu?8sSEFhXWBjw#mnm`xUpyU72 zG+dHPsk?a<+(ZTANTF2pDUOjX7b=3VMr9<|qMh5PJ8Dr`3i?#VxV*L$_?F1|zcR7b zxmV{?7K4W|$fAxS^W?-*t!j)m)X{$4q&gud!*_CM_h2laS}F6AvT<0C$p<`K$5qf} znT?}S1hxjRz_Ed{Ng;qYBg#1=e-A6WOO7m?=cM~9dGHulN4qm`%~MluoF zVw5C+50Mr5pp<1wFOP+3=}u9;qyi zRC>{wLiWHY=0t>y^oYU!>%>L>M(Y)U??+(dQ8`mr#(jk=RdxaRR$xJeBK>m>C~|mM7Ex z@Cdn#HGTZlJYXEIbAgxUxz3gSHpAIchPHn{TD`iUn$y5 z{IrhvUZb*Mhbf!X^QH<=vgi9LITN$3SeL&fD*H^~zC5B5gs#TyFdF`#x)YRD=yKcu zD-Z3cems+^68+b;QUz|bURc5}5@qvgAy+uGW^g7rxMr)Mo&GB*3i(29gE?O9Fsv56 zooe~wU283Y6$ zEw1ot%0%cU95(byb&DEvh;kCT$zSz=U@z5x2%&+gEWWcwtHf)$PFWpZ%l!z@{VWTSQDRk#ZFJm_Qg;z8qZirnGKuNh<4K{zd&H+8dU>D%mW>yAmDat@a;4$rU*o9uM)>9 zdERC^;**w^=g0g9WN!YC>jxiM08;O>8*r9;B`zF zxej=b9tAO-SF@X>eGhzU4v$onMhddDLr9RbvKOWO+%joDT}%6p5z>A>N&5v#+GEQL zm9$@^r2S%)1q%)=?dO8Dp9`l{FMNN=T#gM`Izrkn!x1hSzqIcQN&Dr8B<+`vE$ydk zX+O72+OPP#rF~nuw0CEblwXPUU7|u`mdI7*avtw){g+~#qWf`O;6zr)c%rJzuULdYn!?T0m)?&@tR4^{@Fdmm#(m%}Md?eYyBY6Qw zq9w1irj|#~98TFy>#(H`kf@5|Hz@Aeh^xI$ge%v7+zL(r=9*1Bf6OxO5#DCO`*#b< z=Iw!O_O_yI-aLwI9tz3khm>sY2+7h*Bf9;NEH#6bdkuEO^k`5kcD~~kqlEo{^^xQe z7zCmfHMxznh3E}?&EAxne5+7G*K-6JMSlVlP6tr|Hj?~-6 z_!D0L2n}UBQeoRcsPObCRQPyQw>=6KEcZ{Ef9F~5Md*)`JInxMHKdn)s(j|U^|OO4 zukzMaTtRDvz89}aLEG0&Ez^N6J!BooSXHoCYE?^jHEThIF|;787rza-v5v3}5t$D5 z|4xHAKT39!c=8si_+cgML5}s5Dm_G4XZnN)BVzUslg_lPGVjeZ7LTGcEgGlJv|ZH> zye;O4y8;`?w*P?6v~4UKNdM?I5PF_Cjh-h^JF>Eg-E14_M_uTXmAX(YoBVXeQ>8!Q zcN8k|UkF8ZkAXko)K0PfgteggtY!TPvnI2G^(Pa~Tc$bONQnPJ`jf%>6Rr`)c7PU= zF*%Z=MnzK8DjjM9>QI?79csDcNQzFaLuEjR%76}4mu8#_)So6I&O$xqEz2^!$qcl7 zZ*skmIrvV#q(ilus1=p$BRYSa+fs-WVI8VKSPe}EXk!XlqeabRDiWTXhBOC!cG<^-MnZHQ;UIuvrOY{%1V3h7Xpk`85XyoVtD$&Ur-z^ROF@r z-KS%G#}q#IX5+|@Dvi7w&ppJqYfjce50gU}wc#2q1=3sD?x3`Wh&RU*84t9E^MI>8 z)*3zvItK8c$6CWj6*}k#u(}$28ow=6Wo94l)o5KAh_D*E)DqeH} zW5(f(4_EP`*L%T?IbO6kCUU*7UJGHSi;%;5IWs<=NZzOTq?fTR7QbF6mtYjoVv+My z4C~@FMQt!P;H$h6%Lp^75BO&}yj`Kjv{IpstU}$nkH*xZB3L#jf-!M^@oIyxCO``J zK?`eOhHGIQhoP64r7+$T<>44%vxel)#h`1m{JB`vL|Fb@O!8;Hl0S$7pnaQ-3d>?- zEkcf~^1NQe1YA+V1e{@e>k=XZ+6zVYte1qx)89@Kk{*i3ZjE z6k|emEfn$y#Djn(T&A8`|jtqQ@LYUai2ov3gZIoGZwmBtP{>9*%p1Dde zqN>J52vxKXG!W0OM>G?c$2r$RWC`~pGS(y*E#5uHxG@uBS^f<;Az3<;EL0Ya%RoZ1 zq(G~1|2ZU`PpPDtXD$FldF$Jv!Y)7C`w2>X5U9v2nswg;3VE|6YIKXxq$LmU> zUZyO&ty-eCgG6nA)RZ&e`!m~>9RW|!nQWf~IdiMx*_niKMwqf)IxpfC)=6g5IJza< z1Li2bWUjIY^x~P(U1kqBr!)?#I^uPEBG(N&d>(oaxF;5I44zC&W16x`me%_Tiwi_>Q#x`w`=! zkWJtcL>ZLJ9FcM0F7+q6OI=cdR>oc=FRW|0Q{k4U=9_fvnzOv1e=}+M2cpwkEj=bIvx9tUeFM%d+}BQRA_!K96MeBT7~y zqL0og`!UK?YCD8Asw0v;w_V11N^!`Zw>eJz%PkJbY>(^|*jxYGXr1pU#|#=tl@UIi zb&Q${G&q83aX=az8PMP;MT2cfgKZ@mAdV;@fsLfWrVtH&_jk}Bh@bP^o5-88U52W} zV2u)XtIuRqsT>B0!BqN+W!&KF#^=9vqKhu-cc+7 zbH}Y;=s1Y4W*zbA|BZwAU;W}gtY4Jm`oZ)I%zydqXDYd# zky!m`iqRT63BI8uD9d2iA&Y!W=3_#iET4;dT``eq#P|dD4tvTD(0@FgG2hlF>p-~# zb;7lq+-aH;Xc0nGN$nZ`hVqOzIYHzFWf7yUgJ@ttXSz1XxsH~j4tiCfpLV(}&cmt# z@c;QJN9PO7^a#hwUjsL0KkCO(j(+*`=;vWMI-n#dw~~nhFSl2IQ;_H8Lh{_;=Rsmb zKw?Bdjz*1Z*n9ITd!81;o`|C+MKf(rla|C-i>x`I7sm4ziLihCPjS{B-mbL=&`#Vx zQ5GxupZXk@C(99Ek!32Ld2$6x=01`q*94iW*NB=Z%hYQG<3_VQq3VDt4to!t{M3G^ zvY@B4d_d2M8$T-{fO;#HOkL#(3HpiWtt5Lx|9Q0Xcj_~Dk6wAEkOvgWlcO34Ya5P;`E|71hXMPrXH?nunw&t+e%iD_2|_&oM>=SUsTCfMGF^0@ z<9_b%lAh*&o%AHhi4pfpwd7nnPRV&R$W4sFyrt0*mr;)44v{rD))1q%udDMSI|cs5 z5WX(u9->s_iq3bciq5_?rs8Sgo9;wE?k_hM6)cvi)%Um?5NG&7vc;kP!rv!sew)8v z6z-a=RYPc#YY>yPDkXANaLe)$bC~5AeBSYG&#DrHL~NFji2L-ZRLb;YD{rk7x!PZu zn6W4))PU@&W!a_V7Gf#~a%*BpZZ&}1np8vCg$0w>FC%5nAZtv?ccI(K8t)-V&DGBn z$#l6yL+^hGi_^=K{}0dT24!_@Qj)D1Wid;%P1^gfe1E2vXp;=ez?3-{U&|yq>pjdB z6fJ}SJw(V5S@UNp9g~EWJ3EBGd@%nF5%zCwGDn-H;E`Nb_fPrHF*2F#w4cfn$g zTpso=n5ZF2J14w0MCE2mS*BMFn)M{akf?@nHp1zMUfraS)6kmUPW+C)Rm0P``ips& zXa1rm^s-2V4iX|NMhdQ zT_Ev!Wk})!1>_uC_$`ASi;ba^stO;CrpB!FbSkHMmgl> z3a@bz#f(r7O^qVgv|V^u-9{`)qZPoz_>mU)+&qnt{W2qD&nK_Tf+oSP~K_?z$I9WEQ`gwI%QI>ysR?p{gMZ=}cse22KH z%AfDz`_;6kTnp&gQ;;KDm@+Fc#{DcYl`m8ytzPwUB*E=}g(43ETY_~~V**PW4waxdQ zEn&+waR2iLYBSJ0jAJ#->Jd5Aai-`Ko;6W;>*s-1utwks@17$uzM_3TXd^3yx7iZj zro8aBEEHaT70_xeoXm3CBH?XaExhS7L04Zacgi^y#dDsKi*6J0DBL@B z9OJzW#{nlw|yMSi&!qVF_D;F>ud=v7aV{%2mXetR`Vu1>+`TD1W=% zDX>4zN-P*R!?Qc}GoPRR0G{2WpB4Do58>HQ^|LO1_9J+9pMKWI&u)Qd59nuG_}Q)S z>=*jk06)78p8ZlkJB6S97@qw~J;OURKm9&Dy)}3m5#h{9&bE93*lQ)s99>htnd*p- zNnE!U-!oQ__RBiSZsWN43S2vR7p+}BjKX1uQ8?THg+qNOiZ(bzP%vf;B>Aq56@c9z z29-hlQoPd(O8b*>)@72R${@K6$Z@J?BB-i;Xm=Q1ZH90;{NE6Ab{*)-^`&|#)usfE zcVzsHZiO_}3~Sr3QzRDF83AeEfaqyTQ=P1KNDejChH_2S3}UlbQ-!{A*+)$pNkbK! zuvyl>8nF%A#t4qAc{x?T=|DZq%##jgj?hsFXPah;xc?b*x`EljxQ7vE4S(;Z6Db2y z9IaUa_Ppse*%Xr^n+>WRAzM)EY!dyQB*Ql!oDP5Ch%_5D?0^PSl(yc6t#M7m4ow4l zG#cz>8cYNlG%yXQx5*76HyQMEM% zBwu}i2(u|zjRsnctj)C9PEw3%LRPuCYq z@a9(uv7hpNX2>u(;X7wi-cxJY((>FB${*ecZCjBWbo0NWJb-2(5ZmX4Tb z7du}v2GcTP5dP-N@cU5?;cqTIJDzSX;cx!%S&hH>dVs%aD%tq>EQe@V%)ep`r%#Bn zG@q=b`C$4CdQvsY*#8J)f5j-#YUKMr!}~u4?>(hQ-1`vg5&BHTj{P+l`>Vm&T@{o0HyC>@(SE*NT=r@}d(>oLSIXk@*Jv&{PFjO5 zUQ^w6l-m9awEb6OhxvNYenREW#(v?5Gm$2j{>8xRZAg>i7hi|=2V!iYYETxc!L(0N zsKXr}i2cam^p@fm|6&v``)j}jh(uMen3`C(kf~V|#V@^1Bgg0{euC7*lNqUrRkeg5 z3kuM)3(lr_j?%ysJ(r;d<_wb!vnVI4+e-_@-F&D}G;_+T(n2?-56yN@EZ404`u@{N zW(E01?-62*b$AnK^+v@yeCii^9TvhmyfMl;yg80_5ORk!x(j>9}48xB^{f$b+xL-~O*z2NP%|<;ZoI@~~cq1+WfMR<467N3KI<+cvaq z$&u&8({L`W2+jyw9{h~3CEma;_4J~2h={1E)v>zbm?)PAexQL&$$ z5ItDep4j1t_Y1Uf@c0lzWL6SKlNR$FUE>CM#)0t+<~Ps@TU1`nCLe2rP9rbgfM~Rf zTO3&|xHK!A2hd?FJelp4(KJ7&bdthb;RTe+%2#T&bq;MyD8s_1{BOjh)cdj3t1Tvv`UgIXcDezhH1hMf*?qfUBM8R5a&yRw99z~3#xcNd8A ze+BXHa7X0X;b?~PEfPmF6X-h)ev6krX*>ljy0BBT@+Yyud@6?cECqQ#d?(^`!9Hn( z5hdwq&iEPXSoHnD^mHjI=D@XA&Vo->Ib+vec>vCkl!Lep5jnovE2lu)BWthldU5TQ zx2W1H`rMlRu%phc7|<*V=T;nMd2dYb89cWZz-ML?Cq!j&a|~{UhhgO;iS>WdvbZT; zwu`bdl|Jy^cuQz+>{5FJD|0?Bn#;ykI#ZJ{wgikV6|Ctbm@V?b88F|iWTl@7`(SZI zpw0rH9ZdfV?b1`y-%vk4jVGAdYj(h0{xkRt`12~z<1Ryso1JyqGK`Cvv(JZ5UrzSp ztlLgcPlMACbf)}@$Yv3DPf1^b^Y^e#PedcVk*5T<=~2Az(PlRKLYA{(2h)$oBXF-R z#EzzTi=mE3;#b4j`XG!r9v{sA)c8F7JSAO?Uf=|_mk`lpZ}NO?kd7xFAt{o!6)M>{7lw(56uF06g-V! zY@!RsYPO^%CnpRi%XI8&sdRig;X~i`Y}v97w2>5dP~2=b@Li;3nME z&8JNttaWM5-!PC8Nb|w;@8TwW^V#@JXekl*o10d^y%bc(^+~HLlQzV9X{E7+<-#*2 zkev$Az}v+se+$odIQ=p z;f_zo8_m&c9;M}h_4GO?T$AObhjmSstX*tO2mOq!$x_nI8=R5Y_@C%>6gGZ#9N73+ zBOyy?P?bEC+6ul5jfYsbX#$1t48+AYB*0O$Q@SgLFnH^^pC1{rvUxGKz%N?i^tUl zx=C?hf-JiyO$kfuXX7l}!kl_zJ#%Vtpf-@jigy*)>O7UPC3^AL2>~U;+RKf~Z%{nG zb`0%BOK>BjB)FAd*$;O=6LiCz)la7~-r4)ZCI9EXIQu_`mu_*4E)`J=E7vEw8$nM=_s7HaKT15>TEU}Nbuy+;F`b3>ulBfJ z#*Lm(pQ~KcdRWssSksBHrdc^QUp5?Mz1z$7+YP~fI}G+)!#MWajEcE@E!b~|jbp#< zgZ(y*_S>Wb>^H6Re6!P0I!_K{tyS&WejCa&5U{ezGh!=47#|r8JxT zq6l(Wt29G2yS>vcM-S@(*9{cF(k zIvmsw?iIsFOp^KK=$CJ+(D6p{LvIB?><#!~>p1w~3E+o0#1E~9bpB2`2(13EeElA}X+fPSvL(Sc`)Iya#G;rwO?EpfjD zjbOdUJouYLElG5jKat+*7-PtSwhCGBcpwXQgk(Wmg)FFCpJf&6^ZQ_Z7LQ|n5Fc>~ ztxx+w)~8(euYwbKd-<*Ik3ZpVgp5dWyxsv70H4RK$ho|cwv)#GisM9Zo!zDI>KM+fuk>3*u` zSm@GooKbe3;`iITMxLj9Dx&{&IQ_425xR+@#rO_<0zKRsPm_lJ44h7f(Jgcn@YRpw zjiGu)KMd-c&XmZ*wW?mx`ff*jiPpFV-x@RJp!A9PvxS=>lNStfT5(9EcDJH^{H5?@n&i_H2-&vqH{Ss)GgHs|W8RvJFD8^y@0rtUCL|(R5$cga0LFLp;QeL*n7z2|nk7qJCW@ovIXQHUU%{has33z$X zF+uB`lysFLkcIzZHG_WOj^msT=>G!4D_FvpdOQ<%J=e0%{o4yV7qIOSsR;zH=-@-YKaBFc&?qB3%JVQPw@$~S zA0F{qVuaQ%r=y3l1$1v1*9=eSSzSq)kV2&Kq<+H))_%k%NNILXRjqQrj#&)Db@s=tV_&Al%Jz8C? zL&L9L0H+`BwS_&7xKZL>n+Nyw`MBRC>^B)1M}7;&G*dLfqLI-Ej01tYNkJQ4g8N*!DftV8+6=DP2a& zm}-7chF$wz4}A-#RK=s*e-Z`fg#(YgsR>z?U)04cvXCy>T;_M|HkuY8Ke{8DA!2PKIW8^P+rXu^` zLZpoEh3kp9gVaY3;}lf(fkMSV8a%6VYrd>N>ryJB4SY1N*^JQFTG#PnU!<6vdB9H-`)Uvjb+x*`Js7w*}>hi1wq4pMK`;_I& zj#b3~sr)^SkM)yWVz22Z3n{k5q=eTi153{=@oqy#<|`}DEV9I;LY5fhyBT3CPUe*N4$m$+Ws#w#|3MHf&YAXkhF@ z3UuQYaK)G=*5C^MyUqY`O{1DC2EEQ08;(2Is6&(u&EIE?Q5gu=@lmoiYpF4;P$dQh zM~3u^w&YO95zgLZoZ>Uu+@X$Q@RuO{Oc<;&FTpzk{6D4c4G*qxsCI!b+{Y0Q1kN#$ zB(0L8Zn|LgID6qm(v{q5jFld6VcZ^%Tj#QWNXA_p_o*tE9VN{!fwdj7@ed|)anxP+ ziMvH1{s`!#lbpRG7vBo&vR7apjINcl67$T@#(0`4u@FXxcCxPkjqeQP+yYp+`9TFu z91HWZE8?!(YxEP^o5}+IsIEU~G1}W#)VYcED}b95?oV^cfOAq_IxhStWK}7K?2i(2 zO)y@aIcO&Fk8Kxh=44xBlk81>igv&PkfHn+ax#0V8)I95hP#auVhb?(T>KM8hrm8! zd6W{l)TN}edex?A{0&A~`&LgkNTjNy<<(XRtb0new#-_JEx}bliL^vKY*~ghCxAo} zgj4qgbD$2i%6eG$`hJnkMq*j(L_%O+N#C?F<0ko5dh#Tk;c%{{?lOit{%EI+Tncth z0cU@Q=SF2#%1AYC)whV8YC34f^X2H4_p1griroxk{2{SXj zo}$%v#~!nq#6T_dGXeUU0R7ZKKlO`~nT9TkqTX%1P4(AQ-e0z0{lpkr`ZxQ>X>T&L zIvM-v2+;#7v(`2Bm`l?~@~MPv?BoM5r5BD$qJ2lp#} zg0%h63io#Dq+wlob*5PE>3-7B^6wDXccWf0QaMyS2t#lou%Pa2<9jWXsP=#zXyQg(iiv8qQ^^1{Cm7!u^{6Jl;zR zCXe*zDYUrq=(Obsa}^N%(^xo=U=15JO5lMM42E}3b!B|DndJD;guc<#z>TIx#p}X< zyxJO(nE*4Z!|&qRir8bd0&ik6i~7%uB@M2ZcE@l>}E{@#fEvw*i0>Qh+^s&p?eMWD7=?oK~3ki_~;e5&9%*8fwo zDeTnMqJ9*t6z=`#f%FWN?K?5^7;SF2W*bnp!kX=u@dU2f&nbcccm~dtU2qFvbk=Ou zH)EJj=>dOIL~k>$Sb-vX4N(w3H)IRkR9i7GZwh524t2zxyqOcMix{C3s5v5?soQpf@8S<&O>j7?maV{A>S);j zDVNM85M_OE=`XBhZx)Ozfb-5z81TIrz;$lKq6q50nT;F#6w(=a8c)ki5MLog&-2TS zRS7HQ)y9;?4Q&X#8<8tz9pw|$*9wfMpv=LEDs!*_Ep7D&&K#__sp7gfsh;n-Icyzn zvU${vCJD5;c#UXVmXQR-QFSun*Vh*qvr{*QXsd3veBad(+rt*1&bN!T( z;y4~vX@Jims&{xY+_jrXpYoq4UwkyR_syY^19YI(_Xfu|k>oyK<_Fme`V zVm?VT)OW8>sto#*ML8YeYympLJv7erTe#Nih!eJ^1pP$9Wy>=`i?q@j8Thu*@3@r5 zxdm@!52sRwCnpGL)&cFaLfR9lavlPxdy!@#ua1Y#lIgn(^_CH(F%|Lcz z6cI;>b&=%%rI-bB;>#vm@Atu9I=Tk!^A7=ytDTpOoaFN-Y@a^|u@COc8M{Wg`@#8R zw5vF=x2|-=Xa1q`cOVXDPvW@=IE%d^8ppHeZgFT*8P9q4WMtxe?%amii(9V~9kWr& zAtp4OJBeknOp?!?j{RY;an`INzeWf7Ckt@985YYh1`cR{sX3HC1tb7k+f0R}<9;od zgt^n{gh(|5akea>C&8;r3R#~f)EdfPny4^j8aP`JY0{`MWKygX#B~l&ogs2{XEFv2 zS_pBqb1H`^k2$paiB3x~hY78Q`Ar6#$l_i&L7z=vz7yz)_D=f_+smN8@g%ZD!Fg)S zf-Bs)IrmBv&z))yZBl57+VtL>U`v!m)t-vR1GF~^0&Z;f6gAfR-{v zoaS^nAo1*|IpDU+oXdB&O)lD{!g)J+l}&PHg-+mJ;XmcO#(PO0gq=H~#eJWj#A=NF zKck)czA>e^k(Iog&}S~;{0rwUxwh{T?A*R9JL7(PbOC51F`K#JhZJ>Xg z?A~1WpCh}C{T0$X@zc28Ma%XN7>i3t+?GMRXcjhG$n z%bu6&#HzF!Cz1YjCjJ&+cplmd0CwD1-MWe+Y!pYi0STM-jqHv#^l$W9zGu=4m18;J;R?C!M zZYY1Ovov)2b}E03s^ok@S|2 zOR5`tD`?|SkT+!t`-{Cc^ro)kXSj9@&+tr;JWs;f zEDU*uXNDwCpYjZc@p0X6`cE2v4A6!xlzz;qkBiZ)lc$oeO2)|S&3@D!#rI-_Ioz62m!NJ&qq}spLD;%*=l*fB!jn{(AYUKG&aBHs*E=rl(<~pNl+xig?(zjkXtgwSl`q&&*npSiwbKz%PJuwa#q< zeE|b@mDHB9xi(@zW}+PeZm>UhLFytWb1aA+@4I2VTWEgUoV{gHb6F!&6CU;P;~e#| z2O0GZYSh1iQBMg*J!u@H);8kvmpg*$1CNLq!Zm-SEXFBKF-{K6Zog>TGGOc*=D>{mHk}nRmy)dNPL?Vlhr(z zbvfe4sKFbP{-Ju*P4(q^)Ic20?Q3(1?P4G~P3DqtPw#lZ+MA5W`Kg~YmXyUOR3%gl zNt(5njM84JQG2N>*Itq%@Pc3y=BoA*1`^#)YL$(FEXq}6M<1x0DltzSF>T0d(D97b zVU<}8O1KMkRVIHl*P31XFJy6BNOU;5F3*et8-d!SoQ zY?FShH)admJ?D^zx9wTZhP~3vi8IWC!7Ty}4cL7Wvl#@+!Stt5@3eZYX3AzTQO{Y4 z*%iK%b-C*4dxXkVbBFRfot=aO@;>n)_&e*}8N*L}i25BCZI3V=V8tgKv|(3x@^ ze?64m;l#&TH#r}lMCXmI=OF7 zZK6EJx?uhe&XWxeTAJ?_!%MR=-8C|HtURu9Rz+On-VHkbcy%bQaaJgvabz1E6>U5j zwDIjw8y!I#I^X8G4LTQSw%jSZA;{hAvO(63SIcTQQq-J|wf znJ?BWcgVQ`-J%L7H4c5QM~)ckmA=s%(Ya&AQ|5x+us0UAMxUQxYjoB=kvOE3eF;xQ zc^+oL-Vb+}UCw*X!&u^i^9T6r9nNXz79dPp!XyEJ!y!vyOSd`;VGgxyr1JbvzFGLOhg} zK$iqo_7KO0aPUamGY%z^&5s$=2NHaSQ*6V5BH3cBr%nnY*#bQkeSdJv!-%3I34uxb zR=nB}*3$%4U4vrV%3@=(;n)}*n{*^;w}?}eCQFGz5hi4;6QOM(j1%#Ov7C}g@f+LW zmb)Q_b|mt+hH6E44H&tG)m`+x8#Q#QB$HDWt@4QdI7x&nT7Al6e6k*0MFKQ;tWq_yRiA5vXgwDKfg^IEQNqmp%sknYG_JQP&n3%%25q4cMzmFGZ?nqc&;LUxL2)&cmO3KYXrW{~l!4 zi4Mkq@ttRd8l*i`ou-ki~C?kBPndXjQ3QhY)s#d`yaD=c0)e{4#hJc80H>&ebU zmx=B#H3IFv9iqH<0LniHls~DA@@>;fQ51ve_Zgt!MCZYH3f3)V)_yC++Z4qVD;M2E z`pB0=mg0EuHyvG3njPGR^Z!Ka`FE`-a@~SpMHdDux=5|);(yeN8aIx59@z1idlRhb zk}=mb{m(XG#@Ok~HC?9HRQ9PgP1gx;c}$NvhGV`uw65={*g?xf>u4Te9iKObI^OBr z{`c$vQ$Vc0AQcn5BZ4!PD{LA)P{`9ZZsDK>9am1 zvMH86uZw8ZOC3hiXJeG5&(_e%d|N`O76a+?Y`}9-_a}Y|t1!3^ko4IYNS{qn;cu6l zWBLTwYgdv!KOUF#QFGVX3O`fX3U9>Nd-|ZpuucQLx1`z2y)}?L#gUR{ONHdQEma|T zvLnarX5GK&IWM#^hLA`8D2}=YqhGR7Baw^3y2W_i5NqF$yGK(^?jzVsh~s}iVPGWDy-W!hu7^2QHo@F08zK8 zMWSsr$Ci{?gV)Gtx=gO0AKJ$_x^I_9O{TCmWY)YQgyEP^E(+1|gK_qRomv(@qxCzt zwuB*7suy*+*793n*R{e)GvyaD)7C69pt%f~@ep$Fi`5m#y;C#O3^-|CfK&Nha6k8^ zn<6(oVeWQci?u2ra*;BA8i$q2+LU=;dh&&;Lql*VuDr`T{u_$MaYN>E*v>rUia^E&OX7;bgfqiv+ z2>a^PGVH5m8_Th;+EqNj=eIkek9-PkquwD#MbAE@{FvAO?);cXN6C*dIKI%R*7uCM z5T>7F68SdC{B<;tMmU+~^3hL*l5)|@CO!CL-v_+-wSRrMuquLe$1HxF8IqyWhp z=dKjSNS#RMTQa#-eQLnAZHzn1$MDVI5!Z>WN0c~`yfYq0dQlA+2k#u{OF<{~C*f&NPAx`6%4v*kc-s2g2lfeDWlqv?bz3?mpR&@`}mgh za*4T-6c+>k|LabNuv0Uz8=Bxd1!y}fhZDY;v1Y@ZPjecV?=qGllBjw&l<+edt221F zH1zJ2gx{30dV+U-p?5uwKRaV(f_IBU?_P`f%QIF@@NP-y-94tiHDhfJ-YpEhyW8}S z&sdv-cMC%A?lt{WGu9EoyG8VF7tl!Ce~=#D(VQ1K)L|vkvfo@TwN+DyIz_X7V>x}t zh5u=K>p1KO;U zCENh!#+{1h#q>I$#kr0M<%`ZZ(NX!L>nUIKD0q%`pA+Ca|Ah4q+#~Vr(0b{5IS=c; z7#HFG^M(6SKkhFz5(U9$^V#>f$x>Z|jMGK**ZvVa=k}PTItCF{kLPvVuaXxCR127^W(#SEPHObFXjQ){9Pg(h| zDby7k30XOrOhXH2B9}!PKj{nKK;#|7JuO9&W8Ga-^faDstP&9eITr2e=mP?Mv$j!WzF`q)n8?Yl)x|GRan~hwe_zMTdnqBTBgKz0K7^ z&gA$7tnr&Qn5#K{VFpPQL$ta08GMh=&4J@wP#>cL#2s+!htkC7o9 zGv*6A;bAO(GgjvDySdi!aNdEHE)-rdJgc6taAo~W!cvt@Eg%(VQSAe_(d&*0*%KFX zPC|IG1|b{Tg%|G-?hGlLg*O*;kKUA!si~mLb_#DEoNVn~!rkB&u|}}F!#L4fkQBzC zd)jI4`y7qdit$p-N-r!JuZQI1$5r&laDW<&G<+NpgC+m|1p2c-Sg^QmVYPHuf({Xx zOZ*kVN-Nv3I0AZfN|>|{izdUp!FXCqn1R^{bcR_(rU@CH4zubOGTtL(Vvg`qy~0b* z0}W|D?9c^59sv^Akm3l?4?py#*KQHFl+grd3>5Gd02Svq;EX}UqZXj*UWYK5ee^-L zhwVZqhwMVglUIc99*>&FEcbrGy;{gNWwdFSv@Z~`%3Eyd-z~WW?|i(EIUjS6LA(Pz zKt3V$IrY<)OEJHY?}(pKNb~eP_&ko3c*X{vX-A$}-j9-kc}CqT8fktUYZI;&z04rg zYRY=(Q=ZP{sD~}1J-At&lGSEVkC}D42GHpm_L_t-y#jYs16Ltmsp2PAl`EtFZzg>)>pgTqnG>DmvvbuAn3j$2z2IXbx|vh{F4#Jco?7LgW%6mpekW!}${B;Ew*fu3>*zL=AzW*`DP=;p$(PG44?36AgPVZ=JdG|_Ckh7N zjlP(|iU@AD;#R5VSv+;ULY`z$WjMo1wC* zZ1*CcVy64AqtoJ|%1X|Z_l>8~Etsu0N)>CD=JzX7zne@0Cbe%}bKY=Bm7q!IMzH^~zI&+HS`{buP01MDCCJ9;9=+w^)V(d#Bi z9*1Qy%3&AYq~Q~A{t40%1nUUsxgE}@lK8%hZd^z5r;HsF;ZsIe2G71)B`<43@-iz~ zmbT(b!@Jgy?8O@lvsH-ux^MT~xjn#e8JM0PmS$0UhQ%2bWf#OzmIlSaD2*t%G&6{((L_ZBcLhWi z7r+(NxbKh{HSWf&8h4+>C5zF-Eo$7pb57O0eR~GR|q3nQnk|jHUq31)lIMwKV+yV7X z;q9w%rC*9Kn|o(Tk)Ad3=EVewfNL!t#hsi<8DYhAi&GR8PJg_M|6NUrJ0{ zI*Tim&f+3?&$yQLR`CG%{o)9nK+k99<{wfk6Jkwq~?O_yc5H9-gkD5dxtpXw@}#&-ITp+I>hC^ zozgA%59)kQSm&u->fDvL4ZQCn-beojye|oPAKZm^1^h2aTTT6a97wN)e6Co;=jtc$ zxyJE)u6Yb^vySC$_TsYrMjQ+4f%k>Py9Ri#q*g6xlOi%m--QhFc(aCHZu$9(d1-&g z*B>HZvI(+Z^a};_i!Mw_Q#(A6DWcak^8EbcNaH}Q-q(+F1JwUw`YO=izh7oy9y8}J z2>Hkd|FO9VE7ykdQjZdVO zX%E}DL$&cc|8*OebCPXkhi&Xp8=nqsd@{80X}nE8mA4r`; zmP&N&=Et4RDX;M-V_xG=qrB?>gE6gId)yCs)T368=qB0Pf?8Y1)-L(adZL7z-4z@5 zEU3>JP@f+|eSQS>IkOD!AM3IB7>Q}RfE};D1)}0O_{`_d;tOD$;12H0#xt-kjX$Qk zxJt$Za?#qQT*P%LpF5LBk(}>TnBxmL@a0e+PW9okJ|#To0ACWze-)GwwTv^Mj6Gv0 zzc&3J`BMJBK?T(4#FKW2dWq1+muH{K$Fg^|^hfN2zV6aWAEo1+enkJ0_V>6zMiVc( z^&7b_K(F;;&Up8*pW4f+Q~r@@yz?ymA{VHA**e$m9fzaK%oO#ExDJ-yb9Lzwi*!W|m&$jD`rufhDQgL=relI_$5 z)wJ??0}-9DCH}x13tQsMxMNvo%J=Loma$|@e9r1DXo)ik)fB@fDul^NaVY&s)Dnm= zi7jylv;K|kMlChjVctBfE#`?W@o*$GxO*u}}I<;P`9V41zRb;d3|reaRQ zdW&j%!0uauPf;x~6FuRU+CFlOiqg>TX-25S!0; z)dtV1HXs>H?LfZ0}iM(%lIvCsHc#;MW;H&O&+_kPwo~|T9TuFrA$9-!X-I-a&upTzi9)Wx?df>(l>^;D-fDY5N6CVF_orL8n?S|uXY1Xh><`OSp&e{aWOH7;rxf^W#9-f|R*HnG5+H4*9jo{AS1zB7NU1?T3Z9e9>BY=e25Q;<&Kq zb@k6XpyZ!t;S8~dS*&i@8*=^K1ElZ~!&nN>Jb$28j3aTySQM@pws8cW>m?`A8Vf7k zQ8DKI8@+9AkY&nanf&3NVaJ9uoEgMYp za-1L$Z}hCI>C4m?^>Kd`#Xs0XT1|eCqX=o!W0Bzs*GGaL)q^9C>H|>5%;eCs3y8zm|U`jm%Jw5%T+)aCr)tOSp zf>muco1k@>w3}uIyJ-uUHCmp@G-xLnaR2&jLdQzywhM* z_uZ4(KUCWD>B>9f43zh$(fl1B-1kp9n&siyqWz=N&H8$Iv)-%Y=hL~P{bM;c`I)%F zbkO`gS$V?GWYz%mWTw^YEW8JVJ+TVb16-+3j)bOcxl+q83&MP(XCm;-p9wikDS6ae zW)FEIw6jP3Ot32i$l>cEHzQ_7Mo4fEUm^`yDDq`cV+dODJC- z(+QWAtjFE91fJt!{rj@-->bm-W4r~tPLnn78yV3v)QJ9nRQGeR?hAKc_j4n4=UDgp z@2UIV@o3!-j?_KTP2G?Fp1K#t!R#3ivu8Zao(XUD_9yy@f;Kb4-3_@*84BDdr4AUT zWi%be)eR=tj8i~sm;x)l_BrSr7a(OSP^Q9)e;};*)8vW|R@y<3S1aVz3V9v;W^exx z&}g(nB6%gd<~2P9szPceXf)av!2KfRJ`1?d!u-Aj$|Xq210@gn&4&Eu$ovlKRJS*v zZY_}Cj7WZ!yR6&Okk`L~^JQgq`wA$lBXyH?Djz%2gF%iRZBoIKUJQgATcfp-@36w^ zxKv?vyu+nNa6mcM+V^v0SB5g6~O^q#w|i z)eV50F5p3%FsTLL2{Gq6#xF$aDm4Lm_wFJ@qqQ#{!1%yM#xGH5ZI{Y@0{b%DC%Cw5 zpWr-QB5TeJ_6aVByjI}4N4m;j(4$s^jxYqiuTdJ{TGRmLzM#|qSCft~iADA4h*qnw zn7CcnPeI*al3HnbL}sp02*S$y3r|?|-}@2+M|m{jzC;|y0j;%?W(0dEw$Yb)wsrye zWaqvC>%+dnmMCoN)I0K5qV9MFn_HhDFQ&toy&l_bMu@z^Hy|!lZyLYj6%OY>!r{b| zP24lwosV~WLZU_&%kY`3yUX7CJ~ViJw!JLvQ89_j)aj*g4qCw50m@LdDEDepz9al( z&;yp2`HpnvQVm=@J=h29Axb_dM@9G?1ALAz<8vyVV2u3_eNg5yLB8hKEHl~f&>y$r zFc_t8_%`T0xPKT!|NI*KCcTcWtI$eQ9=bn6^e>&TfdVhxJHNGI;@K&W)umokFBPO% zT@RQAJsstf`xTbS_AJ}%!FVsH%qMq#;FD{~aeWy2_DX-V8nBycUKhN#!)#GQcX#oO zJJjDb^~vo%g7I311-4`@xBEHd2g}py#rFC*^Y+0Jco(*HydRr;*8m!8bMGQQrRReC zx_2_^Q|j}*X!S~y4@){J!ns@ldT!vs0^c1U#u8d1SP~ybjQTF~?T>bYL#x?1$azII z$q6WLT_40Pw+D23DFxpc=!^bseVIK-NrSAy>K}~zX#+_byac*4w%S5XV)ZWwFdT;@ zne~IZyQ2G1}}#P1bH8)UHYGiH=aU8)-4y zYNXmNSGAjO$UV`z07ZBd)MtJj_WN+)Fj^xYLVGXuu1GWP7RocLFIdb*M0=ETmnj+6 z7+D`W5X+Z1k?#67?ggjJesm`gYG~p8x?|CM>|JbC3;`?sOm+Lt#?VE0Z|ptZXodK` zdl}ZLXgBf}AwA&Ep^6sv=TQToxD%G%-4dtXrN zE;Zi2tj4ECEg(6zly4TDY=bN?Q?|_-R{fcLNvG*nUp}^yd3EruGS$GTHq)A{hEzu2 zX9oV<)Sd=@-!nDJ#1x}aqb>X#ji+kNS!m(-m!4iTSf;sxYnIKLq35cg1lj=YG3_3E zTz|%4K5BVB-e7iRj%g=zu$=4(S!QQPuv8pY9uwkBvKY^eWY&6n#9qwWw!GpV@`-L% zKGF5bWMobFHSR3@vn0(sNhUD>Z&S5~s{?sL&utq>HjY;lSU7VJMW2h#D+lD79Ka;% zB1c3;CM5+*Q|r%BDH@Ctw^GW3Me2sc9NN#3=Nov#WRCK3=@)vrpagIuVNxrXA@QU- zO&W{7{spafM0fn6dRM1)(7KOi1=l8mwv%SkfA>?8Y+l@+j61w)9h;(L+f*E*lUWp( zc6vNSSdudBKt}h#piS#Q2b(5uH`oU$uj5vgtbNg zQ<&SLAJgu`nXM@#iqWVKOdyG1gc5;5=AcBF6xjMb@x}T$KUnH4b3174&+m*kE!)o5 z#*yt7^=JnD(w*7H>n|F-QSdK*bG_O0tx1f6KQ*K4McEw)7itM@YK_w# z<66@A4m;5~9Ad8T zZVs2v-;@RIaA?;#JZKklSZZzKKx>=ON&Ca{c>kf+#@I+0h3Gr<(HSOt0q?$=Bc$GD zHId$Cg?gJQ$K9g;^k&s=?ob(Emx!)+s2T%FqY#w`prnyVXw_Qj78R?e*T5}_K2xKW z^xWROw0{N~9btX+=|%5dWQ5dxQ=IpO)vYm@OXPP%ciKkxDcxzShH>F*QYY)lVimr& zDfsS3tuwsSD(y2YC&)40JG3M0e&|gtWf_m6IFfGxzB>u}%;k9ZOXD8neX$%;rXgoo zh!LA7-G}jd+0(p1?Vk0=ed099wd>UGS=yE@R`n+J({h^Jd;MNPGgyY zPnY}08u&8C$ejsM>l>TVc zQLU4gn-9_K8W`Rh(vhedvWkykpsH;+>60tytvLej1>~nT10Fpp2K#O)*@Kw3E3_QTI2L2z7E>? zoq!ORUr7e(=Rf>EoUMal?4VECt7n?*2RK)uLusy73}Di-3g)UU=jw$X)8aV8JPna& zym4B;j3(#m*4M2%#E__SU!+$Pf)QWCVqP%f;d{ykxh_X{O$47*>gnb9q|F>gHcv5F zr(sOvtknkb9%Uoj1YKRP1`AH=gu(elxDRZ|+j*mLc6qqBj#fIzOM1ycqc`4Y{Pw|i ze>*aMYt;Ca9;&+R7hWJ?OyRiEq(r$6q0Ifcq zsfok7QNt|H7JZmq7lU~QBRy8jY`-6~hGIL|^{{&M>C3ErxqvyINieI`I+xeN$X;jn zH9;rLGVN4u4P?vh2WXtvgyTG3<`0S9KAz@%+??$VD~3Ex>d&olKA+J`;mAo}ApRC2 z{OT~9bNgxadbU4)&lu{|1SC3+`QJ4$yQW^SGt>A6^?1+E1ytA_PY?CFZ3<)D&e>TXe za~-_Hu!0xeXU)>P*ZAN0D}%ek=g{5ZeUu;f4&X70-hbGOE#ps`d!c{(-oY)}W!i&m zZ`7y2DnK+!?bNc@*ACZCr<;5*Zf`RszWg(hojpVkvHpxFso|`N3WoLw`6S0L5O zI;iuTDFOalO%FnEqn59Qu~>UJjDJpjUlhC_l(bG)2;pDQPA7Uod8S=o3!@v-H%PAo z-e2u94!~W;`m$ZdRi@NImj%`);<%klC$;s!VUSLDa1q1JHesZoZ9W9;_d(>fA>Tu- zmR>=7NUR}CVGZq6=Q+!jHj4LPf>YWn(C%DOI;AZ`X)$f9M(rCatQOO{80{Lqr%86+ z+$RUJ9_Cs5&wY~K_FEZfsD)sZ@|xgvzUa<$7DtCYymSh?LiNKiGwcV6Ay*4Cymql1 z575eXu9jZw@-shA*p0YjnPJoeP0~{W_oVx?3{Ud*+|NxOzCb`V4v=!y3ww)qbuLXc zj?@;kIJ`%k0!goSt-?J{iNP42Z{XVzjh#;`gE4Kr8=h981!Ln&M29i!eY7>ac>xYC zAIYiT;)ILpBp)Lk!$=Ose2)$GM?1>)G*EuZarb3-mo|EWv?v%|M)~NnF7V>k)ufA# z(pX+Qhu$>ynY{m{(JirLnZ|yUUAmbscNjd6ixg9KoQ@^#k9ORj@cy5yt)Z2ymZKx9 z{Gd=XL7g0RljwWy=YUMING6@jm%3YNm8xVVJniKxhdw=J^m_ta4-x0%eMm`?QIeD zpk5my5Fe22j7i+af^T!eZwtC07tdqm{?@*DDdB^H;Pp_qSB#9A;_d0*n9CVr)1G2w zNJk0~Vdp4pm4854ryE$G+5bP{!J-edM1!Sw5;RYG0r!abE%%K0E%)+DIGVkqINi9O z%?JTHR5{Uk@p+Ec#f#Bl)4U5r|ke8HrQ3x(Iz1z*;$=;j%B%U?|6g2 zy<=|FF!`>|7ZS7GMjvM0tBzh`Aa9Nag%L~ks9fU%jM&w-Y=xcyM(hBvD_7Hw@<4gZ z9$z|E_-@${A9iqOeAt1s?{q@E>pt>U#D`rS>?7N-I(YAu5Mqy$2(d#1y+i@+G!(T7 zkF*Isj4)#NFam@{!p=QUq4XjC6~1n>>(<)f=ozkjM0NC{m`3=$a|jm_`cS=UN#j?cuo@-IP6PLh^PnZWF!P_I zcS)r8#k7c)ceL`k>AuFh^NhmxZZnRo>21t*=b^W8jQz2XH#R6}UKG0LM!iJ6((d%VB`$R^@eDzMp z|J9n_Rzm%)OyD^Y+SEZ^Ya#DLOLg4`>)K;Cb*&}LggJzE33c69)pgA7>*_&We-)`~ z?JnzDCa27I1-^4CUk&|2z8V^{YVG}$blSfwZfIjHL>-aV&sez=2vTXBCgR`#iOr2Q54gCh+Q?DFHQfYHS#+0$_NqAO}BdzjBWQVNOPNPpZd8V>Q=0|Gv zsM4d$(+vdPfc1<&({iOyyA7zs{m1I}XsC-UDWS5e> zUN0qassB$SD+J`$D?y!o6UU$|`!lFZYLzf99y6t0BDn;$_)ONqwifRaXW0(lj1KX1 zPKLS=g33V>lYJTF)1qOEMe(>1$@AnW_KF#JmD{$*cttN(-a|bq!7BU}S%qQQ9}n7{ z`s{GEj(!=uebOAAl@|uH((3dY)op~h*%}~j@`F*5_6kv5vAxSsNMj{LS6mGwnz;5r z=W}IjMQal+;h;26GmDkq^z7nn6}<*d%DC?uPm)J2HI&yU~O*-?43nHZB_qx zww#k6$vu+ecKJfR-Svg~#n?ai3TUrC2|fcyJV;t0{jc_?H?pBzGXq>-J`3ApWD55v zCE`&MG#lAgfh?>t0$Ethy~Xy|Gol*o<=>ep;4AIrXzyRIdVldQaa^%>5hT|Of){qz zmRZMtjJz>rYm;Es$$c=b3^k!Gf|@XwRcXOK*!o|V?}G();BBj=omfo2V!G;W7_Rkf(&g2nMao`(CG5~GP;vNB~43=F(Ggk#{jTgHA6R)PP~7SXQ89J0S3 zgg*2uen>de6)aX!OuwzIr&opNu%+&|_?B19kDt~D+x}rfxJiQM$AYkmQXHw@$T%yt z?ZoR{;KgiC0{V-+vqzjnsd4D6q~pe?2Sa}n4-7lZwCv=i((Vp~77I>2|in4?XFt-i$Yw1z5M z@5t?$6k0xg5rkNlysg=8pp7N*T`E+6J^?(AC+jKTQFNEZZL$OF;QLAVT`RjA>_I>F zZ_)a*e23&tC*{V?dc#CppJ~SEL=@#qtEr2bBF+NjuU4V+j&yTk67982wd+|nQ_dq{ z{&zg40FRk4miN_6_>8kLnnk7RaK8mf9eoe%&#MFcjBh#2HZzLZ^3bb+oqP$j@$+$M zCrexV=da3lL5l8BEDy_%y9CO+PeSfZg9Xg96+WK}w#vF>F*hcW7Fe$D%zBDhUJlIb zgVjM^mzMP>mhsco(kfn(UWhhx`cg>GsP8<`W$q4fW-xAIO;DdLAeG*x`UHHw0X{B` zi>@4qme#CXr2eTjL76U#U|`C<6n~AZze4P1DQ!F(>BfQ2Wx$&g?+$ma!^$W{_a==# z(@(K-%#}=-*X7}!L{RR*YvdkLK7Bby)E{BFv{xV^bE0WYFeg^SoLJL^$KGq?`*1Q{ zKE0af>(`*Sq$S5a=B+`D2@vmEs+TXYr1h+U{RQOhTJE_8Z7nbGM}bF;z@3h1OygOe z(7gHrhY;}?g`h9kG>r=g;a*cgK#2Zx3PGD<8W%c*2ya3`hY;ft3PFGUX+k$31f==b zh*hcAPi&Y7IqO$IdiXQ0f${ZklVUQ8$qEd^t|dD0)|ejBwJk))nK=!bxJ19IL>E!| zrjYK|YVE^C?|#|jdhqSFWgljmT*0zEe0EH# zm>!*wr{qcCkac|aaAk?6kjwr#lv<*S`)rk{0vSBOsDeQzv3YT=)LH55=Y}=G+0T`9 z_G8k>W$fTJa__Uw!*{|Mc^*0RP8cJZTm^Ib1JDJsA4$9p z%;$XIgYBQsDxde%ucW8Es&$<&Vz4R7vuQa$etbPwT?@(_A|uz z(mK*}@a&30zwHx*qW4U`ejS&-H360`=6S{%xqcPL{)2Fd0!--J*O&?ux{fPMXk1lz z6f0%Bic?@4VT_Gdn9!fn-Z9d#t#(2j)a>xw!Ph>DgN2s+(scP^b`6)bkK%)5<)O8hT2M*hV{EowV%Xx zmY8$6*S`5miDlN|4(GT-WLXAD+n;f4(<-gQ{VDA=woShg%6N^YVrUsYKx-b)|w1&6ng)RqC;FRBnm`+=5;U%CaU*E4=%%n zXvj!hUWhdVV~r}42c>4qw;1>|-1L#v@qRB8E< zTNuvbqv_>60g@s6NAIIbO(=crp0#p~$)|6Gd_LDuDxC|lg1P#~btcs*pT3FCJEqf^ z?E@Op-cE>VSXHT2iqiQ?!+Lo>Tyzt%ZPfXP@)T8PF;ZsqQ|;TP-GEQ|hHIO=FDE8q7!1M0*zoMSgY zuUrge%5S}aw`e`#6Gj(*1V+cV8t$pD>FMi_gB7E3d~Lp%{!~M}>FmhP@z%M%KEo`% z&EuOda_r@WEPvAt>RX8xyu?!+%jj*l-Q|N45&IVVo0B*8)zsgd_EBWtHtQdMmmhgE zYk|Ja{=GdNv-ZYQy3bJF!}@7fTO{w7gS@v$-YF~8}m&m?C$cuM%BTV>wjnI^Q@ZRi3)1N_|Yqw+9%zN)0I}HLe$< z*kD%pZmIhd9CsY;kYKGEM>4iFW}i~JRJ%I{h6bLdAzv7m?oEWx64);&52XEKT2WiE zUqDayx7=OQGrOS=w4ykcFRYQ6f%){!AcsA$voBOD5+ZwE&n3Okr$oOB=(i~Pl-?!! zMxbv4`gWjy8Hs-;&~H_Av$mXm8;{~)^0g8-E)V>@DydUvSU-@h`-wEn=0_dUh}qNl z3G4F{#HoWlseV63zcX5I4wkNoCl$XSY)eO-6FmcM@G#BsTCjQ$U4JdepuYH>2m0tl zP2(OPs$GNgSo_W>Nyfood!uwfT|vs>7@fu?V_uJj*&m3E`4sc5g(<}G^XfAD zVZ_wJiuxCGJB%2YFW=B=8oVQy<`azYjm3pHyNl_MH0l4GWO;21^izf9!|(icAdk~i z9MD9}{8p6BlN{XnyfUTN3Bs9av=2a^Q4npL3%G(CE7$t z4d^CN>5MB4_B=Av`hX)8CqqlsIQ73Vd@$BbB+MHQb*rLS9)GC z*O$34_Kt^stj3oUv=qnNPXnwTd@wti<)_Pakt{I&7cnZ`53AwIm2e`p>nL}=Tp807 zXk|=SRY6-@iZ&T&FT-@rz9)H20$$lEI0JjI?8J6AZW(0V^=5myW7HaMkOzFT6-5A> zl2mA4usY-KMXVhCE2H;;k^P>TXB}f}IU>{I2tpe;0lmFPQe)W!*qFdOTY-H7p9abe zBkUXbcEzpmcQgDUjx^qbNBwVKTDKVcG5lpw_GlMaH*1VguW(I!8RP`o68Y)3@QgMP z-<2gC=(`BF>b{8o+G&VbPd*M_)xIpQLJ4!1Bf4E0cx;2!Yz@@Q#&!?|{l3T@LYW?I zvG&}RT9aN(-=fJhplOpt=qvIwZ-SQC*GYqZb{)r7&(Fm0{hc)Rr^f@{zWy7~!7n3( z{bFuEe3g~@h(ci{{56FVt|NrHJQ521)7lF|rLXXTAWLNHMrGFDp&_f7yw zR0E}alO)kQgu07yT6zX?dT1lTdbpEC_e(03oG!Y3;=y|v_}@3{q-~FW-yoUY?YtEB zS*Ng@c}eawrmzRol~(kv_K>dDmB8QR(X|p+dT*Wr9ketvK-c?jB>Ey)M1?V*rq`e2 z%1#*w<^BXdmyF$?uiBns$FmXk2cU_1RZSHRjd%<9$@t!S$JljFx+)o2^NMaShSH>& z?-73YU=+lmL@|BT1Z=+;Ya(2G)Zg**FnSHuH;03EI|_81nArk4MAlXz=F;@W#8K>J zA++r4*g#(-!MVOe417$%l=LRB(IBQTAicO^C^a-bVstM;nG zRKV?=IHqdC8uGvLcGr({uoZqC#L(N*1Na1(-3P>r>7noq=k?Pl#bEqLHM+ZWsl6$W zArqwnYIVo5PFh{M2hU@hq^o%~S}1ydn4JfT{tz$4$I;3-7WX8i942~HI?Hfe@qO2OxZ0< z+;Nb19<-aK?p2BMI1gVb_okM(j;-?`9CD=v{Cw$9V^6ax#?!V+g7YlX@Gx%at`W=!(Pm&x8 zdO=!Qn_w(U8jWX=6%7^#%5{)qWm!lI^fl7u8i#8PdU*9#`qgKU_p$V*S}!_NUe04y zFR1@AEh%9Bh_`g1&8xnS<#nlxRKx6U(JR@!6e6W8(=3dw`^IA0OV4BfR!d!FES__J zHX4mu zws<=XZ5>#hJv${>v$vV-9hg;~Jk#qVUaqXv&}%n6vLA2O7c*;Qo!*aYpBLSaO!T-x z3nt5AcC+1|SyQyrGBG)VV$AM=H>@U-{xXEt^i4EpQTE`=&|a+JMyXrQWZEX{0_{}m zfb29(g`tW+NB#wpF&}+rjn__A`$%>sF7t^q-#MG|c#iUDgWpH9;P=eLMUy`a!WUXKEo5tYO3S7^Oa3_WWR&P_OZ67_i@vn7Hb+}u%=-!@~ZH} zGsU=G&1~L-*9zneofNuTQci8X`eg}+`F=!G@LX#$z{saZji z-6nY~?N*p40=aHUtd+eF8uayGH^&^WKc0f1J_2@uf#;B|hVH&>I9lLymU1|nVP#J z^*+2r;kTk);6)Hy8%D@6jxT*xv#M~vFTO$U-DcRsFlL6Uy}Ti?QqG~hyut7-PkVV; z_%@UF^6od>rnc$#f=+lZzNulz{lI(R_ubGYJ0rI8=|H~===Z2SJB|9|45;$}`0Y(^ z(B2gT$+M?{y(=>ONRUJCJ6QTp9rW4!1Z^)P!BLCn=+{a6ZI#%eLZk8rN}C<_`@3c} zEA0>d1M;e&_8m>yjNHRQZCSQyT6DOhtpHma=UZdAmyfImZV2|!n!4FTlZB|?5bSfc z#;aJc2hZ4iD8qh?MKn9P%J|xEb<7bg1x@z0ro3LGJ^H>Ac!U1Q(IQ@=$Ft6;yrn+Q z@Ila9)4_5trr(2kRk~|3DHw(!nLjo}?MhGnmGupCMp4cC9r31(pU zBL?m*R7ds}R)Vc{7f8};uoS}6i@7{#P`k1(Muz)MMB5PTv);{vGfJ{!)(7-E%l5hY zYzXwo@f>??lojZRa?}mo5S(q^7oJN7ecHGoz?C0qGNCkjOY(~*BEO8+3RkTJSom{H}ql7_M*rCseSktHpn*+GVE^}#uqfkr<-_ce7LD< z=_(1RAxct)4}}jS}lPNMo>Sw4xI}5;f+?blea&YV#Bl% zvB#vH9G4}iAUnAww39pBZH_~;Hn28R)K(M|aoY@E{3za$>&NlFd$1$q1-C^+ofr;0 zZg%7jl9Wg~^Npo(ltp=3K}V8ALd!akM_@g=ZzCoPZ|Rz!{+UDh>81R-v;mA~K{n** z#CXyr%ed&k#rPL-8E2HZWOP`q(yuz0`y1##Y_u4?S-}`-D1N5mVBy?YXsKUd-z`Ys ztXN2G9p++OpYY8I$&59Cw~yW5T0b&l4}=*x&f35_4(rQjEHC98oIicCLHdbg*hgBs zix@9O_YjjV9Zh#`6U< zp4)Pd@C^GGlsB*D;#p9dw%kvFIt+dtE^_eeXYeZlbAJbwTgEJ=cT%~1%`cm;ZH+s5 z9{w_X4@f^RoVTSj$_X30&ehQyrH$L}9)as6$UdF)h`jq#^^PmXF4^|h#^CM~hOabB zcb{bVw2eU<&e?4n27Tjgl=d>p2SL6C@2`02I`Sxp`)nPZCW+vT5N+pw;x0iIXp@Iq zoOpiebnce}Hio)PS-*&l<@!VLZf$&H@NO;E=lt;9S_~VrG1%)EPkS90W0e`K$FdHG zYz)R%59p^Csh^HiGVP*CBZdv*G3jEvfKe|_z{yERr zKMHHjk1ba?0?g$ucZ8(hQk(X3SQ#JfbdL&UT8Dcs`IvQnk6ONoG7Rc@jD@EGk9G4V zN>`pMyWzP9@LWthAOEj-p4|=4J%Q&5#Pb*b70(sj@Ei_2mk`e<{wtp6bi*?TJeLyB zC;uy+tGeOY2s}?Fo=^Q(JkRTfXA|%|m3Thg4NqIyt#e^s;8~H+en@-h7U|G8k;e2> z&81c4B#=-!%|pF8h2NTJMY|PvJ*DB^X$!1vn;hIby&Kk@Yn_F(GVGHqrmv>&#q`q} z?UcIDXt>r@>AUw64eY9`HcGt^Y|Pv^(9rPh`0F%IvoFvg&V)F}P@QF2(4$?J1vUSl z7+98iT02)Iuq^fT_T9rkzlOeJx#Y=ZDb<{KDb;0RDxbgPpcLTIcY@QKcgtl~gv+#K zzy&llu;v$7c($^oEG@Q-lq}!(CjB=X<@vSGe%iYueSst8(~>gzit#=Vw_dpC^tLAUYV3ge+RyZd;rgz@f7?JAyN(gwZ-;ytySu~6W@;6aP~ zJd-H(&4FRxbnV3geE2NUFL>YfSBusx+EQ^Zcfbo&CXOzge41_OQ0QIgGERT&40kSTE(d zvYS@%Ilej)q;exAUDs`@C6QEBkyPuuO?7;vgfk;0WZkBEwRb7i^hm0&o$gY-7D+WD zlIq)TQ!R>=a8@MM38K4Hh*ch>>K|#13%adWN2Co?kyKZ9n`&t!RrP<|@(UxW_Ku9= zG2M(}pT8Ap!y%EpzU#IP-;AWnMpAv#ZK^jSsRl(-ebsF$Khj?VBdIO`RY0o0>9#cx zX(~uHIFjo4F1_4!tr45Lt~L1IQJVsv$Y;2ewesY9&L*jgx2Fvbwh(`YC&T^gMG$tX z!1=rv*yziI&kv|<&s|76*w1oF{WnnWas%pfiuw&u2h;}C=M|OdK0iO?@JmJ2fZ8jh zzM!Z&P-{Z!uN2h)>Z*|XYelty>W9?dC~6F-wITJlis}IM+>rV^MNI(pypZ~PMNIJXsb9=7jm ziuwXj$AxiUSJV%Ix_?N0Ls9<$)CWQiZz}4?K;4=QsBbCiCqTU|jQc-|`YBN3A>ThL z>SsXR&?lh&DHsnxogBt}TT%BheBKmN-%->#K)pB2?OjE^1*m<(xbG?Itw8-vnA@L$ z+6=n!rKB7GMa3Cy`aBk<{Hvli1Jwzse^b;Jpe91<`--|ZP^&}g--FTvH5pPrP}F^a zdQVvT4;6JkpjL))|DmY+1Jw(u|5ViRK&=X?A1Uf&pr%6V$BKFYP_2;qiK0#e>O~>- zQ$;-psF#G)&lI&W4s$Z3{!3AR0Mwo#^>al%3aDd4>KBSSAE3J`fx0Mqo~6jpHB+oejD^LP+tz?ei!s6P;+5iCRD2f zb&rs$De73DHilHLsFQ&DV#rr0>SUn46jF6XJqM_Fhcz}7^<1E)L%yb>t_14fkZLLF zB|xnYskWkC57cGh7_U&&+kkp;&wv_J)Sm$Ll8_o#)Z2l2X-IVx^$wt39#RvEdM8jX z3#my(y$7gPDxg*>>b*eS9=3z4sP_Z)hLBpNs1E>jTS)a3^+6{(e^ZLO6R5X@ajO;e zXFwemwoVU4eFUgCg>ic->Pv$)juO^Wj?BM@09Jejn2NmeGG5(rbxskk!lB&P~!T4%Xg2qD|C_HoY&Dp;GM+ zybN)EY2X^%0%a|V0)LkKVpGx^*)Yl0Yt5Cyvsz8VqHi_u%`TXa7~Wv`R?$9twdFP~ zX8nXry(CN>qzzKabU!zusp?d!_U}pcXj!VXO4ac_sU9m!Rj*Q=)NLyD8K%mpR6m1M zT=?Sl%7&9|JqT@3pW9r_TaZ2q#CMHrAoXbsr=XlmC@M4RP1Vq{Zb_M_(~c3J~tYB4;8zos{4Jl(Yo)c zLi_HIw-*mQvW+acC_5qXv=lV=kl z*505QuP4oTl1ekhEbvbvoVS&6o~&YB0I@u36~v%vn2lqGq`Rd)Lup@Y-hdo*{PYfl zZ!rw<+TdH9zMTNy9QyVn_?EyNQ%M{9B8jp;m86lM3`%f-D#3+e31r>&EUViT73(61 zRV8*;o2e>RL%hIWh>YXDY8+1~8^;H#*!?@jo}yy+EsH%(#U22$f7NATMsn`P{ zc8v&DHQyXkDciJ%h|EV?x1+0Dt4e(&r2Yc(+9wqqGY6~C0)&2vC8?2ZQNyBbafpg_ zBgFa&VtwPu^@?%|V@+4FK8099mh(j{=k+OBtJBI>U$u4zTw-cW#C`KRjPC?oXDF_p z0asmeeF953oRyC#S!>^%Rw=nYrnu5)Jm5A{ar*+eeYD#-GE2qU(<$(8Be8BSiRxu6Sb{|ZWRm|X@+jA&x-cEOf_GnIx$h;y&;b|e#5y?AL9{> zWd*ScDppa&%Jykk25q837l^2TOvw+S++MikszCogT15BW&bg|5@9k(&+Iw3EVe@G( zeILmEr^4qmz{=S~Hp)UFsgD5l>SRDYMo}wqcgYQ?$0}+sp#IbdsEZV}2B?>L0d=vW z`am666Ht#+)IAKJZwhleUQrv%s3$1uHD%Nj74>GIuBi;DMMd4qj8c~XS}%M4ekUKUQB= zZckUJdGH$0_heC@*ZK|*^ng*RzHG8?iS(qEq8T(2eA8p4=t$q|oW~p^Yo{kI0lH1} zC8C%@s(O7Msn=1eUTdgcbl+}P#vB8^ zeXTVoQLto>MCvy&Vft1KYj6S9pdze+*QYgB5y$eaXJHFeOl2e2*F@^?F-+a5_E@uc zsrGTB;X$nZ+V89V)=C}g-b2-$-q}%O>YuMlKm7ueJybrXmWUQsqsG)~-Ae^y>f&z4 zOW+T4$!pSIu7v%t7)EaN*GduKGUGh^{j0(Ki5D%2S0d%imB1&j#{E+FHhI5R8^iFe z#q9|~B}?a$=z-myzQI~fx43S^Prfhk8^fEKFOD(1iNWm`MrGGEuc~0+IKB+;C>y~Y z7z(KmUR zB^zFV*&R;`l>Q$uKauHKOn)4EnNUe_z1-ovM(_Hr6id^$CjQJal~r21Yluo#%-Q0y z_`EN-!I*L3cg$^ZVI>rOVhz85R>GTIm3WIQ2cuJ_&1UkcO9kFM{DkiMCLs3FM%UQc zM1p~ZqaSHBJP&g{(HeIW9l56D1n42z1KAC}s5D{SI#8}#*Ry=;B9X7YTp;#`g=ofO z@3kgub40V~OE-80i|J$ZUJP$rjAFj-m<`X`x(bP_H_zgjS1f@XZ(#ZAi$q86KI>e= z*AuZ0_sbY!@%Bvw-?oI`PSlZC2h@p0c{#w#k-V~QKaeF@tDtVrCp-gpNf66$f`Os^ z_#jM=X9qB9aV!=m8*QiB%CszK`-V$ zi8awYu7%(0+|uuA_+1|fchEPiSLwGx{(`)8rF+d;C^7l*-q}AyMoaT{_Zw4V9^F5y z3jGSNcwNrT0$ZcbD&*bt4X?}h723x>VAW5M`c6tAZ2cVM>hDp{0jceCY~6pw$g9r% z6hBcnnS_1(Q)d?52{#5+`sU@mi(~&CYg*_Vyti*YFM?ke_VLZjoZ#2?J}L9IM1Zvz zP`6MHbZ;ASz;(3Y0LdTcq;I|Gt6Rf1rdYTtV_hpw)mGwtOuIeZkyyp7np3s&;5Q;_ zUXg%V7Hf{pra4tXn6ei&tR|HYY*vgEHOqLH2#$dAt{W-`96)YU$ev*4M?{4y!hf z9OMnN2UzwF7;Rr$ag@7pmfdE3?N^+mdw#<$a_n1?@d~4r=F)anWhGcvP|Dy&99yLj zbx;Z~f*wDS;aD}oGzK9WhS2?V4ABa> zv!v}0vi=rpD+_3UemA`#AV+MG(-gY`K;voKj017C!Tv8y8=o-m1$&+SnAGF>`jx6 zAbB!LSIDa{KJZTCuVF+SMW{cBrhrH<9Xg^ZNN=R&nhNE<=+V3A4u#Wx zeBaX7?h_twXpr$6Szd!YHI3J4Q(0c@Fudx?Lg;m38qBX13}12kF^(idwJk{1Nv>~y z)T<-6%2{s5%wq0bwonv|Geq9pY1md3jNeDBLrui|I)R0$?0@y@NMGWtBy4b^fkyNx z(KdiIRl2bg9OP+pyq-13Y7h;N$yFdm92YRe;$8_eG3%<|9Dk2z zS-bpqID6tBQ_b$Cm!F6h_nps(M!3w9=J<)viS{~+ImoF2Ru1IUO8MSX_UrNRm!EhH zbh@+I?|_m?z6&F~jsF1RoX0+3Dn{}m17o}mt52r#FA!rsKayg6OEC^+er4|j#`uIe zl^Ol75Mu$%J&bV(^Qtk9+xt#{$^%S&WyFt~erF#gU zGnb|Kr||6)mS&z;On(HQ4OM@IHS+Ix*IN4kN^kP&?(fQ z(1K_M`mc%pDA1$#UPoV}_M*v#YSY$I#I$xnsSZ8 zOm^3aW<)-L&!y=XtaJn~Y5y?Jl`77a5a(AE$0W^IV{cs}@804r1@>V_?rujnaHUJo zzCwF?Zx}O!NR74CI$1&bt1Riq*C?E5cbgmo?q*B2_2nRoi@5~}SC`zHUTm zfn#Uxh$S!iyG-isbZ6n309*7byotup>Jn;S(54X#Its+;LvaR^zSEI@&}paf_=Chz zWFsR6*kO4mbfhd>RpJ;9#Ser0$b-eE=jsC{rm>a9Aby`Ug& zpp^uBK`&}OBjq_7)Ah#eF`#=>FZ3y9yrV`%l{SE4m-zr`3@@gQ3MzOn2x<(Jou|9o&Kb2h39qX6z!! z@mw8o8P3=7HAFAf$~93H;z@sVUT|M=vBD!3G(NUMnekPH*+*>>@1t&A2TQm6W(g+`%qYn$d+kx+7n7|D<-Or;}_)8(rd@o<}#RN_eNa2;S*iOrm@h z-Byk_nG42f)|3Z}>aRujATIAV|IwNZpDjA9#>NQR`7L>B95resn{06-W4}fHXMwiTo<5LoU|0hiEy&z0iOX&5 zX|Tj9nk%YVq2eAx#f^2O&nB&=xdQ5Ej-vW4V%bBB?mvi^H>BZKORsfSidHAC7o0~7 z_=FMhwet|#o44S;EOByLotUn2ad16$Bn{#ok+>B`QJwiJ%fEUR;i?@6y3uILYa7ef zC(KNRTrn${A8RAjm+esg52%E}uROg$Lc1}!J(E|)3Kg<9Hn5isLmSLa|8Cw(o2b1H zBzr`*_gPwL-doqoeZThH6pmP3|D*6H0-V39Yb7pm39G-zM!7gX{{XZ5aTuTbavYyY z7Mz)A?C+3fJd@+kpm8~!OZ*MOhYj#{BlyaDMDUg0qLIf59}!001jO6Le&d9V@<(eF ze6|Sa8C}*D^tjiHxdZqD3r3!fBTuK1$65B*NwUF$an{1RV!6zAuMw3I`pnJ2Ind_N z9~46l-5lKK-V9?->v9iyewgmsvUKw{2e!#amZs7eOv-?LHmh|wr$gJfiOpi3evQEO z)1Wj1RGyyOKK*^GenMN1Yen$h0EQm};dhgqI}m#A6Y?IqUS!x*?rXm`YWaQ~FbJ>_@<+Vg+2rbF1xDy%YA%f~}lJ7Suvup3m^6up*z3l_{0 z-J2AIZBb#Z@mf9s(j6zf*+JNiD$IoZ7DHHt<1GxrZc<_ILD)tJdq;RD2VvV(*kOrU z{t$%yMWhUy1);a9(BDAl3lM5MDWf6`y-kHyKa4N7U`)Q`+VaK|CDG`LTD1;7yfL_(~^3tJDpD72VPJ$%FS=(pomA zXsmQvk{^4gP*hE&L_{q3jESXVM>vSMFW+;)wdpL#`((_!y_9#eV=JxK(=4x6%;o{+ zV1D`SggMxe8{p)0Tv29ot0@~#i2SlUg>Re|Pnpj$%q72|g?nJ@-wUnwl7`5yPuA8N zvw1Q1vNpkR1fsId=J|%lV7`OJeG;VBnStfBSr{i$J76pq(fv;s9qt(pB2>-icZ)_)9rw}8_j7T+AGk&0MEPtk$WHmTi_p;H zzhoPYO>}1)<^xG6qWp|1+!!o;Z_zc6|t#!~KQ z2^VbYMeOdf^Z%)*mA~0!s=eiBU`+I-bwRV`nH*v``s`k#q?>e%{l;p_BSyu2Wz=th zD$k-MuRj8>0=3J%_|lLkW2RXxlYJz0n@{N0oX_8hd#Q$zxR1ILt-MZWazm5jVJ$gV z?MRxG+lGe`lk{4`Ktzio`2@IY8R+ZTRHyqx4~14!Lw(TFglq|)on-jhGQ-!8 zO?Aww=f*hPU7N<+)1O&qLs^D!SM7FXv>wpsgTcz^aKA&H4*IpxX~g^V;!e;Fa`e5J z-b39q9OlfR+lR-dis|8!<~GsZXoere+vj|4@m0n2P!%%7ks5e_nKXNgT$gV=kp>vqEB+!}Ig+7kTju zk{k6R+gJ+ALv3np)(Kyzw;A9I&4}U)sqtUUT11>7PhY=Q_ddgR7&kLX6q!S*oi~T= z`~bA`gI(JB{w>lr&5wNm-8J=piXaf`H<^3yx>!Mf5e|3@B2t0X`D zLE(#KapaNnO5tg+DO*4uV0aYS`wkHxc~d+cd!U5t9dN-^Du#w_kk(4;>f>8NY_G8X z!THuJ5SF5K^`Xx7CrZ*LtrK!dPl);&{8{mom{oBb?Ol_}w{D)@BKI8fxz0RW4D>lz z6UP}*99v=IjKEm=Mwu6#K;%-kp+$Xpw5@@jxuZdSXS-FpIBK;4|3$& zUy`@A3*HB*bt>Pu3*O<(n%B5P&&9)ms`c~UfJZ{kimq7N>;;oY2k?U!@ z5nS(+0(!ca9lTG5@%wI-Hb;T|4D93)^jUOW8Uf8v`snXsdS^UM{py$1X|pKFoAfT% z-lXDFX=7{5;O#lbPK(7rlk_TEj!#*K>09Lw-&h^9SYnMSz=n!B&OeIQCIGcj-^x0z77%ky)R@0=zevwX;A*2|BUsjr|Pk-vp3W zlLTr-^#V^(tF)lZH}1B~m-NmzJ=$%V_Y8HSfvRsL&nJNApk4CJrDiuh4m^KOJV7r@ z72UKg2z~!&iuMt-)nnb}Tf(G~`I>4U^Cv3bd=4~a(CU1)PA?y|7=kCZ(h3jW{i=+- z`vsa7=tZC{^EPh{%YGQu0ZaG<*4L|e9#9)`st>7E2x_7qq? zPm2<6V-P2wdlDq;PWi-c}~pLpBHV$FUgixII=2k ze)=;aKjT@EpZT1aIqP|m&;L?%t_#Cgz01kVgw!u@Pnia<`(dtJO(?zWVEVB`I z-bC%ST|?a64o!=!pU(Z|`50=nU-_n-BXYk;*8RFS<+)#m&4D~Ovayi+Qs#Y(Z~oSE zeC-$a#{VQn^Z?CSJBeilSSQdbBbhus+Xf{^wEklHZusW&T!_h4Oy2^OUE@2-a@lIn zYsZ^%Znfu{ZLsm7J}4DXOMRNjecicGqGIkortuUX22yFZlMZpiLBGCE+R$L*+fm%` zKfnqMf7;vlN`YOD8!kisR0_$IhrCk?X(|tSw-hqIghC!*koTldgYaVGK+Vx-g6W;# znq<4eVUq1)sePaqp^e79gM zs_*4*5@9)AB~Js)YNThblXhAGtd{6GCi>UooWqrL7_FpLT99UVnC8G;r1>kQnXl3W zb?$dvxsI1oXFH!kozG+V0s?1J zO}^MK?)4|{H2J!YDR0v&uU%8#s7L*C7ULlA&KbokJa*2e7j7)QQQ*hZq`y84v+JP5 z;ih_@Al7iY)Lb8Cy<`8}f4F1B#yByi`RDX`q3yyQ+RwCGwZCPPIiT<3*i0L8&d{I4 znm^UBcylL0)o!ePXFPPmUV4f_*aL~SwAgOgId~2|mvYz6>cya7} zRzIQi&h3Y9$~6hJVxwGtDB-~^dQ0wSdu~TMul5aW)t^fsYyy**!oD`DvOS$5?|>2- zczY^94}a6?iY4CR&Q)?ZKu0gSJu3`4p#q5{R@8z-5`%gM20YwhkyrU~+Jnc0*4Z9IAx4tb4?D4CT2IIu{Z?kP{H^_1U0lAffW9sH+v-@IBY!)1 zmXw?4Jm|#Y8ArAhw0Gi7YK_ul~t{~vMh0VhR~J&sp*SBFWv zy}j%L147R%VGxyJ0ohfNg+=tv!!Myx*F}W^6b!=-BBnbhHY@J>47B`~H6a&woE3nC@4ht6sf&^?R#W9Bct87Rd)1Wvo@|bn$3~NeTVdsOtDs!oeT3YIE3ai6 zxchccg5R0RmW(8`)q17_Cbg^&t@okab{*+*`?S^<#{Z*o?HcfRZSX$5N#9vson9=h*L3oRNb7GT)ypC6 zRMi>G(t1xPuZgrQ)VVL-RXbUAj$vt;>Eun3HU;XO59KDPP6JEpGo8GyITNd($2sNi z+9(zq_aFGH=ae__*T^Za;jfuf-o#%kr@W58k?DZ3694?oTjrm?F`4l#t7ioQOt z_s3#NU@WGD#^UN_QjUKcW3`I0_;(2ByDpOQ`nyanx5PSpJCr@1;d~18bD3VQK0(U0 zkw9;QNR<|)j^0!^*0PV9PWEa%Pi;v#{gIR#OIV&MI^?Njc}7mh_!=zF0~)4PWBJ}J z?da)bk4PIG$Fu=zRCNZhw5sXk9VU7Io5@Zbhx-H$_Xr%mgTEkSy{&N_4*PP8m{S~g z4cfax*FuTobx0e*aI#-Ri%I+~ga3~VNel)1I3_35f|P>eSg?PCduVFj))M?gf2ulN zg_3GQ4elwfpfXzE=tQ}{mniPiWe+K-Mqh7+Q;vS*dk%0w>+i@`NN(TNBQS@DU(|B% zflJTIa$yVOO<;N<6>IOBWn%3kg}O#7rAhzxh=(o9_&vcKX$wR`S^yux1tP6D@?+vYp1X(x95j7f7Fd zmP=kUxeZ?P;m`7#4$CEdpBA9+(?axJx?IxtduYKU==(n*`aWX0)H^>4>7Bn`E_uy| z;$8y(SHE2DC!U7)SM{X&58ct4#+}0G@qLZM_a;EYC~-P8d8aV`1A3)f1z$!fa}Io)M>cus!^df-Q5Po4Q8UoQ8PKh{tta>af+rd_$5+dq4wJ3$`{#8Gh1 zJE`6lld_P*_QX5j&J56J1IP`KuKmSNFUNFuJHfavH~ME@0%3AHxhdi|ryi=|c7lf@d?{SPsScP^o>X42#=tHbPrDexO6$lOY~ z%J(7cbW^s;syA@dni!5OQTB)TB#zd#z|j{1M_&YRH0S>Tj;>8e9DUI)j+*N7mNz?$ zqc1`@x+WoU^u4s3GN*J#4os&SG=&-71Xgin~>DcBa;Y420jb&UdR4 zpts~qzFRfb#N8?nwA>li&O}_#8SiTYCYg}$5Zr4r@NBdnd&2puGQH&-$lXsl!N8p+ zm3SLJ*J{lKNt>suLYK6fvQw;$RwJZfs<-KL4fG!1SWES|HQ-M=sf=ujWwgr38#>PD zg)1?aW98jb$wCq}YfYQg>TUj9!%~aXxK$Z})rIBFSV{9X4evhVI4lg!^X7HMd-3v| zsN}8iy$yNx((x^R|2Rkf2Ud!0dOmxur7AfxDDW1vrQYhV3t#$oQe(pYbc4@D@lAY3flfKe&>O{?{!u#tP`i|EXCG8+%Yy-`CS zdYErq4lS(~Xf;{~!1_|;A?(}ZNK{8Z97#Hgc_c!-vk0T>zt#%wO;%65F9g)fJsXt6 zNdF;*)-5=y=lkQAv-ZGTJ;_=~QT~ZX4B!Gm`&3SID;aexD%z!9Xo;JRwHCHunW(vM z$tz!jdp?U(oS?UZTF{#u`;Yvw|HdEth#31XAngqjJ`3+F&%!T-F}3@M7`g48iF$Lh3xIq=SE34`&~a(=b?L z+#Z*!we$cIaeILuX*yvf_f1WBXU z{ZQVTcXlWJ zU^YFj%R7(#O8OIwJkEHjHlsX=H#xFH6a8siVfQTE*W$PX!0%aNMCH8wx_AbzM2|{T z_2d-o!RoY;-6x=orcc(A#+&S(=21q$eMuPy)V;)y0oMy;M}AuxPxOj5ICJli_E`Vc z8rA=3E#m`i@NxBh2v^wmZFg{gNl9|Fe}AJNv&2O_oX2n{@sL&uYEyQ;HH=`Sa<((h zBa^EbnVd(m>7gaH1ZZlLSv1whSZrO{ju-rP{Lo64*#&76nJlvfWOn334setlB^us1 zqU^qh%AWaM{XWRQ42+CClI@2BU%K%JO|A=tx*M(8c3d%?OpjpR<7M7!{JaL{os?yH zOOnQ46IFw8$C;I}Mp-8Fr!pIfg z-+2D%Er&excbd1Jk0M$xch`8jhUXV(i%6@X4@sKUygMMbaS}++P-7=v;(`$vn_Ci_#%$06kYr&VAx z{~NADyWd%pm@ZubJUnLRvtL*R3)T-a3v0r+BJWo~f%yBih1R8A&8vX^KI3V2=ZGTl zs3c90iL=||g#Znn;*SHNEyrOhq^)UV9BvAYLr6E)rEMoG(Y__;8osuA%Lv8sL!HiB zPCy=Q(B#=#nM2$x_2*@YlY&EMO2K%HW-TqVk{zo zvA7{TC$8pr<@;ebhW5j}xk?e&^OT>&wfG86>b#YnTB9+0&G}GH2h3LTa^6H72f*xQ z05^)5ohmV_bIj`gt#!mKk9GD9lW7sN6^w&bfYb=O7hra(i5hTUhFKmXEvq4R@wuxp zpJ8=sfQJ9&)3DkKZ^~T;nS*?EjtVl#>6&+Kk$*ew;7P^X30hSL!9(hhhx8-fJeA=O z*GzA|+72GncJOc+;9)1=A@9D#WqBVT&#-=Vha7qLd25jW{362(d-iejEW-`LIDTI6 z%O;I#z|nKXy6mSdzB0UK=>c2~xl7_oqb>EN5qI&}uQ>Yg0F5mT)7V2n8oN1!JM@c+ zYZCWR!`2LKKov@xcZQ@sZ=F`eWwQpjY-oYYz}%+6x$RWe&1iaudKK#gSYpN7CXHZTb2OQuI>B zGrqBE*zb2%C;Wv`Gf6Ch6umSWw{nq#7)A5EUs)%@Z`a5|M$JnJ|6ZPPx1~maKLl)t z@sG#Ew5XSg00u`!q<_TrVq#jfQH{`I9bezY_q=ihZ#=4~I|O{m%?+I?pluNMNrU&C zwlSYHQChTVD#q^Q@>NX8?aSaB*RpRM4Bx=3;#l{O8lHQg=gHraks!z5*D2F#?*^>{ zwOSZwbAyI^U7IZfcO$;VNUC`AvqSXVmp;9`dS!}qh(0%_JE>mjz|)CUJ>f|snQqC* z{1~pZH?iBG9f@OQIwT_-v?44)oKBf&GID4jpGKTaU+YlT!}+1T_~&ITby&Y91@_^y zY#%;tT>><)7HA-oNL#;y=hgUZrmc(N`98~HqmYY4Dc)agu$bS>%S!w``d&iUNs{9I z&HvnGi2F))x*V5+J2$X@g?2j$igr62TiETijv2?#9BzM`%fU0;hb=r!xYy!08)dma zzb(r>XvuQ;x8`l>rz%5(`>43D7lg}t?ru?!gkQY9W&MO{7#MT6Khx>vsX?7CMsxU2 zIT_k|soGMf!;}fdlyo?yv6xa_)Z9qBx|lnC#?`{3Jb>v9G$2ZnfxSZzRBvW3%E?|6D(*&5xmt!FqPaXH%YbnU+*HfQGX{ zLmPwj%*G%g(w>L3uORKv7}^-DXEp{UBCSSGsta|NHkhULo=!?Bo^PX;Wm9e|kf8jW zyM*#{?o#|Ur$bMR=ZF<6!sm!(w2?XizXLL^wP$yr+!mhSP&i?Q+;=Xg2av|94zwF7 zxGQ2+g1Qq*H|CQ<6LU1-(|epqf48|6+~=iN*MZ_%i5A_f0=_PTcmBQM9bn9tsO(mO z8ly<91SG8ys;c!>*?C~#cCuhI!j$KZZ8Pq=L2|J6H2L3K4ffIz>|c9SM~@ z{5JPF0*@<-0L=SeoZHV;~zvqa$_&8G{eNh=i=HK!Q^UMBk@cCdQ!uu~`y}r%u+`5tl z>I_)zRnF5@FVzu7@ny?qXZ;*g{}8;lQRx`su_eB3=BHMW$A9~_@Ez#Bj`;C?e&XNf zeqEhIw4d3-?}U18C+Jt+ehy^*3o9*>Ia%|Dcc!?jq%y0>*Wzdu$8@buPyO{E-nmGI@x0XjXP3+W

^5J0TpghG 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 z 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

frUKYog*I}F$}qB}z(#IYRS~@pR3<3x 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�hXk0}rp&V+%(j3O;tX6T<-A9-4}H<|ks9 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 Date: Thu, 6 May 2021 14:35:14 +0100 Subject: [PATCH 4/5] Add files via upload --- .../snaptools/ModulePack/ChatSaving.java | 759 ++++--- .../snaptools/ModulePack/CustomFilters.java | 1578 +++++++-------- .../snaptools/ModulePack/ForcedHooks.java | 1364 ++++++------- .../HookDefinitions/HookClassDef.java | 207 +- .../ModulePack/HookDefinitions/HookDef.java | 239 ++- .../HookDefinitions/HookVariableDef.java | 105 +- .../snaptools/ModulePack/HookResolver.java | 478 ++--- .../snaptools/ModulePack/LensCollector.java | 740 +++---- .../snaptools/ModulePack/MiscChanges.java | 560 +++--- .../snaptools/ModulePack/ModuleHelper.java | 398 ++-- .../snaptools/ModulePack/ModulePackImpl.java | 408 ++-- .../snaptools/ModulePack/ModulesDef.java | 349 ++-- .../snaptools/ModulePack/RemoveSnapTimer.java | 108 +- .../andre/snaptools/ModulePack/Saving.java | 1754 ++++++++--------- .../ModulePack/ScreenshotBypass.java | 116 +- .../andre/snaptools/ModulePack/Sharing.java | 781 ++++---- .../snaptools/ModulePack/StealthViewing.java | 964 ++++----- .../snaptools/ModulePack/StoryBlocker.java | 554 +++--- .../ModulePack/UnlimitedViewing.java | 268 +-- 19 files changed, 5824 insertions(+), 5906 deletions(-) diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ChatSaving.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ChatSaving.java index ce211da..34846b0 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ChatSaving.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ChatSaving.java @@ -1,380 +1,379 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.app.Activity; -import android.content.Context; - - -import com.ljmu.andre.CBIDatabase.CBITable; -import com.ljmu.andre.GsonPreferences.Preferences; -import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.ModulePack.Databases.ChatDatabase; -import com.ljmu.andre.snaptools.ModulePack.Databases.Tables.ChatObject; -import com.ljmu.andre.snaptools.ModulePack.Databases.Tables.ConversationObject; -import com.ljmu.andre.snaptools.ModulePack.Fragments.ChatManagerFragment; -import com.ljmu.andre.snaptools.ModulePack.Utils.FieldMapper; -import com.ljmu.andre.snaptools.Utils.ContextHelper; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; - -import de.robv.android.xposed.XposedHelpers; -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.CHAT_BODY_METADATA; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.CHAT_HEADER_METADATA; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.CHAT_METADATA; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_ISSAVED_INAPP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_MESSAGE_VIEW_MEASURE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_METADATA_READ; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_METADATA_READ_SECOND; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_METADATA_WRITE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_METADATA_WRITE_SECOND; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_NOTIFICATION; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_SAVE_INAPP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_USERNAME; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.CHAT_SAVING_LINKER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.CHAT_SAVING_LINKER_CHAT_REF; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.NOTIFICATION_TYPE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.*; - - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class ChatSaving extends ModuleHelper { - private static final int MAX_CHAT_MESSAGE_ENTRIES = 500; - private CBITable chatTable; - private CBITable conversationTable; - private String yourUsername; - public String typing; - public ChatSaving(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - @Override - public FragmentHelper[] getUIFragments() { - return new ChatManagerFragment[]{new ChatManagerFragment()}; - } - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - /*findAndHookMethod( - "ify", snapClassLoader, - "a", findClass("com.snapchat.android.core.structure.fragment.SnapchatFragment", snapClassLoader), - new ST_MethodHook() { - @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Object snapchatFragment = param.args[0]; - Timber.d("SnapchatFragment: " + snapchatFragment.getClass() + " | " + snapchatFragment); - } - } - ); - - findAndHookMethod( - "com.snapchat.android.app.feature.messaging.chat.fragment.ChatV3Fragment", snapClassLoader, - "onCreateView", LayoutInflater.class, ViewGroup.class, Bundle.class, - new ST_MethodHook() { - @Override protected void after(MethodHookParam param) throws Throwable { - View buttonContainer = (View) param.getResult(); - - - TableLayout menuTableLayout = getView(buttonContainer, "chat_menu_table"); - } - } - );*/ - - if (getPref(BLOCK_TYPING_NOTIFICATIONS)) { - hookMethod( - CHAT_NOTIFICATION, - new ST_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Enum notificationType = getObjectField(NOTIFICATION_TYPE, param.args[0]); - String name = notificationType.name(); - - Timber.d("Notification inbound: " + notificationType); - - if (name.contains("TYPING")) - param.setResult(null); - } - } - ); - } - - if (getPref(CHANGE_TYPING_NOTIFICATIONS)) { - Map notificationTexts = getPref(CUSTOM_NOTIFICATION_TEXTS); - hookMethod( - CHAT_NOTIFICATION, - new ST_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Enum notificationType = getObjectField(NOTIFICATION_TYPE, param.args[0]); - // names: - // SNAP, CHAT, TYPING, CHAT_SCREENSHOT, STATUS_BAR, ADD, - // SCREENSHOT, REPLAY, SAVE_CAMERA_ROLL, ADDFRIEND, INITIATE_AUDIO, - // INITIATE_VIDEO, ABANDON_AUDIO, ABANDON_VIDEO - String name = notificationType.name(); - - Timber.d("Notification inbound: %s", notificationType); - - String nickname = (String) XposedHelpers.getObjectField(param.args[0], "o"); - // Nickname of SENDER (First & Last name or name user has set) - String username = (String) XposedHelpers.getObjectField(param.args[0], "p"); - // Username of SENDER (The name would use to add) - String recipient = (String) XposedHelpers.getObjectField(param.args[0], "q"); - // Username of the account the message is being sent to - String source = (String) XposedHelpers.getObjectField(param.args[0], "d"); - // Not too sure what source is, returns null - - String text = notificationTexts.get(name); - if (text == null) return; - XposedHelpers.setObjectField(param.args[0],"r", syntaxReplacer(text, nickname, username, recipient, name)); - } - } - ); - } - - if (getPref(STORE_CHAT_MESSAGES)) { - try { - ChatDatabase.init(snapContext); - - chatTable = ChatDatabase.getTable(ChatObject.class); - conversationTable = ChatDatabase.getTable(ConversationObject.class); - - // =========================================================================== - - Class chatClass = HookResolver.resolveHookClass(CHAT_METADATA); - Class chatSuperClass = chatClass.getSuperclass(); - Class headerClass = HookResolver.resolveHookClass(CHAT_HEADER_METADATA); - Class bodyClass = HookResolver.resolveHookClass(CHAT_BODY_METADATA); - - // =========================================================================== - - FieldMapper.initMapper("Chat", - chatClass); - FieldMapper.initMapper("ChatSuper", - chatSuperClass); - FieldMapper.initMapper("Header", - headerClass); - FieldMapper.initMapper("Body", - bodyClass); - - // =========================================================================== - - //hookAllMethods("oet", snapClassLoader, false, false); - hookMethod( - CHAT_METADATA_READ, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - try { - Object chat = param.getResult(); - handleChatLogging(chat); - } catch (Throwable t) { - Timber.e(t); - } - } - } - ); - - hookMethod( - CHAT_METADATA_WRITE, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - try { - Object chat = param.args[1]; - handleChatLogging(chat); - } catch (Throwable t) { - Timber.e(t); - } - } - }); - - hookMethod( - CHAT_METADATA_READ_SECOND, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - try { - Object chat = param.getResult(); - handleChatLogging(chat); - } catch (Throwable t) { - Timber.e(t); - } - } - } - ); - - hookMethod( - CHAT_METADATA_WRITE_SECOND, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - try { - Object chat = param.args[1]; - handleChatLogging(chat); - } catch (Throwable t) { - Timber.e(t); - } - } - }); - } catch (HookNotFoundException e) { - Timber.e(e); - moduleLoadState.fail(); - } catch (Throwable t) { - Timber.e(t, "Unknown error"); - } - } - - Set intArray = Collections.newSetFromMap(new LinkedHashMap() { - protected boolean removeEldestEntry(Map.Entry eldest) { - return size() > MAX_CHAT_MESSAGE_ENTRIES; - } - }); - - if (getPref(SAVE_CHAT_IN_SC)) { - hookMethod( - CHAT_MESSAGE_VIEW_MEASURE, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - ContextHelper.getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - try { - Object chatLinker = getObjectField(CHAT_SAVING_LINKER, param.thisObject); - - if (chatLinker == null) { - Timber.w("Null Chat Linker"); - return; - } - - Object chat = getObjectField(CHAT_SAVING_LINKER_CHAT_REF, chatLinker); - - if (chat == null) { - Timber.w("Null Chat Object"); - return; - } - - Boolean isSaved = callHook(CHAT_ISSAVED_INAPP, chat); - int hashCode = chat.hashCode(); - - if (!isSaved) { - synchronized (intArray) { - if (intArray.contains(hashCode)) { - return; - } - } - - callHook(CHAT_SAVE_INAPP, param.thisObject); - } else { - synchronized (intArray) { - intArray.add(hashCode); - } - } - - } catch (Throwable t) { - Timber.w("Chat Saving Error: " + t); - - } - } - }); - } - }); - } - } - - - - private static String syntaxReplacer(String text, String nickname, String username, String receiver, String type){ - type = type.substring(0,1).toUpperCase() + type.substring(1).toLowerCase(); - return text.replace("{username}", username) - .replace("{nickname}", nickname) - .replace("{receiver}", receiver) - .replace("{type}", type) - .replace("\\n", "\n"); - } - - private void handleChatLogging(Object chat) { - FieldMapper chatMapper = FieldMapper.getMapper("Chat"); - FieldMapper chatSuperMapper = FieldMapper.getMapper("ChatSuper"); - FieldMapper headerMapper = FieldMapper.getMapper("Header"); - FieldMapper bodyMapper = FieldMapper.getMapper("Body"); - - String messageId = chatMapper.getFieldVal(chat, "chat_message_id"); - - if (chatTable.contains(messageId)) - return; - - ChatObject newChatObject = new ChatObject(); - - // Set Body Text ============================================================= - Object body = chatMapper.getFieldVal(chat, "body"); - newChatObject.text = bodyMapper.getFieldVal(body, "text"); - - String type = bodyMapper.getFieldVal(body, "type"); - - if (!type.equals("text")) { - if (newChatObject.text == null) - newChatObject.text = "<" + type + ">"; - else - newChatObject.text = "<" + type + ">\n" + newChatObject.text; - } - - if (newChatObject.text == null) { - Timber.w("Null text for chat... Probably not a message"); - return; - } - - // Set Message ID ============================================================ - newChatObject.chat_message_id = messageId; - // Set Timestamp =========================================== - newChatObject.timestamp = chatSuperMapper.getFieldVal(chat, "timestamp"); - // Set Sender/Receiver ======================================================= - Object header = chatSuperMapper.getFieldVal(chat, "header"); - newChatObject.from = headerMapper.getFieldVal(header, "from"); - newChatObject.to = headerMapper.getFieldVal(header, "to"); - newChatObject.conv_id = headerMapper.getFieldVal(header, "conv_id"); - newChatObject.sentByYou = yourUsername.equals(newChatObject.from); - // =========================================================================== - - if (!newChatObject.isCompleted()) { - Timber.w("Chat Object not completed!"); - return; - } - - if (chatTable.insert(newChatObject)) { - ConversationObject conversation = conversationTable.getFirst("conversation_id", newChatObject.conv_id); - - if (conversation == null) - conversation = new ConversationObject(); - - conversation.setUsers(newChatObject.from, newChatObject.to); - conversation.timestamp = newChatObject.timestamp; - conversation.conv_id = newChatObject.conv_id; - conversation.yourUsername = yourUsername; - conversationTable.insert(conversation); - } else - Timber.w("Chat object not inserted"); - - Timber.d("Created new chat object: " + newChatObject.toString()); - } - - @Override - public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { - // Giving time Snapchat time to initialize - try { - yourUsername = callStaticHook(GET_USERNAME); - } catch (Exception e) { - Timber.e(e, "Unable to get UserName"); - moduleLoadState.fail(); - } - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.app.Activity; +import android.content.Context; + + +import com.ljmu.andre.CBIDatabase.CBITable; +import com.ljmu.andre.GsonPreferences.Preferences; +import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.ModulePack.Databases.ChatDatabase; +import com.ljmu.andre.snaptools.ModulePack.Databases.Tables.ChatObject; +import com.ljmu.andre.snaptools.ModulePack.Databases.Tables.ConversationObject; +import com.ljmu.andre.snaptools.ModulePack.Fragments.ChatManagerFragment; +import com.ljmu.andre.snaptools.ModulePack.Utils.FieldMapper; +import com.ljmu.andre.snaptools.Utils.ContextHelper; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; + +import de.robv.android.xposed.XposedHelpers; +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.CHAT_BODY_METADATA; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.CHAT_HEADER_METADATA; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.CHAT_METADATA; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_ISSAVED_INAPP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_MESSAGE_VIEW_MEASURE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_METADATA_READ; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_METADATA_READ_SECOND; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_METADATA_WRITE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_METADATA_WRITE_SECOND; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_NOTIFICATION; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_SAVE_INAPP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_USERNAME; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.CHAT_SAVING_LINKER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.CHAT_SAVING_LINKER_CHAT_REF; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.NOTIFICATION_TYPE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.*; + + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class ChatSaving extends ModuleHelper { + private static final int MAX_CHAT_MESSAGE_ENTRIES = 500; + private CBITable chatTable; + private CBITable conversationTable; + private String yourUsername; + public String typing; + public ChatSaving(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + @Override + public FragmentHelper[] getUIFragments() { + return new ChatManagerFragment[]{new ChatManagerFragment()}; + } + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + /*findAndHookMethod( + "ify", snapClassLoader, + "a", findClass("com.snapchat.android.core.structure.fragment.SnapchatFragment", snapClassLoader), + new ST_MethodHook() { + @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + Object snapchatFragment = param.args[0]; + Timber.d("SnapchatFragment: " + snapchatFragment.getClass() + " | " + snapchatFragment); + } + } + ); + + findAndHookMethod( + "com.snapchat.android.app.feature.messaging.chat.fragment.ChatV3Fragment", snapClassLoader, + "onCreateView", LayoutInflater.class, ViewGroup.class, Bundle.class, + new ST_MethodHook() { + @Override protected void after(MethodHookParam param) throws Throwable { + View buttonContainer = (View) param.getResult(); + + + TableLayout menuTableLayout = getView(buttonContainer, "chat_menu_table"); + } + } + );*/ + + if (getPref(BLOCK_TYPING_NOTIFICATIONS)) { + hookMethod( + CHAT_NOTIFICATION, + new ST_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + Enum notificationType = getObjectField(NOTIFICATION_TYPE, param.args[0]); + String name = notificationType.name(); + + Timber.d("Notification inbound: " + notificationType); + + if (name.contains("TYPING")) + param.setResult(null); + } + } + ); + } + + if (getPref(CHANGE_TYPING_NOTIFICATIONS)) { + Map notificationTexts = getPref(CUSTOM_NOTIFICATION_TEXTS); + hookMethod( + CHAT_NOTIFICATION, + new ST_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + Enum notificationType = getObjectField(NOTIFICATION_TYPE, param.args[0]); + // names: + // SNAP, CHAT, TYPING, CHAT_SCREENSHOT, STATUS_BAR, ADD, + // SCREENSHOT, REPLAY, SAVE_CAMERA_ROLL, ADDFRIEND, INITIATE_AUDIO, + // INITIATE_VIDEO, ABANDON_AUDIO, ABANDON_VIDEO + String name = notificationType.name(); + + Timber.d("Notification inbound: %s", notificationType); + + String nickname = (String) XposedHelpers.getObjectField(param.args[0], "o"); + // Nickname of SENDER (First & Last name or name user has set) + String username = (String) XposedHelpers.getObjectField(param.args[0], "p"); + // Username of SENDER (The name would use to add) + String recipient = (String) XposedHelpers.getObjectField(param.args[0], "q"); + // Username of the account the message is being sent to + String source = (String) XposedHelpers.getObjectField(param.args[0], "d"); + // Not too sure what source is, returns null + + String text = notificationTexts.get(name); + if (text == null) return; + XposedHelpers.setObjectField(param.args[0],"r", syntaxReplacer(text, nickname, username, recipient, name)); + } + } + ); + } + + if (getPref(STORE_CHAT_MESSAGES)) { + try { + ChatDatabase.init(snapContext); + + chatTable = ChatDatabase.getTable(ChatObject.class); + conversationTable = ChatDatabase.getTable(ConversationObject.class); + + // =========================================================================== + + Class chatClass = HookResolver.resolveHookClass(CHAT_METADATA); + Class chatSuperClass = chatClass.getSuperclass(); + Class headerClass = HookResolver.resolveHookClass(CHAT_HEADER_METADATA); + Class bodyClass = HookResolver.resolveHookClass(CHAT_BODY_METADATA); + + // =========================================================================== + + FieldMapper.initMapper("Chat", + chatClass); + FieldMapper.initMapper("ChatSuper", + chatSuperClass); + FieldMapper.initMapper("Header", + headerClass); + FieldMapper.initMapper("Body", + bodyClass); + + // =========================================================================== + + //hookAllMethods("oet", snapClassLoader, false, false); + hookMethod( + CHAT_METADATA_READ, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + try { + Object chat = param.getResult(); + handleChatLogging(chat); + } catch (Throwable t) { + Timber.e(t); + } + } + } + ); + + hookMethod( + CHAT_METADATA_WRITE, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + try { + Object chat = param.args[1]; + handleChatLogging(chat); + } catch (Throwable t) { + Timber.e(t); + } + } + }); + + hookMethod( + CHAT_METADATA_READ_SECOND, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + try { + Object chat = param.getResult(); + handleChatLogging(chat); + } catch (Throwable t) { + Timber.e(t); + } + } + } + ); + + hookMethod( + CHAT_METADATA_WRITE_SECOND, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + try { + Object chat = param.args[1]; + handleChatLogging(chat); + } catch (Throwable t) { + Timber.e(t); + } + } + }); + } catch (HookNotFoundException e) { + Timber.e(e); + moduleLoadState.fail(); + } catch (Throwable t) { + Timber.e(t, "Unknown error"); + } + } + + Set intArray = Collections.newSetFromMap(new LinkedHashMap() { + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > MAX_CHAT_MESSAGE_ENTRIES; + } + }); + + if (getPref(SAVE_CHAT_IN_SC)) { + hookMethod( + CHAT_MESSAGE_VIEW_MEASURE, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + ContextHelper.getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + try { + Object chatLinker = getObjectField(CHAT_SAVING_LINKER, param.thisObject); + + if (chatLinker == null) { + Timber.w("Null Chat Linker"); + return; + } + + Object chat = getObjectField(CHAT_SAVING_LINKER_CHAT_REF, chatLinker); + + if (chat == null) { + Timber.w("Null Chat Object"); + return; + } + + Boolean isSaved = callHook(CHAT_ISSAVED_INAPP, chat); + int hashCode = chat.hashCode(); + + if (!isSaved) { + synchronized (intArray) { + if (intArray.contains(hashCode)) { + return; + } + } + + callHook(CHAT_SAVE_INAPP, param.thisObject); + } else { + synchronized (intArray) { + intArray.add(hashCode); + } + } + + } catch (Throwable t) { + Timber.w(t); + } + } + }); + } + }); + } + } + + + + private static String syntaxReplacer(String text, String nickname, String username, String receiver, String type){ + type = type.substring(0,1).toUpperCase() + type.substring(1).toLowerCase(); + return text.replace("{username}", username) + .replace("{nickname}", nickname) + .replace("{receiver}", receiver) + .replace("{type}", type) + .replace("\\n", "\n"); + } + + private void handleChatLogging(Object chat) { + FieldMapper chatMapper = FieldMapper.getMapper("Chat"); + FieldMapper chatSuperMapper = FieldMapper.getMapper("ChatSuper"); + FieldMapper headerMapper = FieldMapper.getMapper("Header"); + FieldMapper bodyMapper = FieldMapper.getMapper("Body"); + + String messageId = chatMapper.getFieldVal(chat, "chat_message_id"); + + if (chatTable.contains(messageId)) + return; + + ChatObject newChatObject = new ChatObject(); + + // Set Body Text ============================================================= + Object body = chatMapper.getFieldVal(chat, "body"); + newChatObject.text = bodyMapper.getFieldVal(body, "text"); + + String type = bodyMapper.getFieldVal(body, "type"); + + if (!type.equals("text")) { + if (newChatObject.text == null) + newChatObject.text = "<" + type + ">"; + else + newChatObject.text = "<" + type + ">\n" + newChatObject.text; + } + + if (newChatObject.text == null) { + Timber.w("Null text for chat... Probably not a message"); + return; + } + + // Set Message ID ============================================================ + newChatObject.chat_message_id = messageId; + // Set Timestamp =========================================== + newChatObject.timestamp = chatSuperMapper.getFieldVal(chat, "timestamp"); + // Set Sender/Receiver ======================================================= + Object header = chatSuperMapper.getFieldVal(chat, "header"); + newChatObject.from = headerMapper.getFieldVal(header, "from"); + newChatObject.to = headerMapper.getFieldVal(header, "to"); + newChatObject.conv_id = headerMapper.getFieldVal(header, "conv_id"); + newChatObject.sentByYou = yourUsername.equals(newChatObject.from); + // =========================================================================== + + if (!newChatObject.isCompleted()) { + Timber.w("Chat Object not completed!"); + return; + } + + if (chatTable.insert(newChatObject)) { + ConversationObject conversation = conversationTable.getFirst("conversation_id", newChatObject.conv_id); + + if (conversation == null) + conversation = new ConversationObject(); + + conversation.setUsers(newChatObject.from, newChatObject.to); + conversation.timestamp = newChatObject.timestamp; + conversation.conv_id = newChatObject.conv_id; + conversation.yourUsername = yourUsername; + conversationTable.insert(conversation); + } else + Timber.w("Chat object not inserted"); + + Timber.d("Created new chat object: " + newChatObject.toString()); + } + + @Override + public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { + // Giving time Snapchat time to initialize + try { + yourUsername = callStaticHook(GET_USERNAME); + } catch (Exception e) { + Timber.e(e, "Unable to get UserName"); + moduleLoadState.fail(); + } + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/CustomFilters.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/CustomFilters.java index f56e3e7..78679e5 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/CustomFilters.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/CustomFilters.java @@ -1,789 +1,789 @@ -//package com.ljmu.andre.snaptools.ModulePack; -// -//import android.annotation.SuppressLint; -//import android.app.Activity; -//import android.content.BroadcastReceiver; -//import android.content.Context; -//import android.content.Intent; -//import android.content.IntentFilter; -//import android.graphics.Bitmap; -//import android.graphics.BitmapFactory; -//import android.graphics.BitmapFactory.Options; -//import android.graphics.Color; -//import android.graphics.Rect; -//import android.graphics.drawable.BitmapDrawable; -//import android.graphics.drawable.Drawable; -//import android.os.Bundle; -//import android.os.Handler; -//import android.os.Looper; -//import android.os.Message; -//import android.view.Display; -//import android.view.KeyEvent; -//import android.view.MotionEvent; -//import android.view.View; -//import android.view.ViewGroup; -//import android.widget.FrameLayout.LayoutParams; -//import android.widget.ImageButton; -//import android.widget.ImageView; -//import android.widget.LinearLayout; -//import android.widget.RelativeLayout; -//import android.widget.TextView; -// -//import com.google.common.base.Optional; -//import com.ljmu.andre.CBIDatabase.CBITable; -//import com.ljmu.andre.CBIDatabase.Utils.QueryBuilder; -//import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; -//import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -//import com.ljmu.andre.snaptools.ModulePack.Databases.FiltersDatabase; -//import com.ljmu.andre.snaptools.ModulePack.Databases.Tables.FilterObject; -//import com.ljmu.andre.snaptools.ModulePack.Fragments.FiltersManagerFragment; -//import com.ljmu.andre.snaptools.ModulePack.Fragments.KotlinViews.NowPlayingView; -//import com.ljmu.andre.snaptools.ModulePack.Networking.Helpers.TrackAlbumArtManager; -//import com.ljmu.andre.snaptools.ModulePack.Utils.FieldMapper; -//import com.ljmu.andre.snaptools.ModulePack.Utils.TrackMetaData; -//import com.ljmu.andre.snaptools.Networking.WebResponse.ObjectResultListener; -//import com.ljmu.andre.snaptools.Utils.AnimationUtils; -//import com.ljmu.andre.snaptools.Utils.Assert; -//import com.ljmu.andre.snaptools.Utils.Constants; -//import com.ljmu.andre.snaptools.Utils.ContextHelper; -//import com.ljmu.andre.snaptools.Utils.CustomObservers.SimpleObserver; -//import com.ljmu.andre.snaptools.Utils.ResourceUtils; -//import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; -// -//import java.io.File; -//import java.util.ArrayList; -//import java.util.Collection; -//import java.util.Iterator; -//import java.util.List; -//import java.util.concurrent.Callable; -// -//import io.reactivex.Observable; -//import io.reactivex.android.schedulers.AndroidSchedulers; -//import io.reactivex.schedulers.Schedulers; -//import timber.log.Timber; -// -//import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -//import static com.ljmu.andre.GsonPreferences.Preferences.putPref; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.FILTER_METADATA; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SERIALIZABLE_FILTER_METADATA; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CREATE_FILTER_METADATA; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CREATE_GEOFILTER_VIEW; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.FILTER_LOAD_METADATA; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GEOFILTER_SHOULD_SUBSAMPLE; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GEOFILTER_TAPPED; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_GEOFILTER_CONTENT_VIEW; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.FILTER_METADATA_CACHE; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.FILTER_SERIALIZABLE_METADATA; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.GEOFILTER_VIEW_CREATION_ARG3; -//import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FILTERS_PATH; -//import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FILTER_NOW_PLAYING_ENABLED; -//import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.NOW_PLAYING_BOTTOM_MARGIN; -//import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.NOW_PLAYING_IMAGE_SIZE; -//import static com.ljmu.andre.snaptools.ModulePack.Utils.PackPreferenceHelpers.getFilterScaleType; -//import static com.ljmu.andre.snaptools.Utils.ContextHelper.getModuleContext; -//import static com.ljmu.andre.snaptools.Utils.FrameworkViewFactory.getSelectableBackgroundId; -//import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getDSLView; -//import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getDrawable; -//import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getId; -//import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getIdFromString; -//import static com.ljmu.andre.snaptools.Utils.XposedUtils.logStackTrace; -//import static de.robv.android.xposed.XposedHelpers.callMethod; -//import static de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField; -//import static de.robv.android.xposed.XposedHelpers.newInstance; -//import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; -// -///** -// * This class was created by Andre R M (SID: 701439) -// * It and its contents are free to use by all -// */ -// -//public class CustomFilters extends ModuleHelper { -// private static final int BACKGROUND_FILTER_SAMPLE_SIZE = 10; -// private static final String FILTER_IMAGEVIEW_ID = "custom_filter_view"; -// private static final String FILTER_FILE_ID = "custom_filter_path"; -// private static final Object FILTER_LOCK = new Object(); -// private String filtersPath; -// private Object duplicateInjectReference; -// private View nowPlayingView; -// private NowPlayingView playerViewProvider; -// private TrackMetaData trackMetaData; -// private ImageView nowPlayingSettingsView; -// private boolean isDraggingPlayer; -// -// public CustomFilters(String name, boolean canBeDisabled) { -// super(name, canBeDisabled); -// } -// -// @Override -// public FragmentHelper[] getUIFragments() { -// -// return new FragmentHelper[]{new FiltersManagerFragment()}; -// } -// -// @Override -// public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { -// FiltersDatabase.init(snapContext); -// filtersPath = getPref(FILTERS_PATH); -// -// CBITable filterTable = FiltersDatabase.getTable(FilterObject.class); -// Collection filterObjects = filterTable.getAll(new QueryBuilder() -// .addSelection("is_active", "1")); -// -// List filterMetaData = new ArrayList<>(filterObjects.size()); -// -// try { -// Class filterMetadataClass = HookResolver.resolveHookClass(FILTER_METADATA); -// Class serializableFilterMetadataClass = HookResolver.resolveHookClass(SERIALIZABLE_FILTER_METADATA); -// FieldMapper mapper = FieldMapper.initMapper("Filter", serializableFilterMetadataClass); -// -// hookMethod( -// CREATE_FILTER_METADATA, -// new ST_MethodHook() { -// @Override -// protected void after(MethodHookParam param) throws Throwable { -// Object result = callMethod(param.getResult(), "d"); -// Timber.d("MGR ITEM: " + result); -// -// synchronized (FILTER_LOCK) { -// if (result.getClass().equals(filterMetadataClass) && filterMetaData.isEmpty()) { -// int requiredMetaDataCount = filterObjects.size(); -// -// if (getPref(FILTER_NOW_PLAYING_ENABLED)) -// requiredMetaDataCount++; -// -// for (int i = 0; i < requiredMetaDataCount; i++) { -// Object geoMetaDataCache = getObjectField(FILTER_METADATA_CACHE, param.thisObject); -// Object serializableMetaData = getObjectField(FILTER_SERIALIZABLE_METADATA, geoMetaDataCache); -// -// // Retrieve the original settings ============================================ -// String oldId = mapper.getFieldVal(serializableMetaData, "filter_id"); -// Boolean wasDynamic = mapper.getFieldVal(serializableMetaData, "is_dynamic_geofilter"); -// -// // Assign our custom settings ================================================ -// mapper.setField(serializableMetaData, "filter_id", "Custom_" + i); -// mapper.setField(serializableMetaData, "is_dynamic_geofilter", true); -// -// // Create our custom metadata ================================================ -// Object builtMetaData = newInstance(filterMetadataClass, serializableMetaData); -// filterMetaData.add(builtMetaData); -// -// // Reset the original settings =============================================== -// mapper.setField(serializableMetaData, "filter_id", oldId); -// mapper.setField(serializableMetaData, "is_dynamic_geofilter", wasDynamic); -// } -// } -// } -// } -// } -// ); -// } catch (HookNotFoundException e) { -// Timber.e(e); -// moduleLoadState.fail(); -// } -// -// hookMethod( -// GEOFILTER_SHOULD_SUBSAMPLE, -// new ST_MethodHook() { -// @SuppressWarnings("Guava") -// @Override -// protected void before(MethodHookParam param) throws Throwable { -// RelativeLayout geofilterLayout = (RelativeLayout) param.thisObject; -// Timber.d("Should SubSample? " + param.args[0]); -// -// if (getAdditionalInstanceField(geofilterLayout, "is_now_playing") != null) { -// if (nowPlayingSettingsView == null) -// return; -// -// Timber.d("It's a now playing filter"); -// -// ContextHelper.getActivity().runOnUiThread(() -> { -// if (!(boolean) param.args[0]) -// AnimationUtils.collapse(nowPlayingSettingsView, 2); -// else -// AnimationUtils.expand(nowPlayingSettingsView, 2); -// }); -// -// return; -// } -// -// String filterFilePath = (String) getAdditionalInstanceField(geofilterLayout, FILTER_FILE_ID); -// -// if (filterFilePath != null) { -// Timber.d("Is custom filter: " + filterFilePath); -// //Timber.d("Is rendered: " + param.args[1]); -// -// ImageView filterImageView = getDSLView(geofilterLayout, FILTER_IMAGEVIEW_ID); -// File filterFile = new File(filterFilePath); -// -// if (filterImageView == null) { -// Timber.w("Couldn't find filter imageview for [Filter: %s]", filterFile.getName()); -// return; -// } -// -// if (!filterFile.exists()) { -// Timber.w("Filter file doesn't exist? " + filterFilePath); -// return; -// } -// -// if (!(boolean) param.args[0]) { -// Options bitmapFactoryOptions = new Options(); -// bitmapFactoryOptions.inSampleSize = BACKGROUND_FILTER_SAMPLE_SIZE; -// Bitmap decodedBitmap = BitmapFactory.decodeFile(filterFilePath, bitmapFactoryOptions); -// -// ContextHelper.getActivity().runOnUiThread(() -> { -// Drawable viewDrawable = filterImageView.getDrawable(); -// -// if (viewDrawable != null && viewDrawable instanceof BitmapDrawable) { -// Bitmap drawableBitmap = ((BitmapDrawable) viewDrawable).getBitmap(); -// if (drawableBitmap != null) -// drawableBitmap.recycle(); -// } -// -// filterImageView.setImageBitmap(decodedBitmap); -// }); -// } else { -// Observable.fromCallable((Callable>) () -> { -// try { -// return Optional.fromNullable(BitmapFactory.decodeFile(filterFilePath)); -// } catch (Exception ignored) { -// Timber.w("Couldn't decode high resolution filter image: " + filterFile.getName()); -// } -// -// return Optional.absent(); -// }).subscribeOn(Schedulers.computation()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(new SimpleObserver>() { -// @Override -// public void onNext(Optional bitmapOptional) { -// if (bitmapOptional.isPresent()) { -// Drawable viewDrawable = filterImageView.getDrawable(); -// -// if (viewDrawable != null && viewDrawable instanceof BitmapDrawable) { -// Bitmap drawableBitmap = ((BitmapDrawable) viewDrawable).getBitmap(); -// if (drawableBitmap != null) -// drawableBitmap.recycle(); -// } -// -// filterImageView.setImageBitmap(bitmapOptional.get()); -// } -// } -// }); -// } -// } -// } -// } -// ); -// -// hookMethod( -// FILTER_LOAD_METADATA, -// new ST_MethodHook() { -// @Override -// protected void after(MethodHookParam param) throws Throwable { -// synchronized (FILTER_LOCK) { -// Timber.d("Attempting to load filter views"); -// Collection geoFilterList = (Collection) param.getResult(); -// Object noIdeaWhatThisVarIs = getObjectField(GEOFILTER_VIEW_CREATION_ARG3, param.thisObject); -// -// if (noIdeaWhatThisVarIs == duplicateInjectReference) { -// Timber.i("Tried to re-inject filters into same list"); -// return; -// } -// -// if (!filterObjects.isEmpty() && filterMetaData.isEmpty()) { -// Timber.w("Expected metadata for custom filters"); -// return; -// } -// -// duplicateInjectReference = noIdeaWhatThisVarIs; -// -// Iterator filterObjectIterator = filterObjects.iterator(); -// int index = -1; -// while (filterObjectIterator.hasNext()) { -// index++; -// -// try { -// FilterObject filterObject = filterObjectIterator.next(); -// if (filterObject == null) { -// Timber.w("Null FilterObject? The fuck's that about?"); -// continue; -// } -// -// File imageFile = new File(filtersPath, filterObject.getFileName()); -// -// if (!imageFile.exists()) { -// Timber.w("Filter Image doesn't exist? [Filter: %s]", filterObject.getFileName()); -// filterObjectIterator.remove(); -// filterTable.delete(filterObject); -// continue; -// } -// -// if (index >= filterMetaData.size()) { -// Timber.w( -// "Filter Index exceeded MetaData Size [Index: %s][MetaDataSize: %s][ActiveFilters: %s]", -// index, filterMetaData.size(), filterObjects.size() -// ); -// continue; -// } -// -// //Timber.d("Index: " + index + " | " + filterMetaData.size()); -// //Timber.d("Binding: " + XposedHelpers.getObjectField(filterMetaData.get(index), "a") + " TO " + filterObject.getFileName()); -// Object geofilterViewHolder = callStaticHook(CREATE_GEOFILTER_VIEW, filterMetaData.get(index), param.args[1], noIdeaWhatThisVarIs); -// RelativeLayout geofilterView = callHook(GET_GEOFILTER_CONTENT_VIEW, geofilterViewHolder); -// geofilterView.removeAllViews(); -// -// ImageView testView = new ImageView(ContextHelper.getActivity()); -// testView.setId(getIdFromString(FILTER_IMAGEVIEW_ID)); -// testView.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); -// testView.setScaleType(getFilterScaleType()); -// geofilterView.addView(testView); -// -// setAdditionalInstanceField(geofilterView, FILTER_FILE_ID, imageFile.getAbsolutePath()); -// geoFilterList.add(geofilterViewHolder); -// } catch (Throwable t) { -// Timber.e(t); -// } -// } -// -// if ((boolean) getPref(FILTER_NOW_PLAYING_ENABLED) && !filterMetaData.isEmpty()) { -// try { -// setupNowPlayingSettings(ContextHelper.getActivity()); -// } catch (Throwable t) { -// Timber.e(t, "Couldn't create Filter Settings"); -// } -// -// Timber.d("Adding Now PLaying Filter"); -// -// Object geofilterViewHolder = callStaticHook(CREATE_GEOFILTER_VIEW, filterMetaData.get(filterMetaData.size() - 1), param.args[1], noIdeaWhatThisVarIs); -// RelativeLayout geofilterView = callHook(GET_GEOFILTER_CONTENT_VIEW, geofilterViewHolder); -// geofilterView.removeAllViews(); -// View nowPlayingMainContainer = getPlayerViewProvider(ContextHelper.getActivity()).getCurrentPlayerView(ContextHelper.getActivity()); -// -// nowPlayingView = getDSLView(nowPlayingMainContainer, "now_playing_container"); -// updateNowPlaying(ContextHelper.getActivity()); -// -// geofilterView.addView(nowPlayingMainContainer); -// setAdditionalInstanceField(geofilterView, "is_now_playing", true); -// geoFilterList.add(geofilterViewHolder); -// } -// } -// } -// }); -// -// hookMethod( -// GEOFILTER_TAPPED, -// new ST_MethodHook() { -// @Override -// protected void after(MethodHookParam param) throws Throwable { -// Timber.d("Found a tap: " + param.thisObject); -// -// logStackTrace(); -// -// if (getAdditionalInstanceField(param.thisObject, "is_now_playing") != null) { -// Timber.d("It's a now playing filter"); -// -// if (nowPlayingView == null || nowPlayingView.getVisibility() != View.VISIBLE) { -// param.setResult(false); -// Timber.d("It's not visible"); -// return; -// } -// -// Rect rect = new Rect(); -// if (!nowPlayingView.getGlobalVisibleRect(rect)) { -// param.setResult(false); -// Timber.d("Couldn't get filter bounds"); -// return; -// } -// -// MotionEvent motionEvent = (MotionEvent) param.args[0]; -// if (!rect.contains((int) motionEvent.getX(), (int) motionEvent.getY())) { -// param.setResult(false); -// Timber.d("It's not within the bounds"); -// return; -// } -// -// RelativeLayout geofilterView = (RelativeLayout) param.thisObject; -// geofilterView.removeAllViews(); -// -// View nowPlayingMainContainer = getPlayerViewProvider(ContextHelper.getActivity()).getPlayerView(ContextHelper.getActivity(), true); -// -// nowPlayingView = getDSLView(nowPlayingMainContainer, "now_playing_container"); -// updateNowPlaying(ContextHelper.getActivity()); -// -// geofilterView.addView(nowPlayingMainContainer); -// Timber.d("Now playing tapped " + param.args[0]); -// param.setResult(true); -// } -// } -// } -// ); -// } -// -// private void setupNowPlayingSettings(Activity snapActivity) { -// LinearLayout verticalButtonContainer = (LinearLayout) snapActivity.findViewById(getId(snapActivity, "vertical_button_container")); -// -// if (verticalButtonContainer == null) { -// Timber.w("VerticalButtonContainer not found, not assigning NowPlaying Settings button"); -// return; -// } -// -// Context moduleContext = getModuleContext(snapActivity); -// Assert.notNull("Null Context", moduleContext); -// -// /** -// * =========================================================================== -// * Create the filter settings button -// * =========================================================================== -// */ -// nowPlayingSettingsView = new ImageView(moduleContext); -// nowPlayingSettingsView.setBackgroundResource(getSelectableBackgroundId(snapActivity)); -// nowPlayingSettingsView.setImageResource(getDrawable(moduleContext, "settings_96")); -// nowPlayingSettingsView.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); -// nowPlayingSettingsView.setColorFilter(Color.WHITE); -// nowPlayingSettingsView.setScaleX(0.6f); -// nowPlayingSettingsView.setScaleY(0.6f); -// nowPlayingSettingsView.setVisibility(View.GONE); -// -// nowPlayingSettingsView.setOnClickListener((View v) -> buildPlayerSettingsView(snapActivity)); -// verticalButtonContainer.addView(nowPlayingSettingsView); -// } -// -// @SuppressLint("ClickableViewAccessibility") -// private void buildPlayerSettingsView(Activity snapActivity) { -// if (nowPlayingView != null) -// nowPlayingView.setVisibility(View.GONE); -// -// NowPlayingView playerProvider = getPlayerViewProvider(snapActivity); -// ViewGroup playerView = getDSLView(playerProvider.getCurrentPlayerView(snapActivity), "now_playing_container"); -// -// /** -// * =========================================================================== -// * Build the white overlay and add it to the preview frame -// * =========================================================================== -// */ -// ViewGroup contentContainer = (ViewGroup) snapActivity.findViewById(getId(snapActivity, "snap_preview_frame_layout")); -// RelativeLayout overlay = playerProvider.getPlayerPositionController(snapActivity, (seekBar, progress) -> { -// View artView = getDSLView(playerView, "now_playing_art"); -// ViewGroup.LayoutParams artParams = artView.getLayoutParams(); -// artParams.width = progress; -// artParams.height = progress; -// artView.setLayoutParams(artParams); -// }); -// overlay.setFocusableInTouchMode(true); -// overlay.requestFocus(); -// contentContainer.addView(overlay); -// // =========================================================================== -// -// ViewGroup overlayPlayerContainer = getDSLView(overlay, "player_container"); -// View bottomMarginView = getDSLView(overlay, "bottom_margin_line"); -// -// // =========================================================================== -// playerView.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); -// ((ViewGroup) playerView.getParent()).removeView(playerView); -// overlayPlayerContainer.addView(playerView); -// -// // =========================================================================== -// -// ImageButton cancelButton = getDSLView(overlay, "button_close_player_settings"); -// cancelButton.setOnClickListener(v -> removeOverlayView(contentContainer, overlay)); -// -// // =========================================================================== -// -// Handler touchHandler = new Handler(Looper.getMainLooper()); -// -// /** -// * =========================================================================== -// * Setup our touch listener to move the player -// * =========================================================================== -// */ -// //noinspection AndroidLintClickableViewAccessibility -// overlay.setOnTouchListener((v, event) -> { -// Timber.d("TouchEvent: " + event); -// -// /** -// * =========================================================================== -// * Check if our initial press is on the player view -// * - Never return touch events to Snapchat -// * =========================================================================== -// */ -// if (event.getAction() == MotionEvent.ACTION_DOWN) { -// Rect rect = new Rect(); -// if (!playerView.getGlobalVisibleRect(rect)) { -// return true; -// } -// -// if (!rect.contains((int) event.getX(), (int) event.getY())) { -// return true; -// } -// -// isDraggingPlayer = true; -// touchHandler.sendMessageDelayed(Message.obtain(touchHandler, 1), 250); -// } -// -// if (!isDraggingPlayer) -// return true; -// -// // =========================================================================== -// Display display = snapActivity.getWindowManager().getDefaultDisplay(); -// playerView.measure(display.getWidth(), display.getHeight()); -// // =========================================================================== -// -// int playerHeight = playerView.getMeasuredHeight(); //view height -// int parentHeight = overlay.getHeight(); //view height -// -// // =========================================================================== -// -// /** -// * =========================================================================== -// * Set the height of our "margin" line -// * =========================================================================== -// */ -// int marginHeight = (int) (parentHeight - (event.getY() + (playerHeight / 2))); -// -// if (marginHeight > parentHeight - playerHeight) -// marginHeight = parentHeight - playerHeight; -// else if (marginHeight < 0) -// marginHeight = 0; -// -// RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) bottomMarginView.getLayoutParams(); -// layoutParams.height = marginHeight; -// bottomMarginView.setLayoutParams(layoutParams); -// // =========================================================================== -// -// if (event.getAction() == MotionEvent.ACTION_UP) { -// isDraggingPlayer = false; -// -// if (touchHandler.hasMessages(1)) { -// v.performClick(); -// Timber.d("View %s got click", v); -// } -// -// putPref(NOW_PLAYING_BOTTOM_MARGIN, marginHeight); -// return true; -// } -// -// return true; -// }); -// -// /** -// * =========================================================================== -// * Override the Back Button to close the overlay -// * =========================================================================== -// */ -// overlay.setOnKeyListener((v, keyCode, event) -> { -// if (keyCode == KeyEvent.KEYCODE_BACK) { -// if (event.getAction() == MotionEvent.ACTION_UP) -// removeOverlayView(contentContainer, overlay); -// -// return true; -// } -// -// return false; -// }); -// } -// -// private void removeOverlayView(ViewGroup contentContainer, View overlay) { -// refreshNowPlayingViewMetrics(); -// contentContainer.removeView(overlay); -// -// if (nowPlayingView != null) -// nowPlayingView.setVisibility(View.VISIBLE); -// } -// -// private NowPlayingView getPlayerViewProvider(Activity activity) { -// if (playerViewProvider == null) { -// playerViewProvider = new NowPlayingView(); -// initMediaReceiver(activity); -// } -// -// return playerViewProvider; -// } -// -// private void refreshNowPlayingViewMetrics() { -// if (nowPlayingView != null) { -// RelativeLayout.LayoutParams playerParams = (RelativeLayout.LayoutParams) nowPlayingView.getLayoutParams(); -// playerParams.bottomMargin = getPref(NOW_PLAYING_BOTTOM_MARGIN); -// nowPlayingView.setLayoutParams(playerParams); -// -// int imageSize = getPref(NOW_PLAYING_IMAGE_SIZE); -// View artView = getDSLView(nowPlayingView, "now_playing_art"); -// ViewGroup.LayoutParams artParams = artView.getLayoutParams(); -// artParams.width = imageSize; -// artParams.height = imageSize; -// artView.setLayoutParams(artParams); -// } -// } -// -// private void updateNowPlaying(Context context) { -// if (nowPlayingView == null) { -// return; -// } -// -// String title = trackMetaData == null ? "Unknown" : trackMetaData.getTitle(); -// String artist = trackMetaData == null ? "Unknown" : trackMetaData.getArtist(); -// -// ResourceUtils.getDSLView(nowPlayingView, "now_playing_title").setText( -// title -// ); -// -// ResourceUtils.getDSLView(nowPlayingView, "now_playing_artist").setText( -// artist -// ); -// -// View artworkImageView = getDSLView(nowPlayingView, "now_playing_art"); -// -// if (trackMetaData != null) { -// if (trackMetaData.getArtwork() != null && !trackMetaData.getArtwork().isRecycled()) { -// artworkImageView.setBackground( -// new BitmapDrawable(context.getResources(), trackMetaData.getArtwork()) -// ); -// return; -// } -// -// TrackAlbumArtManager.getAlbumArt(trackMetaData, new ObjectResultListener() { -// @Override -// public void success(String message, Bitmap object) { -// trackMetaData.setArtwork(object); -// -// ResourceUtils.getDSLView(nowPlayingView, "now_playing_art").setBackground( -// new BitmapDrawable(context.getResources(), object) -// ); -// } -// -// @Override -// public void error(String message, Throwable t, int errorCode) { -// if (t != null) -// Timber.e(t, message); -// else -// Timber.w(message); -// -// trackMetaData.setArtwork(null); -// artworkImageView.setBackgroundResource( -// Constants.getApkVersionCode() >= 65 ? -// getDrawable(getModuleContext(context), "music_record_primary_dark") -// : getDrawable(getModuleContext(context), "delete") -// ); -// } -// }); -// } else { -// artworkImageView.setBackgroundResource( -// Constants.getApkVersionCode() >= 65 ? -// getDrawable(getModuleContext(context), "music_record_primary_dark") -// : getDrawable(getModuleContext(context), "delete") -// ); -// } -// } -// -// private void initMediaReceiver(Activity activity) { -// IntentFilter iF = new IntentFilter(); -// -// iF.addAction("com.andrew.apollo.metachanged"); -// -// iF.addAction("com.android.music.queuechanged"); -// iF.addAction("com.android.music.playstatechanged"); -// iF.addAction("com.android.music.playbackcomplete"); -// iF.addAction("com.android.music.metachanged"); -// //HTC Music -// iF.addAction("com.htc.music.playstatechanged"); -// iF.addAction("com.htc.music.playbackcomplete"); -// iF.addAction("com.htc.music.metachanged"); -// //MIUI Player -// iF.addAction("com.miui.player.playstatechanged"); -// iF.addAction("com.miui.player.playbackcomplete"); -// iF.addAction("com.miui.player.metachanged"); -// //Real -// iF.addAction("com.real.IMP.playstatechanged"); -// iF.addAction("com.real.IMP.playbackcomplete"); -// iF.addAction("com.real.IMP.metachanged"); -// //SEMC Music Player -// iF.addAction("com.sonyericsson.music.playbackcontrol.ACTION_TRACK_STARTED"); -// iF.addAction("com.sonyericsson.music.playbackcontrol.ACTION_PAUSED"); -// iF.addAction("com.sonyericsson.music.TRACK_COMPLETED"); -// iF.addAction("com.sonyericsson.music.metachanged"); -// iF.addAction("com.sonyericsson.music.playbackcomplete"); -// iF.addAction("com.sonyericsson.music.playstatechanged"); -// //rdio -// iF.addAction("com.rdio.android.metachanged"); -// iF.addAction("com.rdio.android.playstatechanged"); -// //Samsung Music Player -// iF.addAction("com.samsung.sec.android.MusicPlayer.playstatechanged"); -// iF.addAction("com.samsung.sec.android.MusicPlayer.playbackcomplete"); -// iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged"); -// iF.addAction("com.sec.android.app.music.playstatechanged"); -// iF.addAction("com.sec.android.app.music.playbackcomplete"); -// iF.addAction("com.sec.android.app.music.metachanged"); -// //Winamp -// iF.addAction("com.nullsoft.winamp.playstatechanged"); -// iF.addAction("com.nullsoft.winamp.metachanged"); -// //Amazon -// iF.addAction("com.amazon.mp3.playstatechanged"); -// iF.addAction("com.amazon.mp3.metachanged"); -// //Rhapsody -// iF.addAction("com.rhapsody.playstatechanged"); -// //PowerAmp -// iF.addAction("com.maxmpz.audioplayer.playstatechanged"); -// //Last.fm -// iF.addAction("fm.last.android.metachanged"); -// iF.addAction("fm.last.android.playbackpaused"); -// iF.addAction("fm.last.android.playbackcomplete"); -// //A simple last.fm scrobbler -// iF.addAction("com.adam.aslfms.notify.playstatechanged"); -// //Scrobble Droid -// iF.addAction("net.jjc1138.android.scrobbler.action.MUSIC_STATUS"); -// //Spotify -// iF.addAction("com.spotify.music.playbackstatechanged"); -// //Poweramp -// iF.addAction("com.maxmpz.audioplayer.TRACK_CHANGED"); -// -// Timber.d("Registering receiver"); -// activity.registerReceiver(new BroadcastReceiver() { -// @Override -// public void onReceive(Context context, Intent intent) { -// Timber.d("Received: " + intent.toString()); -// Bundle bundle = intent.getExtras(); -// -// if (bundle != null) { -// for (String key : bundle.keySet()) { -// Object value = bundle.get(key); -// -// if (value == null) -// value = "NULL"; -// -// Timber.d("TrackEvent: " + String.format("%s %s (%s)", key, -// value.toString(), value.getClass().getName())); -// } -// } -// -// TrackMetaData receivedTrackMetaData; -// -// try { -// receivedTrackMetaData = TrackMetaData.Builder -// .fromIntent(intent) -// .build(); -// } catch (NullPointerException e) { -// Timber.w("Track Broadcast not built: " + e.getMessage()); -// return; -// } -// -// if (receivedTrackMetaData == null) { -// Timber.e("Null TrackMetaData received"); -// return; -// } -// -// if (!receivedTrackMetaData.isPlaying()) { -// Timber.d("Track not playing... Skipping any updates"); -// return; -// } -// -// if (trackMetaData == null || !trackMetaData.equals(receivedTrackMetaData)) { -// Timber.d("Current track differs with intent track"); -// if (trackMetaData != null) -// trackMetaData.setArtwork(null); -// -// trackMetaData = receivedTrackMetaData; -// updateNowPlaying(activity); -// } else -// Timber.d("Intent track matches current track"); -// } -// }, iF); -// } -//} +//package com.ljmu.andre.snaptools.ModulePack; +// +//import android.annotation.SuppressLint; +//import android.app.Activity; +//import android.content.BroadcastReceiver; +//import android.content.Context; +//import android.content.Intent; +//import android.content.IntentFilter; +//import android.graphics.Bitmap; +//import android.graphics.BitmapFactory; +//import android.graphics.BitmapFactory.Options; +//import android.graphics.Color; +//import android.graphics.Rect; +//import android.graphics.drawable.BitmapDrawable; +//import android.graphics.drawable.Drawable; +//import android.os.Bundle; +//import android.os.Handler; +//import android.os.Looper; +//import android.os.Message; +//import android.view.Display; +//import android.view.KeyEvent; +//import android.view.MotionEvent; +//import android.view.View; +//import android.view.ViewGroup; +//import android.widget.FrameLayout.LayoutParams; +//import android.widget.ImageButton; +//import android.widget.ImageView; +//import android.widget.LinearLayout; +//import android.widget.RelativeLayout; +//import android.widget.TextView; +// +//import com.google.common.base.Optional; +//import com.ljmu.andre.CBIDatabase.CBITable; +//import com.ljmu.andre.CBIDatabase.Utils.QueryBuilder; +//import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; +//import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +//import com.ljmu.andre.snaptools.ModulePack.Databases.FiltersDatabase; +//import com.ljmu.andre.snaptools.ModulePack.Databases.Tables.FilterObject; +//import com.ljmu.andre.snaptools.ModulePack.Fragments.FiltersManagerFragment; +//import com.ljmu.andre.snaptools.ModulePack.Fragments.KotlinViews.NowPlayingView; +//import com.ljmu.andre.snaptools.ModulePack.Networking.Helpers.TrackAlbumArtManager; +//import com.ljmu.andre.snaptools.ModulePack.Utils.FieldMapper; +//import com.ljmu.andre.snaptools.ModulePack.Utils.TrackMetaData; +//import com.ljmu.andre.snaptools.Networking.WebResponse.ObjectResultListener; +//import com.ljmu.andre.snaptools.Utils.AnimationUtils; +//import com.ljmu.andre.snaptools.Utils.Assert; +//import com.ljmu.andre.snaptools.Utils.Constants; +//import com.ljmu.andre.snaptools.Utils.ContextHelper; +//import com.ljmu.andre.snaptools.Utils.CustomObservers.SimpleObserver; +//import com.ljmu.andre.snaptools.Utils.ResourceUtils; +//import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; +// +//import java.io.File; +//import java.util.ArrayList; +//import java.util.Collection; +//import java.util.Iterator; +//import java.util.List; +//import java.util.concurrent.Callable; +// +//import io.reactivex.Observable; +//import io.reactivex.android.schedulers.AndroidSchedulers; +//import io.reactivex.schedulers.Schedulers; +//import timber.log.Timber; +// +//import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +//import static com.ljmu.andre.GsonPreferences.Preferences.putPref; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.FILTER_METADATA; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SERIALIZABLE_FILTER_METADATA; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CREATE_FILTER_METADATA; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CREATE_GEOFILTER_VIEW; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.FILTER_LOAD_METADATA; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GEOFILTER_SHOULD_SUBSAMPLE; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GEOFILTER_TAPPED; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_GEOFILTER_CONTENT_VIEW; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.FILTER_METADATA_CACHE; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.FILTER_SERIALIZABLE_METADATA; +//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.GEOFILTER_VIEW_CREATION_ARG3; +//import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FILTERS_PATH; +//import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FILTER_NOW_PLAYING_ENABLED; +//import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.NOW_PLAYING_BOTTOM_MARGIN; +//import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.NOW_PLAYING_IMAGE_SIZE; +//import static com.ljmu.andre.snaptools.ModulePack.Utils.PackPreferenceHelpers.getFilterScaleType; +//import static com.ljmu.andre.snaptools.Utils.ContextHelper.getModuleContext; +//import static com.ljmu.andre.snaptools.Utils.FrameworkViewFactory.getSelectableBackgroundId; +//import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getDSLView; +//import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getDrawable; +//import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getId; +//import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getIdFromString; +//import static com.ljmu.andre.snaptools.Utils.XposedUtils.logStackTrace; +//import static de.robv.android.xposed.XposedHelpers.callMethod; +//import static de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField; +//import static de.robv.android.xposed.XposedHelpers.newInstance; +//import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; +// +///** +// * This class was created by Andre R M (SID: 701439) +// * It and its contents are free to use by all +// */ +// +//public class CustomFilters extends ModuleHelper { +// private static final int BACKGROUND_FILTER_SAMPLE_SIZE = 10; +// private static final String FILTER_IMAGEVIEW_ID = "custom_filter_view"; +// private static final String FILTER_FILE_ID = "custom_filter_path"; +// private static final Object FILTER_LOCK = new Object(); +// private String filtersPath; +// private Object duplicateInjectReference; +// private View nowPlayingView; +// private NowPlayingView playerViewProvider; +// private TrackMetaData trackMetaData; +// private ImageView nowPlayingSettingsView; +// private boolean isDraggingPlayer; +// +// public CustomFilters(String name, boolean canBeDisabled) { +// super(name, canBeDisabled); +// } +// +// @Override +// public FragmentHelper[] getUIFragments() { +// +// return new FragmentHelper[]{new FiltersManagerFragment()}; +// } +// +// @Override +// public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { +// FiltersDatabase.init(snapContext); +// filtersPath = getPref(FILTERS_PATH); +// +// CBITable filterTable = FiltersDatabase.getTable(FilterObject.class); +// Collection filterObjects = filterTable.getAll(new QueryBuilder() +// .addSelection("is_active", "1")); +// +// List filterMetaData = new ArrayList<>(filterObjects.size()); +// +// try { +// Class filterMetadataClass = HookResolver.resolveHookClass(FILTER_METADATA); +// Class serializableFilterMetadataClass = HookResolver.resolveHookClass(SERIALIZABLE_FILTER_METADATA); +// FieldMapper mapper = FieldMapper.initMapper("Filter", serializableFilterMetadataClass); +// +// hookMethod( +// CREATE_FILTER_METADATA, +// new ST_MethodHook() { +// @Override +// protected void after(MethodHookParam param) throws Throwable { +// Object result = callMethod(param.getResult(), "d"); +// Timber.d("MGR ITEM: " + result); +// +// synchronized (FILTER_LOCK) { +// if (result.getClass().equals(filterMetadataClass) && filterMetaData.isEmpty()) { +// int requiredMetaDataCount = filterObjects.size(); +// +// if (getPref(FILTER_NOW_PLAYING_ENABLED)) +// requiredMetaDataCount++; +// +// for (int i = 0; i < requiredMetaDataCount; i++) { +// Object geoMetaDataCache = getObjectField(FILTER_METADATA_CACHE, param.thisObject); +// Object serializableMetaData = getObjectField(FILTER_SERIALIZABLE_METADATA, geoMetaDataCache); +// +// // Retrieve the original settings ============================================ +// String oldId = mapper.getFieldVal(serializableMetaData, "filter_id"); +// Boolean wasDynamic = mapper.getFieldVal(serializableMetaData, "is_dynamic_geofilter"); +// +// // Assign our custom settings ================================================ +// mapper.setField(serializableMetaData, "filter_id", "Custom_" + i); +// mapper.setField(serializableMetaData, "is_dynamic_geofilter", true); +// +// // Create our custom metadata ================================================ +// Object builtMetaData = newInstance(filterMetadataClass, serializableMetaData); +// filterMetaData.add(builtMetaData); +// +// // Reset the original settings =============================================== +// mapper.setField(serializableMetaData, "filter_id", oldId); +// mapper.setField(serializableMetaData, "is_dynamic_geofilter", wasDynamic); +// } +// } +// } +// } +// } +// ); +// } catch (HookNotFoundException e) { +// Timber.e(e); +// moduleLoadState.fail(); +// } +// +// hookMethod( +// GEOFILTER_SHOULD_SUBSAMPLE, +// new ST_MethodHook() { +// @SuppressWarnings("Guava") +// @Override +// protected void before(MethodHookParam param) throws Throwable { +// RelativeLayout geofilterLayout = (RelativeLayout) param.thisObject; +// Timber.d("Should SubSample? " + param.args[0]); +// +// if (getAdditionalInstanceField(geofilterLayout, "is_now_playing") != null) { +// if (nowPlayingSettingsView == null) +// return; +// +// Timber.d("It's a now playing filter"); +// +// ContextHelper.getActivity().runOnUiThread(() -> { +// if (!(boolean) param.args[0]) +// AnimationUtils.collapse(nowPlayingSettingsView, 2); +// else +// AnimationUtils.expand(nowPlayingSettingsView, 2); +// }); +// +// return; +// } +// +// String filterFilePath = (String) getAdditionalInstanceField(geofilterLayout, FILTER_FILE_ID); +// +// if (filterFilePath != null) { +// Timber.d("Is custom filter: " + filterFilePath); +// //Timber.d("Is rendered: " + param.args[1]); +// +// ImageView filterImageView = getDSLView(geofilterLayout, FILTER_IMAGEVIEW_ID); +// File filterFile = new File(filterFilePath); +// +// if (filterImageView == null) { +// Timber.w("Couldn't find filter imageview for [Filter: %s]", filterFile.getName()); +// return; +// } +// +// if (!filterFile.exists()) { +// Timber.w("Filter file doesn't exist? " + filterFilePath); +// return; +// } +// +// if (!(boolean) param.args[0]) { +// Options bitmapFactoryOptions = new Options(); +// bitmapFactoryOptions.inSampleSize = BACKGROUND_FILTER_SAMPLE_SIZE; +// Bitmap decodedBitmap = BitmapFactory.decodeFile(filterFilePath, bitmapFactoryOptions); +// +// ContextHelper.getActivity().runOnUiThread(() -> { +// Drawable viewDrawable = filterImageView.getDrawable(); +// +// if (viewDrawable != null && viewDrawable instanceof BitmapDrawable) { +// Bitmap drawableBitmap = ((BitmapDrawable) viewDrawable).getBitmap(); +// if (drawableBitmap != null) +// drawableBitmap.recycle(); +// } +// +// filterImageView.setImageBitmap(decodedBitmap); +// }); +// } else { +// Observable.fromCallable((Callable>) () -> { +// try { +// return Optional.fromNullable(BitmapFactory.decodeFile(filterFilePath)); +// } catch (Exception ignored) { +// Timber.w("Couldn't decode high resolution filter image: " + filterFile.getName()); +// } +// +// return Optional.absent(); +// }).subscribeOn(Schedulers.computation()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new SimpleObserver>() { +// @Override +// public void onNext(Optional bitmapOptional) { +// if (bitmapOptional.isPresent()) { +// Drawable viewDrawable = filterImageView.getDrawable(); +// +// if (viewDrawable != null && viewDrawable instanceof BitmapDrawable) { +// Bitmap drawableBitmap = ((BitmapDrawable) viewDrawable).getBitmap(); +// if (drawableBitmap != null) +// drawableBitmap.recycle(); +// } +// +// filterImageView.setImageBitmap(bitmapOptional.get()); +// } +// } +// }); +// } +// } +// } +// } +// ); +// +// hookMethod( +// FILTER_LOAD_METADATA, +// new ST_MethodHook() { +// @Override +// protected void after(MethodHookParam param) throws Throwable { +// synchronized (FILTER_LOCK) { +// Timber.d("Attempting to load filter views"); +// Collection geoFilterList = (Collection) param.getResult(); +// Object noIdeaWhatThisVarIs = getObjectField(GEOFILTER_VIEW_CREATION_ARG3, param.thisObject); +// +// if (noIdeaWhatThisVarIs == duplicateInjectReference) { +// Timber.i("Tried to re-inject filters into same list"); +// return; +// } +// +// if (!filterObjects.isEmpty() && filterMetaData.isEmpty()) { +// Timber.w("Expected metadata for custom filters"); +// return; +// } +// +// duplicateInjectReference = noIdeaWhatThisVarIs; +// +// Iterator filterObjectIterator = filterObjects.iterator(); +// int index = -1; +// while (filterObjectIterator.hasNext()) { +// index++; +// +// try { +// FilterObject filterObject = filterObjectIterator.next(); +// if (filterObject == null) { +// Timber.w("Null FilterObject? The fuck's that about?"); +// continue; +// } +// +// File imageFile = new File(filtersPath, filterObject.getFileName()); +// +// if (!imageFile.exists()) { +// Timber.w("Filter Image doesn't exist? [Filter: %s]", filterObject.getFileName()); +// filterObjectIterator.remove(); +// filterTable.delete(filterObject); +// continue; +// } +// +// if (index >= filterMetaData.size()) { +// Timber.w( +// "Filter Index exceeded MetaData Size [Index: %s][MetaDataSize: %s][ActiveFilters: %s]", +// index, filterMetaData.size(), filterObjects.size() +// ); +// continue; +// } +// +// //Timber.d("Index: " + index + " | " + filterMetaData.size()); +// //Timber.d("Binding: " + XposedHelpers.getObjectField(filterMetaData.get(index), "a") + " TO " + filterObject.getFileName()); +// Object geofilterViewHolder = callStaticHook(CREATE_GEOFILTER_VIEW, filterMetaData.get(index), param.args[1], noIdeaWhatThisVarIs); +// RelativeLayout geofilterView = callHook(GET_GEOFILTER_CONTENT_VIEW, geofilterViewHolder); +// geofilterView.removeAllViews(); +// +// ImageView testView = new ImageView(ContextHelper.getActivity()); +// testView.setId(getIdFromString(FILTER_IMAGEVIEW_ID)); +// testView.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); +// testView.setScaleType(getFilterScaleType()); +// geofilterView.addView(testView); +// +// setAdditionalInstanceField(geofilterView, FILTER_FILE_ID, imageFile.getAbsolutePath()); +// geoFilterList.add(geofilterViewHolder); +// } catch (Throwable t) { +// Timber.e(t); +// } +// } +// +// if ((boolean) getPref(FILTER_NOW_PLAYING_ENABLED) && !filterMetaData.isEmpty()) { +// try { +// setupNowPlayingSettings(ContextHelper.getActivity()); +// } catch (Throwable t) { +// Timber.e(t, "Couldn't create Filter Settings"); +// } +// +// Timber.d("Adding Now PLaying Filter"); +// +// Object geofilterViewHolder = callStaticHook(CREATE_GEOFILTER_VIEW, filterMetaData.get(filterMetaData.size() - 1), param.args[1], noIdeaWhatThisVarIs); +// RelativeLayout geofilterView = callHook(GET_GEOFILTER_CONTENT_VIEW, geofilterViewHolder); +// geofilterView.removeAllViews(); +// View nowPlayingMainContainer = getPlayerViewProvider(ContextHelper.getActivity()).getCurrentPlayerView(ContextHelper.getActivity()); +// +// nowPlayingView = getDSLView(nowPlayingMainContainer, "now_playing_container"); +// updateNowPlaying(ContextHelper.getActivity()); +// +// geofilterView.addView(nowPlayingMainContainer); +// setAdditionalInstanceField(geofilterView, "is_now_playing", true); +// geoFilterList.add(geofilterViewHolder); +// } +// } +// } +// }); +// +// hookMethod( +// GEOFILTER_TAPPED, +// new ST_MethodHook() { +// @Override +// protected void after(MethodHookParam param) throws Throwable { +// Timber.d("Found a tap: " + param.thisObject); +// +// logStackTrace(); +// +// if (getAdditionalInstanceField(param.thisObject, "is_now_playing") != null) { +// Timber.d("It's a now playing filter"); +// +// if (nowPlayingView == null || nowPlayingView.getVisibility() != View.VISIBLE) { +// param.setResult(false); +// Timber.d("It's not visible"); +// return; +// } +// +// Rect rect = new Rect(); +// if (!nowPlayingView.getGlobalVisibleRect(rect)) { +// param.setResult(false); +// Timber.d("Couldn't get filter bounds"); +// return; +// } +// +// MotionEvent motionEvent = (MotionEvent) param.args[0]; +// if (!rect.contains((int) motionEvent.getX(), (int) motionEvent.getY())) { +// param.setResult(false); +// Timber.d("It's not within the bounds"); +// return; +// } +// +// RelativeLayout geofilterView = (RelativeLayout) param.thisObject; +// geofilterView.removeAllViews(); +// +// View nowPlayingMainContainer = getPlayerViewProvider(ContextHelper.getActivity()).getPlayerView(ContextHelper.getActivity(), true); +// +// nowPlayingView = getDSLView(nowPlayingMainContainer, "now_playing_container"); +// updateNowPlaying(ContextHelper.getActivity()); +// +// geofilterView.addView(nowPlayingMainContainer); +// Timber.d("Now playing tapped " + param.args[0]); +// param.setResult(true); +// } +// } +// } +// ); +// } +// +// private void setupNowPlayingSettings(Activity snapActivity) { +// LinearLayout verticalButtonContainer = (LinearLayout) snapActivity.findViewById(getId(snapActivity, "vertical_button_container")); +// +// if (verticalButtonContainer == null) { +// Timber.w("VerticalButtonContainer not found, not assigning NowPlaying Settings button"); +// return; +// } +// +// Context moduleContext = getModuleContext(snapActivity); +// Assert.notNull("Null Context", moduleContext); +// +// /** +// * =========================================================================== +// * Create the filter settings button +// * =========================================================================== +// */ +// nowPlayingSettingsView = new ImageView(moduleContext); +// nowPlayingSettingsView.setBackgroundResource(getSelectableBackgroundId(snapActivity)); +// nowPlayingSettingsView.setImageResource(getDrawable(moduleContext, "settings_96")); +// nowPlayingSettingsView.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); +// nowPlayingSettingsView.setColorFilter(Color.WHITE); +// nowPlayingSettingsView.setScaleX(0.6f); +// nowPlayingSettingsView.setScaleY(0.6f); +// nowPlayingSettingsView.setVisibility(View.GONE); +// +// nowPlayingSettingsView.setOnClickListener((View v) -> buildPlayerSettingsView(snapActivity)); +// verticalButtonContainer.addView(nowPlayingSettingsView); +// } +// +// @SuppressLint("ClickableViewAccessibility") +// private void buildPlayerSettingsView(Activity snapActivity) { +// if (nowPlayingView != null) +// nowPlayingView.setVisibility(View.GONE); +// +// NowPlayingView playerProvider = getPlayerViewProvider(snapActivity); +// ViewGroup playerView = getDSLView(playerProvider.getCurrentPlayerView(snapActivity), "now_playing_container"); +// +// /** +// * =========================================================================== +// * Build the white overlay and add it to the preview frame +// * =========================================================================== +// */ +// ViewGroup contentContainer = (ViewGroup) snapActivity.findViewById(getId(snapActivity, "snap_preview_frame_layout")); +// RelativeLayout overlay = playerProvider.getPlayerPositionController(snapActivity, (seekBar, progress) -> { +// View artView = getDSLView(playerView, "now_playing_art"); +// ViewGroup.LayoutParams artParams = artView.getLayoutParams(); +// artParams.width = progress; +// artParams.height = progress; +// artView.setLayoutParams(artParams); +// }); +// overlay.setFocusableInTouchMode(true); +// overlay.requestFocus(); +// contentContainer.addView(overlay); +// // =========================================================================== +// +// ViewGroup overlayPlayerContainer = getDSLView(overlay, "player_container"); +// View bottomMarginView = getDSLView(overlay, "bottom_margin_line"); +// +// // =========================================================================== +// playerView.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); +// ((ViewGroup) playerView.getParent()).removeView(playerView); +// overlayPlayerContainer.addView(playerView); +// +// // =========================================================================== +// +// ImageButton cancelButton = getDSLView(overlay, "button_close_player_settings"); +// cancelButton.setOnClickListener(v -> removeOverlayView(contentContainer, overlay)); +// +// // =========================================================================== +// +// Handler touchHandler = new Handler(Looper.getMainLooper()); +// +// /** +// * =========================================================================== +// * Setup our touch listener to move the player +// * =========================================================================== +// */ +// //noinspection AndroidLintClickableViewAccessibility +// overlay.setOnTouchListener((v, event) -> { +// Timber.d("TouchEvent: " + event); +// +// /** +// * =========================================================================== +// * Check if our initial press is on the player view +// * - Never return touch events to Snapchat +// * =========================================================================== +// */ +// if (event.getAction() == MotionEvent.ACTION_DOWN) { +// Rect rect = new Rect(); +// if (!playerView.getGlobalVisibleRect(rect)) { +// return true; +// } +// +// if (!rect.contains((int) event.getX(), (int) event.getY())) { +// return true; +// } +// +// isDraggingPlayer = true; +// touchHandler.sendMessageDelayed(Message.obtain(touchHandler, 1), 250); +// } +// +// if (!isDraggingPlayer) +// return true; +// +// // =========================================================================== +// Display display = snapActivity.getWindowManager().getDefaultDisplay(); +// playerView.measure(display.getWidth(), display.getHeight()); +// // =========================================================================== +// +// int playerHeight = playerView.getMeasuredHeight(); //view height +// int parentHeight = overlay.getHeight(); //view height +// +// // =========================================================================== +// +// /** +// * =========================================================================== +// * Set the height of our "margin" line +// * =========================================================================== +// */ +// int marginHeight = (int) (parentHeight - (event.getY() + (playerHeight / 2))); +// +// if (marginHeight > parentHeight - playerHeight) +// marginHeight = parentHeight - playerHeight; +// else if (marginHeight < 0) +// marginHeight = 0; +// +// RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) bottomMarginView.getLayoutParams(); +// layoutParams.height = marginHeight; +// bottomMarginView.setLayoutParams(layoutParams); +// // =========================================================================== +// +// if (event.getAction() == MotionEvent.ACTION_UP) { +// isDraggingPlayer = false; +// +// if (touchHandler.hasMessages(1)) { +// v.performClick(); +// Timber.d("View %s got click", v); +// } +// +// putPref(NOW_PLAYING_BOTTOM_MARGIN, marginHeight); +// return true; +// } +// +// return true; +// }); +// +// /** +// * =========================================================================== +// * Override the Back Button to close the overlay +// * =========================================================================== +// */ +// overlay.setOnKeyListener((v, keyCode, event) -> { +// if (keyCode == KeyEvent.KEYCODE_BACK) { +// if (event.getAction() == MotionEvent.ACTION_UP) +// removeOverlayView(contentContainer, overlay); +// +// return true; +// } +// +// return false; +// }); +// } +// +// private void removeOverlayView(ViewGroup contentContainer, View overlay) { +// refreshNowPlayingViewMetrics(); +// contentContainer.removeView(overlay); +// +// if (nowPlayingView != null) +// nowPlayingView.setVisibility(View.VISIBLE); +// } +// +// private NowPlayingView getPlayerViewProvider(Activity activity) { +// if (playerViewProvider == null) { +// playerViewProvider = new NowPlayingView(); +// initMediaReceiver(activity); +// } +// +// return playerViewProvider; +// } +// +// private void refreshNowPlayingViewMetrics() { +// if (nowPlayingView != null) { +// RelativeLayout.LayoutParams playerParams = (RelativeLayout.LayoutParams) nowPlayingView.getLayoutParams(); +// playerParams.bottomMargin = getPref(NOW_PLAYING_BOTTOM_MARGIN); +// nowPlayingView.setLayoutParams(playerParams); +// +// int imageSize = getPref(NOW_PLAYING_IMAGE_SIZE); +// View artView = getDSLView(nowPlayingView, "now_playing_art"); +// ViewGroup.LayoutParams artParams = artView.getLayoutParams(); +// artParams.width = imageSize; +// artParams.height = imageSize; +// artView.setLayoutParams(artParams); +// } +// } +// +// private void updateNowPlaying(Context context) { +// if (nowPlayingView == null) { +// return; +// } +// +// String title = trackMetaData == null ? "Unknown" : trackMetaData.getTitle(); +// String artist = trackMetaData == null ? "Unknown" : trackMetaData.getArtist(); +// +// ResourceUtils.getDSLView(nowPlayingView, "now_playing_title").setText( +// title +// ); +// +// ResourceUtils.getDSLView(nowPlayingView, "now_playing_artist").setText( +// artist +// ); +// +// View artworkImageView = getDSLView(nowPlayingView, "now_playing_art"); +// +// if (trackMetaData != null) { +// if (trackMetaData.getArtwork() != null && !trackMetaData.getArtwork().isRecycled()) { +// artworkImageView.setBackground( +// new BitmapDrawable(context.getResources(), trackMetaData.getArtwork()) +// ); +// return; +// } +// +// TrackAlbumArtManager.getAlbumArt(trackMetaData, new ObjectResultListener() { +// @Override +// public void success(String message, Bitmap object) { +// trackMetaData.setArtwork(object); +// +// ResourceUtils.getDSLView(nowPlayingView, "now_playing_art").setBackground( +// new BitmapDrawable(context.getResources(), object) +// ); +// } +// +// @Override +// public void error(String message, Throwable t, int errorCode) { +// if (t != null) +// Timber.e(t, message); +// else +// Timber.w(message); +// +// trackMetaData.setArtwork(null); +// artworkImageView.setBackgroundResource( +// Constants.getApkVersionCode() >= 65 ? +// getDrawable(getModuleContext(context), "music_record_primary_dark") +// : getDrawable(getModuleContext(context), "delete") +// ); +// } +// }); +// } else { +// artworkImageView.setBackgroundResource( +// Constants.getApkVersionCode() >= 65 ? +// getDrawable(getModuleContext(context), "music_record_primary_dark") +// : getDrawable(getModuleContext(context), "delete") +// ); +// } +// } +// +// private void initMediaReceiver(Activity activity) { +// IntentFilter iF = new IntentFilter(); +// +// iF.addAction("com.andrew.apollo.metachanged"); +// +// iF.addAction("com.android.music.queuechanged"); +// iF.addAction("com.android.music.playstatechanged"); +// iF.addAction("com.android.music.playbackcomplete"); +// iF.addAction("com.android.music.metachanged"); +// //HTC Music +// iF.addAction("com.htc.music.playstatechanged"); +// iF.addAction("com.htc.music.playbackcomplete"); +// iF.addAction("com.htc.music.metachanged"); +// //MIUI Player +// iF.addAction("com.miui.player.playstatechanged"); +// iF.addAction("com.miui.player.playbackcomplete"); +// iF.addAction("com.miui.player.metachanged"); +// //Real +// iF.addAction("com.real.IMP.playstatechanged"); +// iF.addAction("com.real.IMP.playbackcomplete"); +// iF.addAction("com.real.IMP.metachanged"); +// //SEMC Music Player +// iF.addAction("com.sonyericsson.music.playbackcontrol.ACTION_TRACK_STARTED"); +// iF.addAction("com.sonyericsson.music.playbackcontrol.ACTION_PAUSED"); +// iF.addAction("com.sonyericsson.music.TRACK_COMPLETED"); +// iF.addAction("com.sonyericsson.music.metachanged"); +// iF.addAction("com.sonyericsson.music.playbackcomplete"); +// iF.addAction("com.sonyericsson.music.playstatechanged"); +// //rdio +// iF.addAction("com.rdio.android.metachanged"); +// iF.addAction("com.rdio.android.playstatechanged"); +// //Samsung Music Player +// iF.addAction("com.samsung.sec.android.MusicPlayer.playstatechanged"); +// iF.addAction("com.samsung.sec.android.MusicPlayer.playbackcomplete"); +// iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged"); +// iF.addAction("com.sec.android.app.music.playstatechanged"); +// iF.addAction("com.sec.android.app.music.playbackcomplete"); +// iF.addAction("com.sec.android.app.music.metachanged"); +// //Winamp +// iF.addAction("com.nullsoft.winamp.playstatechanged"); +// iF.addAction("com.nullsoft.winamp.metachanged"); +// //Amazon +// iF.addAction("com.amazon.mp3.playstatechanged"); +// iF.addAction("com.amazon.mp3.metachanged"); +// //Rhapsody +// iF.addAction("com.rhapsody.playstatechanged"); +// //PowerAmp +// iF.addAction("com.maxmpz.audioplayer.playstatechanged"); +// //Last.fm +// iF.addAction("fm.last.android.metachanged"); +// iF.addAction("fm.last.android.playbackpaused"); +// iF.addAction("fm.last.android.playbackcomplete"); +// //A simple last.fm scrobbler +// iF.addAction("com.adam.aslfms.notify.playstatechanged"); +// //Scrobble Droid +// iF.addAction("net.jjc1138.android.scrobbler.action.MUSIC_STATUS"); +// //Spotify +// iF.addAction("com.spotify.music.playbackstatechanged"); +// //Poweramp +// iF.addAction("com.maxmpz.audioplayer.TRACK_CHANGED"); +// +// Timber.d("Registering receiver"); +// activity.registerReceiver(new BroadcastReceiver() { +// @Override +// public void onReceive(Context context, Intent intent) { +// Timber.d("Received: " + intent.toString()); +// Bundle bundle = intent.getExtras(); +// +// if (bundle != null) { +// for (String key : bundle.keySet()) { +// Object value = bundle.get(key); +// +// if (value == null) +// value = "NULL"; +// +// Timber.d("TrackEvent: " + String.format("%s %s (%s)", key, +// value.toString(), value.getClass().getName())); +// } +// } +// +// TrackMetaData receivedTrackMetaData; +// +// try { +// receivedTrackMetaData = TrackMetaData.Builder +// .fromIntent(intent) +// .build(); +// } catch (NullPointerException e) { +// Timber.w("Track Broadcast not built: " + e.getMessage()); +// return; +// } +// +// if (receivedTrackMetaData == null) { +// Timber.e("Null TrackMetaData received"); +// return; +// } +// +// if (!receivedTrackMetaData.isPlaying()) { +// Timber.d("Track not playing... Skipping any updates"); +// return; +// } +// +// if (trackMetaData == null || !trackMetaData.equals(receivedTrackMetaData)) { +// Timber.d("Current track differs with intent track"); +// if (trackMetaData != null) +// trackMetaData.setArtwork(null); +// +// trackMetaData = receivedTrackMetaData; +// updateNowPlaying(activity); +// } else +// Timber.d("Intent track matches current track"); +// } +// }, iF); +// } +//} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ForcedHooks.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ForcedHooks.java index afe2def..4d7d5f9 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ForcedHooks.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ForcedHooks.java @@ -1,682 +1,682 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.content.Context; - -import com.ljmu.andre.GsonPreferences.Preferences.Preference; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import de.robv.android.xposed.XC_MethodHook.MethodHookParam; -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_BOOLEAN; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_FLOAT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_INT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_LONG; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_STRING; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.ERROR_SUPPRESS_DOWNLOADER_RUNNABLE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.NETWORK_EXECUTE_SYNC; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_ANIMATED_CONTENT_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_CAMERA2_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_CAPTIONV2_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_CHAT_VIDEO_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_EMOJIBRUSH_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_FPS_OVERLAY_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_GIPHY_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_HANDSFREEREC_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_INSIGHTS_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_MULTI_SNAP_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_SKYFILTERS_STATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_ADVERTS_BLOCKED; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_DISCOVER_BLOCKED; -import static com.ljmu.andre.snaptools.Utils.FrameworkPreferencesDef.DISABLED_MODULES; -import static com.ljmu.andre.snaptools.Utils.PreferenceHelpers.collectionContains; -import static de.robv.android.xposed.XposedHelpers.callMethod; -import static de.robv.android.xposed.XposedHelpers.findAndHookMethod; -import static de.robv.android.xposed.XposedHelpers.findClass; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class ForcedHooks extends ModuleHelper { - - private boolean miscChangesEnabled; - - public ForcedHooks(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - @Override - public FragmentHelper[] getUIFragments() { - return new FragmentHelper[0]; - } - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - boolean blockDiscovery = getPref(STORY_BLOCKER_DISCOVER_BLOCKED); - boolean blockAds = getPref(STORY_BLOCKER_ADVERTS_BLOCKED); - - miscChangesEnabled = !collectionContains(DISABLED_MODULES, "Misc Changes"); - - /** - * =========================================================================== - * Returns TRUE to mark SC as DEBUG build - * =========================================================================== - */ -// findAndHookMethod( -// "aqly", snapClassLoader, -// "p", XC_MethodReplacement.returnConstant(true) -// ); - - -// findAndHookMethod( -// "tfj", snapClassLoader, -// "a", findClass("tfj$c", snapClassLoader), -// new ST_MethodHook() { -// @Override protected void after(MethodHookParam param) throws Throwable { -// Timber.d("Inbound debug item: " + param.args[0] + " | " + param.getResult()); -// -// Enum debugEnum = (Enum) param.args[0]; -// -// switch (debugEnum.name()) { -// case "CROP_SNAP_ENABLED": -// param.setResult(true); -// break; -// } -// } -// } -// ); - - //Forced Chronological Friends Feed -// findAndHookMethod( -// "ifj", snapClassLoader, -// "a", List.class, findClass("sda", snapClassLoader), -// new HookWrapper((HookBefore) param -> XposedHelpers.setObjectField(param.thisObject, "a", null)) -// ); - - /* - Snapchat Experiments - */ - Boolean insightsMode = transformBoolean(FORCE_INSIGHTS_STATE); - String multiSnapMode = transformOverwrite(FORCE_MULTI_SNAP_STATE); - Boolean videoChatMode = transformBoolean(FORCE_CHAT_VIDEO_STATE); - String animatedContentMode = transformOverwrite(FORCE_ANIMATED_CONTENT_STATE); - Boolean giphyMode = transformBoolean(FORCE_GIPHY_STATE); - String captionV2Mode = transformOverwrite(FORCE_CAPTIONV2_STATE); - String camera2Mode = transformOverwrite(FORCE_CAMERA2_STATE); - Boolean camera2ModeBool = transformBoolean(FORCE_CAMERA2_STATE); - String handsFreeMode = transformOtherOnOff(FORCE_HANDSFREEREC_STATE, "FULLY_ENABLED", "DISABLED", null); - Boolean fpsOverlayMode = transformBoolean(FORCE_FPS_OVERLAY_STATE); - String skyFilterMode = transformOverwrite(FORCE_SKYFILTERS_STATE); - Boolean emojiBrushMode = transformBoolean(FORCE_EMOJIBRUSH_STATE); - - HookAfter experimentDebugHook = null; - -// if (Constants.getApkVersionCode() >= 73 && Constants.isApkDebug()) -// experimentDebugHook = this::handleExperimentPrinting; - - findAndHookMethod( - "apjq", snapClassLoader, - "a", "apjr", Object.class, - new HookWrapper( - param -> { - String key = (String) callMethod(param.args[0], "a"); - - switch (key) { - /** - * =========================================================================== - * Experiments - * =========================================================================== - */ -// case "developerOptionCheetahMode": -// handleExperiment(param, cheetahMode); -// break; -// case "chat_v10": -// handleExperiment(param, chatV10Mode); -// break; - case "developerOptionsImpalaForceShowInsights": - handleExperiment(param, insightsMode); - break; - case "magikarp_overwrite": - handleExperiment(param, multiSnapMode); - break; - case "chat_video_enabled": - handleExperiment(param, videoChatMode); - break; - case "animated_content_overwrite": - handleExperiment(param, animatedContentMode); - break; - case "giphy_in_preview": - handleExperiment(param, giphyMode); - break; - case "caption_v2_overwrite": - handleExperiment(param, captionV2Mode); - break; - case "camera2_overwrite_state": - handleExperiment(param, camera2Mode); - break; - case "developerOptionsHandsFreeRecordingMode": - handleExperiment(param, handsFreeMode); - break; - case "developerOptionsShouldShowFpsOverlay": - handleExperiment(param, fpsOverlayMode); - break; - case "sky_filters_overwrite": - handleExperiment(param, skyFilterMode); - break; - case "emoji_brush": - handleExperiment(param, emojiBrushMode); - - break; - - - /** - * =========================================================================== - * Forced Enabled Settings - * =========================================================================== - */ - case "nycEnableStreaming": - case "developerOptionsNycSearchStreamingAbtestOverride": - case "developerOptionsNycPublicStoryStreamingAbtestOverride": - param.setResult("FALSE"); - break; - case "discover_feed_tab_mode": - param.setResult("FORCE_ON"); - break; - case "discover_feed_should_show_subscribed_tab_nux": - param.setResult(true); - break; - case "enable geofilters": - param.setResult(true); - break; - } - }, - experimentDebugHook - ) - ); - - ST_MethodHook abTestHook = new HookWrapper( - (HookBefore) param -> { - String groupName = (String) param.args[0]; - String experimentName = (String) param.args[1]; - - String key = groupName + ":" + experimentName; - - switch (key) { - case "DOWNSCALE_TAKE_PICTURE_API_PHOTO_BEFORE_SEND:ENABLED": - handleExperiment(param, camera2ModeBool); - break; - case "ADS_HOLDOUT_01:SHOW_ADS": - case "ADS_HOLDOUT_01:ADS_IN_AA": - if (blockAds) - param.setResult(false); - break; - case "CRASHLYTICS:USE_CRASHLYTICS": - param.setResult(false); - break; - case "PUBLIC_STORY_STREAMING_ANDROID:enable": - case "STREAMING_PROMOTED_STORIES_ANDROID:enable": - param.setResult(false); - break; - } - }, -// (Constants.getApkVersionCode() >= 73 && Constants.isApkDebug()) ? -// (HookAfter) param -> handleABTestPrinting(param) : null - null - ); - - hookMethod( - AB_TEST_CHECK_STRING, - abTestHook - ); - - hookMethod( - AB_TEST_CHECK_INT, - abTestHook - ); - - hookMethod( - AB_TEST_CHECK_LONG, - abTestHook - ); - - hookMethod( - AB_TEST_CHECK_BOOLEAN, - abTestHook - ); - - hookMethod( - AB_TEST_CHECK_FLOAT, - abTestHook - ); - -// hookMethod( -// AB_TEST_CHECK_VALUE, -// new HookWrapper((HookAfter) param -> { -// Timber.d("RAK: [p1: %s][p2: %s][p3: %s][r: %s]", param.args[0], param.args[1], param.args[2], param.getResult()); -// -// switch ((String) param.args[0]) { -//// case "CHEETAH_ANDROID": -//// if (param.args[1].equals("CHEETAH_MODE")) -//// param.setResult(forceCheetah ? "FULL_CHEETAH" : "OLD_DESIGN"); -//// break; -//// case "DIRECT_FILE_SNAP_UPLOAD": -//// if (param.args[1].equals("ENABLED")) -//// param.setResult("true"); -//// break; -//// case "LANDING_PAGE_CAMERA_VIEW": -//// param.setResult("true"); -//// break; -// case "DOWNSCALE_TAKE_PICTURE_API_PHOTO_BEFORE_SEND": -// if (param.args[1].equals("ENABLED")) -// param.setResult("false"); -// break; -//// case "ANDROID_CAMERA2_AND_TAKEPICTURE_API_v2": -//// if (param.args[1].equals("enable")) -//// param.setResult("true"); -//// break; -//// case "CAMERA_FRAGMENT_V2": -//// if (param.args[1].equals("ENABLED")) -//// param.setResult("true"); -//// break; -// case "PUBLIC_STORY_STREAMING_ANDROID": -// if (param.args[1].equals("enable")) -// param.setResult("false"); -// return; -// case "STREAMING_PROMOTED_STORIES_ANDROID": -// if (param.args[1].equals("enable")) -// param.setResult("false"); -// return; -//// case "ASYM_VIEW_PAGER": -//// if (param.args[1].equals("ENABLED")) -//// param.setResult("true"); -//// break; -//// case "SECURE_CHAT_SESSION_V2": -//// if (param.args[1].equals("ENABLED")) -//// param.setResult("true"); -//// break; -// } -// -// switch ((String) param.args[1]) { -// case "SHOW_ADS": -// case "ADS_IN_AA": -// if (getPref(STORY_BLOCKER_ADVERTS_BLOCKED)) -// param.setResult("false"); -// return; -// case "ENABLE_MULTI_SNAP": -// param.setResult("true"); -// return; -// case "ENABLE_PREVIEW_V2": -// param.setResult("true"); -// return; -// case "USE_CRASHLYTICS": -// param.setResult("false"); -// return; -//// case "RELEASE_DELAY_TIME_WHEN_USER_SWIPE_INTO_CONVERSATION": -//// param.setResult("5000"); -//// break; -// case "ENCODING_QUALITY": -// param.setResult("100"); -// break; -// case "DF_TAB_ANDROID": -// if (blockDiscovery) -// param.setResult("true"); -// break; -//// case "USE_SERVER_SIDE_PRECACHING": -//// param.setResult("false"); -//// break; -//// case "MEDIA_PLAYER_IMPL_EXOPLAYER": -//// param.setResult("true"); -//// break; -//// case "SHOULD_SHOW_SPONSORED_SECTION": -//// param.setResult("false"); -//// break; -//// case "fps": -//// param.setResult("30"); -//// break; -// } -// -// })); - - - hookMethod( - NETWORK_EXECUTE_SYNC, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - String url = (String) callMethod(param.thisObject, "getUrl"); - - Timber.d("Network URL: " + url); - - if (url.endsWith("logout")) { - Timber.d("Blocking logout"); - param.setResult(null); - } - } - } - ); - // Error Suppression for the hook above - hookMethod( - ERROR_SUPPRESS_DOWNLOADER_RUNNABLE, - new HookWrapper((HookAfter) param -> { - if (param.getThrowable() != null) { - Timber.d("Download Runnable Error Suppression"); - param.setThrowable(null); - } - }) - ); - - /** - * =========================================================================== - * Just used as a fatal crash prevention... Likely just moves the issue - * =========================================================================== - */ -// XposedHelpers.findAndHookMethod( -// "htt", snapClassLoader, -// "a", -// new ST_MethodHook() { -// @Override protected void after(MethodHookParam param) throws Throwable { -// if (param.getThrowable() != null) { -// Timber.e(new Throwable( -// "Error raised from lens: " + -// XposedHelpers.getObjectField(param.thisObject, "d").toString(), -// param.getThrowable() -// )); -// -// param.setResult(false); -// } -// } -// } -// ); - - /** - * =========================================================================== - * Just used as a fatal crash prevention... Likely just moves the issue - * =========================================================================== - */ -// XposedHelpers.findAndHookMethod( -// "hto", snapClassLoader, -// "c", String.class, -// new ST_MethodHook() { -// @Override protected void after(MethodHookParam param) throws Throwable { -// if (param.getThrowable() != null) { -// Timber.e(new Throwable( -// "Error raised checking lens set content", -// param.getThrowable() -// )); -// -// param.setResult(false); -// } -// } -// } -// ); - } - - private String transformOtherString(Preference preference) { - if (!miscChangesEnabled) - return null; - - String preferenceValue = getPref(preference); - - if (preferenceValue == null || preferenceValue.equals("Default")) { - return null; - } - - return preferenceValue; - } - - private Boolean transformBoolean(Preference preference) { - if (!miscChangesEnabled) - return null; - - String preferenceValue = getPref(preference); - - if (preferenceValue != null) { - if (preferenceValue.equals("On")) { - return true; - } else if (preferenceValue.equals("Off")) { - return false; - } - } - - return null; - } - - private String transformOverwrite(Preference preference) { - if (!miscChangesEnabled) - return null; - - String preferenceValue = getPref(preference); - - if (preferenceValue != null) { - if (preferenceValue.equals("On")) { - return "FORCE_ENABLED"; - } else if (preferenceValue.equals("Off")) { - return "FORCE_DISABLED"; - } - } - - return null; - - } - - private T transformOtherOnOff(Preference preference, T on, T off, T def) { - if (!miscChangesEnabled) - return null; - - String preferenceValue = getPref(preference); - - if (preferenceValue != null) { - if (preferenceValue.equals("On")) { - return on; - } else if (preferenceValue.equals("Off")) { - return off; - } - } - - return def; - } - - private void handleExperiment(MethodHookParam param, Object experimentMode) { - if (!miscChangesEnabled) - return; - - if (experimentMode != null) - param.setResult(experimentMode); - } - - private void handleABTestPrinting(MethodHookParam param) { - String groupName = (String) param.args[0]; - String experimentName = (String) param.args[1]; - - Object result = param.getResult(); - - switch (groupName) { - case "DISCOVER_V2": - break; - default: - Timber.d("ABTest [Group: %s][Exp: %s][Def: %s][Res: %s]", groupName, experimentName, param.args[2], - result + (result != null ? "(" + result.getClass() + ")" : "")); - } - } - - private void handleExperimentPrinting(MethodHookParam param) { - { - String key = (String) callMethod(param.args[0], "a"); - Object defaultValue = param.args[1]; - Object result = param.getResult(); - - switch (key) { - /** - * =========================================================================== - * Tests - * =========================================================================== - */ - case "cold_start_stabilization": - param.setResult("Rainbow"); - break; - case "is_official_user": - param.setResult(true); - break; - - case "is_logged_in": - case "is_registering": - case "username": - case "birthday": - case "enable_shake_to_report": - case "nycSettingsGhostMode": - case "nycSettingsGhostModeDuration": - case "nycSettingsAudience": - case "nycSettingsCustomFriendIds": - case "nycHasOnboarded": - case "nycDontShareState": - case "memories_year_end_story_badge": - case "developerOptionsNycTrackActivity": - case "BITMASK_AVATAR_ID": - case "has_seen_new_user_onboard_ui": - case "birthday_in_millis": - case "birthday_this_year_in_millis": - case "has_seen_snap_onboarding_message": - case "memories_year_end_story": - case "perf_bandwidthsampler_version": - case "perf_downloadmanager_hyperrequest_enabled": - case "perf_downloadmanager_hyperrequest_disabled": - case "user_id": - case "BITMOJI_SELFIE_ID": - case "daily_client_id_timestamp": - case "daily_client_id": - case "last_lenses_enabled_date": - case "auth_token": - case "perf_preferred_network_interface": - case "email": - case "perf_enable_detailed_timing_metrics": - case "story_count": - case "enable_featured_official_stories": - case "ad_track_user_data": - case "ad_preferences": - case "registered_in_cheetah": - case "developerOptionMockLocation": - case "developerOptionMockLocationNYCOffice": - case "enable_resumable_download": - case "delta_fetch_one_on_one_conversations": - case "perf_hyper_callback_feature_executor": - case "cheetah_selfie_id": - case "web_attachments_overwrite": - case "nycSharingNotificationLastSeenTimestamp": - case "nycLastOpenMapTimestamp": - case "nycSharingNotificationCount": - case "nycHasSeenSharingNotification": - case "nycSettingsShowDevToolTipOnce": - case "search_seeen_p2s_tooltip_count": - case "account_creation_millis": - case "has_seen_cheetah_camera_onboarding_my_story_management_tooltip": - case "has_seen_cheetah_onboarding_my_story_view_tooltip": - case "has_given_access_to_contacts": - case "is_popular_user": - case "profile_v3_phone_number_verification_prompt": - case "friendmoji_blocked_keys": - case "phone_number": - case "last_profile_fragment_exit_timestamp": - case "last_seen_added_me_timestamp": - case "bitmojiFetchInWebp": - case "FRIEND_FEED_AST_GROUP": - case "developerOptionsSnapAdsEnablePromotedStories": - case "developerOptionsCheetahFreeformRankingTreatments": - case "developer_option_lens_on_preview_tweak": - case "has_seen_swipe_filters_onboarding_message": - case "transcoding_overwrite_state": - case "transcodingState": - case "video_filters_overwrite_state": - case "video_filters": - case "usps_geofencing_v2": - case "usps_multi_location": - case "sticker_picker_hometab_overwrite": - case "context_filter_metadata_timestamp": - case "captureRotation": - case "show_geofilter_tools_enabled": - case "checksum_friends": - case "checksum_updates": - case "checksum_conversations": - case "checksums_study_settings": - case "last_time_low_sensitivity_unlockables_request": - case "backup_fastlane": - case "last_scan_unlocked_lenses_check_time": - case "next_force_scheduled_lenses_check_time": - case "should_force_low_sensitivity_request": - case "is_first_all_updates_on_app_upgrade": - case "geofilter_allow_concurrent_requests": - case "friends_sync_token": - case "FRIEND_FEED_LAST_FULL_SYNC_TIMESTAMP": - case "developerOptionsShouldShowLocationToast": - case "enable_usps_geolens": - case "has_clicked_to_turn_off_lens": - case "usps_gtq_migration_plan": - case "developer_option_force_camera_30_fps": - case "gles3_allowed": - case "is_using_multiple_frame_buffer_recording": - case "reg_user_complete_timestamp": - case "reg_last_transition_action": - case "reg_last_page": - case "developerOptionsShowFrameDispatcherBufferUsage": - case "snapads_ad_session_id": - case "snap_tag_image": - case "has_profile_images": - case "address_book_version": - case "is_device_whitelisted_for_lenses_on_backend": - case "PENDING_CLIENT_PROPERTIES_V1": - case "square_tos_accepted": - case "has_seen_send_to_quick_add_dialog": - case "has_seen_send_to_sms_snap_alert_v2": - case "has_seen_auto_friend_invite_alert": - case "tos_version_6_accepted": - case "spectacles_tos_accepted": - case "has_seen_camera_module_lens": - case "has_seen_camera_module_scan": - case "clipboard_detection_enabled": - case "search_our_story_attribution_tos_accepted": - case "has_used_memories_search": - case "number_of_enter_memories": - case "image_player_reset_timestamp": - case "transcoding_reset_timestamp": - case "cheetah_partial_story_response": - case "cash_customer_allowed": - case "last_seen_new_friends_tooltip_timestamp": - case "gcm_registration_id": - case "notificationsEnabled": - case "-1572590044has_given_access_to_contacts": - case "story_privacy_setting": - case "last_checked_trophycase_timestamp": - case "display_name_pop_up_count": - case "last_identity_action_timestamp": - case "developerOptionsDiscoverCustomRegion": - case "developerOptionsDiscoverCustomCountry": - case "suggested_friend_sync_version_v2": - case "use_unsigned_receipt": - case "dirty_video_rendering_overwrite_state": - case "dirty_video_rendering": - case "video_decoder_texcoord_transformation": - case "developerOptionsSetDecoderOperatingRate": - case "snapchatInfiniteVideoPreference": - case "should_override_track_url": - case "FRIEND_FEED_WARM_START_BACKGROUND_TIME_THRESHOLD_SECONDS": - case "FRIEND_FEED_WARM_START_LAST_FULL_RANKING_THRESHOLD_SECONDS": - case "has_seen_sound_tools_tooltip": - case "has_seen_auto_sticker_generation_tooltip": - case "developerOptionsCustomEndpoint": - case "app_application_open_client_ts": - case "last_permission_report_timestamp": - case "is_snapchat_contact_permission_synced": - case "reg_started": - break; - default: - Timber.d( - "New preference check: " + key + " | " + defaultValue + " | " - + result + (result != null ? "(" + result.getClass() + ")" : "") - ); - } - } - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.content.Context; + +import com.ljmu.andre.GsonPreferences.Preferences.Preference; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import de.robv.android.xposed.XC_MethodHook.MethodHookParam; +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_BOOLEAN; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_FLOAT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_INT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_LONG; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.AB_TEST_CHECK_STRING; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.ERROR_SUPPRESS_DOWNLOADER_RUNNABLE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.NETWORK_EXECUTE_SYNC; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_ANIMATED_CONTENT_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_CAMERA2_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_CAPTIONV2_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_CHAT_VIDEO_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_EMOJIBRUSH_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_FPS_OVERLAY_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_GIPHY_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_HANDSFREEREC_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_INSIGHTS_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_MULTI_SNAP_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_SKYFILTERS_STATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_ADVERTS_BLOCKED; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_DISCOVER_BLOCKED; +import static com.ljmu.andre.snaptools.Utils.FrameworkPreferencesDef.DISABLED_MODULES; +import static com.ljmu.andre.snaptools.Utils.PreferenceHelpers.collectionContains; +import static de.robv.android.xposed.XposedHelpers.callMethod; +import static de.robv.android.xposed.XposedHelpers.findAndHookMethod; +import static de.robv.android.xposed.XposedHelpers.findClass; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class ForcedHooks extends ModuleHelper { + + private boolean miscChangesEnabled; + + public ForcedHooks(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + @Override + public FragmentHelper[] getUIFragments() { + return new FragmentHelper[0]; + } + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + boolean blockDiscovery = getPref(STORY_BLOCKER_DISCOVER_BLOCKED); + boolean blockAds = getPref(STORY_BLOCKER_ADVERTS_BLOCKED); + + miscChangesEnabled = !collectionContains(DISABLED_MODULES, "Misc Changes"); + + /** + * =========================================================================== + * Returns TRUE to mark SC as DEBUG build + * =========================================================================== + */ +// findAndHookMethod( +// "aqly", snapClassLoader, +// "p", XC_MethodReplacement.returnConstant(true) +// ); + + +// findAndHookMethod( +// "tfj", snapClassLoader, +// "a", findClass("tfj$c", snapClassLoader), +// new ST_MethodHook() { +// @Override protected void after(MethodHookParam param) throws Throwable { +// Timber.d("Inbound debug item: " + param.args[0] + " | " + param.getResult()); +// +// Enum debugEnum = (Enum) param.args[0]; +// +// switch (debugEnum.name()) { +// case "CROP_SNAP_ENABLED": +// param.setResult(true); +// break; +// } +// } +// } +// ); + + //Forced Chronological Friends Feed +// findAndHookMethod( +// "ifj", snapClassLoader, +// "a", List.class, findClass("sda", snapClassLoader), +// new HookWrapper((HookBefore) param -> XposedHelpers.setObjectField(param.thisObject, "a", null)) +// ); + + /* + Snapchat Experiments + */ + Boolean insightsMode = transformBoolean(FORCE_INSIGHTS_STATE); + String multiSnapMode = transformOverwrite(FORCE_MULTI_SNAP_STATE); + Boolean videoChatMode = transformBoolean(FORCE_CHAT_VIDEO_STATE); + String animatedContentMode = transformOverwrite(FORCE_ANIMATED_CONTENT_STATE); + Boolean giphyMode = transformBoolean(FORCE_GIPHY_STATE); + String captionV2Mode = transformOverwrite(FORCE_CAPTIONV2_STATE); + String camera2Mode = transformOverwrite(FORCE_CAMERA2_STATE); + Boolean camera2ModeBool = transformBoolean(FORCE_CAMERA2_STATE); + String handsFreeMode = transformOtherOnOff(FORCE_HANDSFREEREC_STATE, "FULLY_ENABLED", "DISABLED", null); + Boolean fpsOverlayMode = transformBoolean(FORCE_FPS_OVERLAY_STATE); + String skyFilterMode = transformOverwrite(FORCE_SKYFILTERS_STATE); + Boolean emojiBrushMode = transformBoolean(FORCE_EMOJIBRUSH_STATE); + + HookAfter experimentDebugHook = null; + +// if (Constants.getApkVersionCode() >= 73 && Constants.isApkDebug()) +// experimentDebugHook = this::handleExperimentPrinting; + + findAndHookMethod( + "axbl", snapClassLoader, + "a", "axbm", Object.class, + new HookWrapper( + param -> { + String key = (String) callMethod(param.args[0], "a"); + + switch (key) { + /** + * =========================================================================== + * Experiments + * =========================================================================== + */ +// case "developerOptionCheetahMode": +// handleExperiment(param, cheetahMode); +// break; +// case "chat_v10": +// handleExperiment(param, chatV10Mode); +// break; + case "developerOptionsImpalaForceShowInsights": + handleExperiment(param, insightsMode); + break; + case "magikarp_overwrite": + handleExperiment(param, multiSnapMode); + break; + case "chat_video_enabled": + handleExperiment(param, videoChatMode); + break; + case "animated_content_overwrite": + handleExperiment(param, animatedContentMode); + break; + case "giphy_in_preview": + handleExperiment(param, giphyMode); + break; + case "caption_v2_overwrite": + handleExperiment(param, captionV2Mode); + break; + case "camera2_overwrite_state": + handleExperiment(param, camera2Mode); + break; + case "developerOptionsHandsFreeRecordingMode": + handleExperiment(param, handsFreeMode); + break; + case "developerOptionsShouldShowFpsOverlay": + handleExperiment(param, fpsOverlayMode); + break; + case "sky_filters_overwrite": + handleExperiment(param, skyFilterMode); + break; + case "emoji_brush": + handleExperiment(param, emojiBrushMode); + + break; + + + /** + * =========================================================================== + * Forced Enabled Settings + * =========================================================================== + */ + case "nycEnableStreaming": + case "developerOptionsNycSearchStreamingAbtestOverride": + case "developerOptionsNycPublicStoryStreamingAbtestOverride": + param.setResult("FALSE"); + break; + case "discover_feed_tab_mode": + param.setResult("FORCE_ON"); + break; + case "discover_feed_should_show_subscribed_tab_nux": + param.setResult(true); + break; + case "enable geofilters": + param.setResult(true); + break; + } + }, + experimentDebugHook + ) + ); + + ST_MethodHook abTestHook = new HookWrapper( + (HookBefore) param -> { + String groupName = (String) param.args[0]; + String experimentName = (String) param.args[1]; + + String key = groupName + ":" + experimentName; + + switch (key) { + case "DOWNSCALE_TAKE_PICTURE_API_PHOTO_BEFORE_SEND:ENABLED": + handleExperiment(param, camera2ModeBool); + break; + case "ADS_HOLDOUT_01:SHOW_ADS": + case "ADS_HOLDOUT_01:ADS_IN_AA": + if (blockAds) + param.setResult(false); + break; + case "CRASHLYTICS:USE_CRASHLYTICS": + param.setResult(false); + break; + case "PUBLIC_STORY_STREAMING_ANDROID:enable": + case "STREAMING_PROMOTED_STORIES_ANDROID:enable": + param.setResult(false); + break; + } + }, +// (Constants.getApkVersionCode() >= 73 && Constants.isApkDebug()) ? +// (HookAfter) param -> handleABTestPrinting(param) : null + null + ); + + hookMethod( + AB_TEST_CHECK_STRING, + abTestHook + ); + + hookMethod( + AB_TEST_CHECK_INT, + abTestHook + ); + + hookMethod( + AB_TEST_CHECK_LONG, + abTestHook + ); + + hookMethod( + AB_TEST_CHECK_BOOLEAN, + abTestHook + ); + + hookMethod( + AB_TEST_CHECK_FLOAT, + abTestHook + ); + +// hookMethod( +// AB_TEST_CHECK_VALUE, +// new HookWrapper((HookAfter) param -> { +// Timber.d("RAK: [p1: %s][p2: %s][p3: %s][r: %s]", param.args[0], param.args[1], param.args[2], param.getResult()); +// +// switch ((String) param.args[0]) { +//// case "CHEETAH_ANDROID": +//// if (param.args[1].equals("CHEETAH_MODE")) +//// param.setResult(forceCheetah ? "FULL_CHEETAH" : "OLD_DESIGN"); +//// break; +//// case "DIRECT_FILE_SNAP_UPLOAD": +//// if (param.args[1].equals("ENABLED")) +//// param.setResult("true"); +//// break; +//// case "LANDING_PAGE_CAMERA_VIEW": +//// param.setResult("true"); +//// break; +// case "DOWNSCALE_TAKE_PICTURE_API_PHOTO_BEFORE_SEND": +// if (param.args[1].equals("ENABLED")) +// param.setResult("false"); +// break; +//// case "ANDROID_CAMERA2_AND_TAKEPICTURE_API_v2": +//// if (param.args[1].equals("enable")) +//// param.setResult("true"); +//// break; +//// case "CAMERA_FRAGMENT_V2": +//// if (param.args[1].equals("ENABLED")) +//// param.setResult("true"); +//// break; +// case "PUBLIC_STORY_STREAMING_ANDROID": +// if (param.args[1].equals("enable")) +// param.setResult("false"); +// return; +// case "STREAMING_PROMOTED_STORIES_ANDROID": +// if (param.args[1].equals("enable")) +// param.setResult("false"); +// return; +//// case "ASYM_VIEW_PAGER": +//// if (param.args[1].equals("ENABLED")) +//// param.setResult("true"); +//// break; +//// case "SECURE_CHAT_SESSION_V2": +//// if (param.args[1].equals("ENABLED")) +//// param.setResult("true"); +//// break; +// } +// +// switch ((String) param.args[1]) { +// case "SHOW_ADS": +// case "ADS_IN_AA": +// if (getPref(STORY_BLOCKER_ADVERTS_BLOCKED)) +// param.setResult("false"); +// return; +// case "ENABLE_MULTI_SNAP": +// param.setResult("true"); +// return; +// case "ENABLE_PREVIEW_V2": +// param.setResult("true"); +// return; +// case "USE_CRASHLYTICS": +// param.setResult("false"); +// return; +//// case "RELEASE_DELAY_TIME_WHEN_USER_SWIPE_INTO_CONVERSATION": +//// param.setResult("5000"); +//// break; +// case "ENCODING_QUALITY": +// param.setResult("100"); +// break; +// case "DF_TAB_ANDROID": +// if (blockDiscovery) +// param.setResult("true"); +// break; +//// case "USE_SERVER_SIDE_PRECACHING": +//// param.setResult("false"); +//// break; +//// case "MEDIA_PLAYER_IMPL_EXOPLAYER": +//// param.setResult("true"); +//// break; +//// case "SHOULD_SHOW_SPONSORED_SECTION": +//// param.setResult("false"); +//// break; +//// case "fps": +//// param.setResult("30"); +//// break; +// } +// +// })); + + + hookMethod( + NETWORK_EXECUTE_SYNC, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + String url = (String) callMethod(param.thisObject, "getUrl"); + + Timber.d("Network URL: " + url); + + if (url.endsWith("logout")) { + Timber.d("Blocking logout"); + param.setResult(null); + } + } + } + ); + // Error Suppression for the hook above + hookMethod( + ERROR_SUPPRESS_DOWNLOADER_RUNNABLE, + new HookWrapper((HookAfter) param -> { + if (param.getThrowable() != null) { + Timber.d("Download Runnable Error Suppression"); + param.setThrowable(null); + } + }) + ); + + /** + * =========================================================================== + * Just used as a fatal crash prevention... Likely just moves the issue + * =========================================================================== + */ +// XposedHelpers.findAndHookMethod( +// "htt", snapClassLoader, +// "a", +// new ST_MethodHook() { +// @Override protected void after(MethodHookParam param) throws Throwable { +// if (param.getThrowable() != null) { +// Timber.e(new Throwable( +// "Error raised from lens: " + +// XposedHelpers.getObjectField(param.thisObject, "d").toString(), +// param.getThrowable() +// )); +// +// param.setResult(false); +// } +// } +// } +// ); + + /** + * =========================================================================== + * Just used as a fatal crash prevention... Likely just moves the issue + * =========================================================================== + */ +// XposedHelpers.findAndHookMethod( +// "hto", snapClassLoader, +// "c", String.class, +// new ST_MethodHook() { +// @Override protected void after(MethodHookParam param) throws Throwable { +// if (param.getThrowable() != null) { +// Timber.e(new Throwable( +// "Error raised checking lens set content", +// param.getThrowable() +// )); +// +// param.setResult(false); +// } +// } +// } +// ); + } + + private String transformOtherString(Preference preference) { + if (!miscChangesEnabled) + return null; + + String preferenceValue = getPref(preference); + + if (preferenceValue == null || preferenceValue.equals("Default")) { + return null; + } + + return preferenceValue; + } + + private Boolean transformBoolean(Preference preference) { + if (!miscChangesEnabled) + return null; + + String preferenceValue = getPref(preference); + + if (preferenceValue != null) { + if (preferenceValue.equals("On")) { + return true; + } else if (preferenceValue.equals("Off")) { + return false; + } + } + + return null; + } + + private String transformOverwrite(Preference preference) { + if (!miscChangesEnabled) + return null; + + String preferenceValue = getPref(preference); + + if (preferenceValue != null) { + if (preferenceValue.equals("On")) { + return "FORCE_ENABLED"; + } else if (preferenceValue.equals("Off")) { + return "FORCE_DISABLED"; + } + } + + return null; + + } + + private T transformOtherOnOff(Preference preference, T on, T off, T def) { + if (!miscChangesEnabled) + return null; + + String preferenceValue = getPref(preference); + + if (preferenceValue != null) { + if (preferenceValue.equals("On")) { + return on; + } else if (preferenceValue.equals("Off")) { + return off; + } + } + + return def; + } + + private void handleExperiment(MethodHookParam param, Object experimentMode) { + if (!miscChangesEnabled) + return; + + if (experimentMode != null) + param.setResult(experimentMode); + } + + private void handleABTestPrinting(MethodHookParam param) { + String groupName = (String) param.args[0]; + String experimentName = (String) param.args[1]; + + Object result = param.getResult(); + + switch (groupName) { + case "DISCOVER_V2": + break; + default: + Timber.d("ABTest [Group: %s][Exp: %s][Def: %s][Res: %s]", groupName, experimentName, param.args[2], + result + (result != null ? "(" + result.getClass() + ")" : "")); + } + } + + private void handleExperimentPrinting(MethodHookParam param) { + { + String key = (String) callMethod(param.args[0], "a"); + Object defaultValue = param.args[1]; + Object result = param.getResult(); + + switch (key) { + /** + * =========================================================================== + * Tests + * =========================================================================== + */ + case "cold_start_stabilization": + param.setResult("Rainbow"); + break; + case "is_official_user": + param.setResult(true); + break; + + case "is_logged_in": + case "is_registering": + case "username": + case "birthday": + case "enable_shake_to_report": + case "nycSettingsGhostMode": + case "nycSettingsGhostModeDuration": + case "nycSettingsAudience": + case "nycSettingsCustomFriendIds": + case "nycHasOnboarded": + case "nycDontShareState": + case "memories_year_end_story_badge": + case "developerOptionsNycTrackActivity": + case "BITMASK_AVATAR_ID": + case "has_seen_new_user_onboard_ui": + case "birthday_in_millis": + case "birthday_this_year_in_millis": + case "has_seen_snap_onboarding_message": + case "memories_year_end_story": + case "perf_bandwidthsampler_version": + case "perf_downloadmanager_hyperrequest_enabled": + case "perf_downloadmanager_hyperrequest_disabled": + case "user_id": + case "BITMOJI_SELFIE_ID": + case "daily_client_id_timestamp": + case "daily_client_id": + case "last_lenses_enabled_date": + case "auth_token": + case "perf_preferred_network_interface": + case "email": + case "perf_enable_detailed_timing_metrics": + case "story_count": + case "enable_featured_official_stories": + case "ad_track_user_data": + case "ad_preferences": + case "registered_in_cheetah": + case "developerOptionMockLocation": + case "developerOptionMockLocationNYCOffice": + case "enable_resumable_download": + case "delta_fetch_one_on_one_conversations": + case "perf_hyper_callback_feature_executor": + case "cheetah_selfie_id": + case "web_attachments_overwrite": + case "nycSharingNotificationLastSeenTimestamp": + case "nycLastOpenMapTimestamp": + case "nycSharingNotificationCount": + case "nycHasSeenSharingNotification": + case "nycSettingsShowDevToolTipOnce": + case "search_seeen_p2s_tooltip_count": + case "account_creation_millis": + case "has_seen_cheetah_camera_onboarding_my_story_management_tooltip": + case "has_seen_cheetah_onboarding_my_story_view_tooltip": + case "has_given_access_to_contacts": + case "is_popular_user": + case "profile_v3_phone_number_verification_prompt": + case "friendmoji_blocked_keys": + case "phone_number": + case "last_profile_fragment_exit_timestamp": + case "last_seen_added_me_timestamp": + case "bitmojiFetchInWebp": + case "FRIEND_FEED_AST_GROUP": + case "developerOptionsSnapAdsEnablePromotedStories": + case "developerOptionsCheetahFreeformRankingTreatments": + case "developer_option_lens_on_preview_tweak": + case "has_seen_swipe_filters_onboarding_message": + case "transcoding_overwrite_state": + case "transcodingState": + case "video_filters_overwrite_state": + case "video_filters": + case "usps_geofencing_v2": + case "usps_multi_location": + case "sticker_picker_hometab_overwrite": + case "context_filter_metadata_timestamp": + case "captureRotation": + case "show_geofilter_tools_enabled": + case "checksum_friends": + case "checksum_updates": + case "checksum_conversations": + case "checksums_study_settings": + case "last_time_low_sensitivity_unlockables_request": + case "backup_fastlane": + case "last_scan_unlocked_lenses_check_time": + case "next_force_scheduled_lenses_check_time": + case "should_force_low_sensitivity_request": + case "is_first_all_updates_on_app_upgrade": + case "geofilter_allow_concurrent_requests": + case "friends_sync_token": + case "FRIEND_FEED_LAST_FULL_SYNC_TIMESTAMP": + case "developerOptionsShouldShowLocationToast": + case "enable_usps_geolens": + case "has_clicked_to_turn_off_lens": + case "usps_gtq_migration_plan": + case "developer_option_force_camera_30_fps": + case "gles3_allowed": + case "is_using_multiple_frame_buffer_recording": + case "reg_user_complete_timestamp": + case "reg_last_transition_action": + case "reg_last_page": + case "developerOptionsShowFrameDispatcherBufferUsage": + case "snapads_ad_session_id": + case "snap_tag_image": + case "has_profile_images": + case "address_book_version": + case "is_device_whitelisted_for_lenses_on_backend": + case "PENDING_CLIENT_PROPERTIES_V1": + case "square_tos_accepted": + case "has_seen_send_to_quick_add_dialog": + case "has_seen_send_to_sms_snap_alert_v2": + case "has_seen_auto_friend_invite_alert": + case "tos_version_6_accepted": + case "spectacles_tos_accepted": + case "has_seen_camera_module_lens": + case "has_seen_camera_module_scan": + case "clipboard_detection_enabled": + case "search_our_story_attribution_tos_accepted": + case "has_used_memories_search": + case "number_of_enter_memories": + case "image_player_reset_timestamp": + case "transcoding_reset_timestamp": + case "cheetah_partial_story_response": + case "cash_customer_allowed": + case "last_seen_new_friends_tooltip_timestamp": + case "gcm_registration_id": + case "notificationsEnabled": + case "-1572590044has_given_access_to_contacts": + case "story_privacy_setting": + case "last_checked_trophycase_timestamp": + case "display_name_pop_up_count": + case "last_identity_action_timestamp": + case "developerOptionsDiscoverCustomRegion": + case "developerOptionsDiscoverCustomCountry": + case "suggested_friend_sync_version_v2": + case "use_unsigned_receipt": + case "dirty_video_rendering_overwrite_state": + case "dirty_video_rendering": + case "video_decoder_texcoord_transformation": + case "developerOptionsSetDecoderOperatingRate": + case "snapchatInfiniteVideoPreference": + case "should_override_track_url": + case "FRIEND_FEED_WARM_START_BACKGROUND_TIME_THRESHOLD_SECONDS": + case "FRIEND_FEED_WARM_START_LAST_FULL_RANKING_THRESHOLD_SECONDS": + case "has_seen_sound_tools_tooltip": + case "has_seen_auto_sticker_generation_tooltip": + case "developerOptionsCustomEndpoint": + case "app_application_open_client_ts": + case "last_permission_report_timestamp": + case "is_snapchat_contact_permission_synced": + case "reg_started": + break; + default: + Timber.d( + "New preference check: " + key + " | " + defaultValue + " | " + + result + (result != null ? "(" + result.getClass() + ")" : "") + ); + } + } + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookClassDef.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookClassDef.java index 4bedd71..798b5d0 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookClassDef.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookClassDef.java @@ -1,104 +1,103 @@ -package com.ljmu.andre.snaptools.ModulePack.HookDefinitions; - -import androidx.annotation.NonNull; -import com.ljmu.andre.ConstantDefiner.Constant; -import com.ljmu.andre.ConstantDefiner.ConstantDefiner; - -public class HookClassDef extends ConstantDefiner { - public static final HookClass AB_TEST_MANAGER = new HookClass("AB_TEST_MANAGER", "aoqr");// - public static final HookClass CAMERA_FRAGMENT = new HookClass("CAMERA_FRAGMENT", "com.snapchat.android.app.feature.camera.CameraFragmentV2"); - public static final HookClass CAPTION_MANAGER_CLASS = new HookClass("CAPTION_MANAGER_CLASS", "urb");// - public static final HookClass CHAT_BODY_METADATA = new HookClass("CHAT_BODY_METADATA", "atjc");// - public static final HookClass CHAT_DIRECT_VIEW_MARKER = new HookClass("CHAT_DIRECT_VIEW_MARKER", "ahtv");// - public static final HookClass CHAT_GROUP_VIEW_MARKER = new HookClass("CHAT_GROUP_VIEW_MARKER", "ahuy");// - public static final HookClass CHAT_HEADER_METADATA = new HookClass("CHAT_HEADER_METADATA", "atep");// - public static final HookClass CHAT_IMAGE_METADATA = new HookClass("CHAT_IMAGE_METADATA", "aida");// - public static final HookClass CHAT_MESSAGE_VIEW_HOLDER = new HookClass("CHAT_MESSAGE_VIEW_HOLDER", "aimn");// - public static final HookClass CHAT_METADATA = new HookClass("CHAT_METADATA", "aswo");// - public static final HookClass CHAT_METADATA_JSON_PARSER = new HookClass("CHAT_METADATA_JSON_PARSER", "aswp");// - public static final HookClass CHAT_METADATA_JSON_PARSER_SECOND = new HookClass("CHAT_METADATA_JSON_PARSER_SECOND", "atjs");// - public static final HookClass CHAT_NOTIFICATION_CREATOR = new HookClass("CHAT_NOTIFICATION_CREATOR", "ahqm");// UNSURE ON THIS ONE - public static final HookClass CHAT_V10_BUILDER = new HookClass("CHAT_V10_BUILDER", "ahxy");// - public static final HookClass CHAT_VIDEO = new HookClass("CHAT_VIDEO", "aipq");// - public static final HookClass CHAT_VIDEO_METADATA = new HookClass("CHAT_VIDEO_METADATA", "aivs");// - public static final HookClass CHEETAH_PROFILE_SETTINGS_CREATOR = new HookClass("CHEETAH_PROFILE_SETTINGS_CREATOR", "afdb");// - public static final HookClass COUNTDOWNTIMER_VIEW = new HookClass("COUNTDOWNTIMER_VIEW", "com.snap.opera.view.CountdownTimerView"); - public static final HookClass DOWNLOADER_RUNNABLE = new HookClass("DOWNLOADER_RUNNABLE", "aoew$2"); - public static final HookClass ENCRYPTED_STREAM_BUILDER = new HookClass("ENCRYPTED_STREAM_BUILDER", "anxy");// - public static final HookClass ENCRYPTION_ALGORITHM = new HookClass("ENCRYPTION_ALGORITHM", "com.snapchat.android.framework.crypto.CbcEncryptionAlgorithm"); - public static final HookClass ENUM_BATCHED_SNAP_POSITION = new HookClass("ENUM_BATCHED_SNAP_POSITION", "aaiw");// - public static final HookClass ENUM_LENS_ACTIVATOR_TYPE = new HookClass("ENUM_LENS_ACTIVATOR_TYPE", "com.looksery.sdk.domain.Category.ActivatorType"); - public static final HookClass ENUM_LENS_TYPE = new HookClass("ENUM_LENS_TYPE", "afwd$c");// - public static final HookClass ENUM_SNAP_ADVANCE_MODES = new HookClass("ENUM_SNAP_ADVANCE_MODES", "tez"); - public static final HookClass EXPERIMENT_BASE = new HookClass("EXPERIMENT_BASE", "aoqo"); - public static final HookClass FONT_CLASS = new HookClass("FONT_CLASS", "android.graphics.Typeface"); - public static final HookClass FRIEND_PROFILE_POPUP_FRAGMENT = new HookClass("FRIEND_PROFILE_POPUP_FRAGMENT", "com.snapchat.android.app.feature.miniprofile.internal.friend.FriendMiniProfilePopupFragment"); - public static final HookClass GROUP_SNAP_METADATA = new HookClass("GROUP_SNAP_METADATA", "aidr");//Unsure on this, seems to be pretty different but contains similar stuff to aotd - public static final HookClass GROUP_SNAP_WRAPPER = new HookClass("GROUP_SNAP_WRAPPER", "tpp");// - public static final HookClassDef INST = new HookClassDef(); - public static final HookClass LENS = new HookClass("LENS", "afwd");// - public static final HookClass LENS_APPLICATION_CONTEXT_ENUM = new HookClass("LENS_APPLICATION_CONTEXT_ENUM", "afwe");// - public static final HookClass LENS_ASSET_BUILT = new HookClass("LENS_ASSET_BUILT", "afwf");// - public static final HookClass LENS_ASSET_LOAD_MODE = new HookClass("LENS_ASSET_LOAD_MODE", "afwz");// Unsure on this, seems similar but also some different code - public static final HookClass LENS_ASSET_TYPE = new HookClass("LENS_ASSET_TYPE", "afwf$a");// - public static final HookClass LENS_AUTHENTICATION = new HookClass("LENS_AUTHENTICATION", "com.snapchat.android.app.feature.lenses.internal.security.LensesSecurityManager"); - public static final HookClass LENS_CAMERA_CONTEXT_ENUM = new HookClass("LENS_CAMERA_CONTEXT_ENUM", "afwh");// - public static final HookClass LENS_CATEGORY = new HookClass("LENS_CATEGORY", "afwm");// - public static final HookClass LENS_CATEGORY_RESOLVER = new HookClass("LENS_CATEGORY_RESOLVER", "afwk");// - public static final HookClass LENS_CONTEXT_HOLDER = new HookClass("LENS_CONTEXT_HOLDER", "afwq"); - public static final HookClass LENS_LOADER = new HookClass("LENS_LOADER", "afss");// - public static final HookClass LENS_SLUG = new HookClass("LENS_SLUG", "atqf");// - public static final HookClass LENS_TRACK = new HookClass("LENS_TRACK", "atup");// - public static final HookClass META_DATA_BUILDER = new HookClass("META_DATA_BUILDER", "ajfg");// - public static final HookClass NETWORK_DISPATCHER = new HookClass("NETWORK_DISPATCHER", "ahtc");// - public static final HookClass NETWORK_MANAGER = new HookClass("NETWORK_MANAGER", "aoci");// - public static final HookClass NEW_CONCENTRIC_TIMERVIEW = new HookClass("NEW_CONCENTRIC_TIMERVIEW", "com.snap.opera.view.NewConcentricTimerView"); - public static final HookClass OPERA_PAGE_VIEW = new HookClass("OPERA_PAGE_VIEW", "com.snap.opera.view.OperaPageView"); - public static final HookClass RECEIVED_SNAP = new HookClass("RECEIVED_SNAP", "amuu");// - public static final HookClass RECEIVED_SNAP_ENCRYPTION = new HookClass("RECEIVED_SNAP_ENCRYPTION", "aiue");// - public static final HookClass RECEIVED_SNAP_PAYLOAD_BUILDER = new HookClass("RECEIVED_SNAP_PAYLOAD_BUILDER", "abiz");// - public static final HookClass SCREENSHOT_DETECTOR = new HookClass("SCREENSHOT_DETECTOR", "aolm");// - public static final HookClass SENT_BATCHED_VIDEO = new HookClass("SENT_BATCHED_VIDEO", "acpk");// - public static final HookClass SENT_IMAGE = new HookClass("SENT_IMAGE", "amux");// - public static final HookClass SENT_SNAP_BASE = new HookClass("SENT_SNAP_BASE", "amtz");// - public static final HookClass SENT_VIDEO = new HookClass("SENT_VIDEO", "amvk");// - public static final HookClass SHARE_IMAGE = new HookClass("SHARE_IMAGE", "acmu");// - public static final HookClass SHARE_VIDEO = new HookClass("SHARE_VIDEO", "acmv");// - public static final HookClass SNAPCHAT_CAPTION_VIEW_CLASS = new HookClass("SNAPCHAT_CAPTION_VIEW_CLASS", "com.snapchat.android.app.feature.creativetools.caption.SnapCaptionView"); - public static final HookClass SNAP_BASE = new HookClass("SNAP_BASE", "aisv"); // Checked - public static final HookClass SNAP_COUNTDOWN_CONTROLLER = new HookClass("SNAP_COUNTDOWN_CONTROLLER", "amdd"); - public static final HookClass SNAP_STATUS = new HookClass("SNAP_STATUS", "aisv$a");// Unsure if correct - public static final HookClass STORY_ADVANCER = new HookClass("STORY_ADVANCER", "sxh");// - public static final HookClass STORY_DATA_DISCOVER = new HookClass("STORY_DATA_DISCOVER", "iqw");// - public static final HookClass STORY_DATA_DYNAMIC = new HookClass("STORY_DATA_DYNAMIC", "iqx"); - public static final HookClass STORY_DATA_MAP = new HookClass("STORY_DATA_MAP", "iqy"); - public static final HookClass STORY_DATA_MOMENT = new HookClass("STORY_DATA_MOMENT", "irk"); - public static final HookClass STORY_DATA_PROMOTED = new HookClass("STORY_DATA_PROMOTED", "iqz"); - public static final HookClass STORY_FRIEND_RECENT = new HookClass("STORY_FRIEND_RECENT", "ell"); - public static final HookClass STORY_FRIEND_VIEWED = new HookClass("STORY_FRIEND_VIEWED", "acad"); - public static final HookClass STORY_LOADER = new HookClass("STORY_LOADER", "abqh"); - public static final HookClass STORY_MANAGER = new HookClass("STORY_MANAGER", "abxz"); - public static final HookClass STORY_METADATA = new HookClass("STORY_METADATA", "tpp"); - public static final HookClass STORY_METADATA_LOADER = new HookClass("STORY_METADATA_LOADER", "acbz"); - public static final HookClass STORY_SNAP = new HookClass("STORY_SNAP", "ammt"); - //public static final HookClass STORY_SNAP_AD_LOADER = new HookClass("STORY_SNAP_AD_LOADER", "abrz"); - public static final HookClass STORY_SNAP_PAYLOAD_BUILDER = new HookClass("STORY_SNAP_PAYLOAD_BUILDER", "abtf"); - public static final HookClass STORY_SPONSORED = new HookClass("STORY_ADVERT", "eng"); - public static final HookClass STORY_STATUS_UPDATER = new HookClass("STORY_STATUS_UPDATER", "abts"); - public static final HookClass ADVANCE_FIX = new HookClass("ADVANCE_FIX", "aay$1"); - public static final HookClass TEXTURE_VIDEO_VIEW = new HookClass("TEXTURE_VIDEO_VIEW", "com.snap.opera.shared.view.TextureVideoView"); - public static final HookClass USER_PREFS = new HookClass("USER_PREFS", "com.snapchat.android.core.user.UserPrefsImpl"); - - public static class HookClass extends Constant { - private String strClass; - - public HookClass(String name, @NonNull String value) { - super(name); - this.strClass = value; - } - - public String getStrClass() { - return this.strClass; - } - } -} +package com.ljmu.andre.snaptools.ModulePack.HookDefinitions; + +import androidx.annotation.NonNull; +import com.ljmu.andre.ConstantDefiner.Constant; +import com.ljmu.andre.ConstantDefiner.ConstantDefiner; + +public class HookClassDef extends ConstantDefiner { + public static final HookClass AB_TEST_MANAGER = new HookClass("AB_TEST_MANAGER", "awho"); + public static final HookClass CAMERA_FRAGMENT = new HookClass("CAMERA_FRAGMENT", "com.snapchat.android.app.feature.camera.CameraFragmentV2"); + public static final HookClass CAPTION_MANAGER_CLASS = new HookClass("CAPTION_MANAGER_CLASS", "yvu"); + public static final HookClass CHAT_BODY_METADATA = new HookClass("CHAT_BODY_METADATA", "bbyg"); + public static final HookClass CHAT_DIRECT_VIEW_MARKER = new HookClass("CHAT_DIRECT_VIEW_MARKER", "aogv"); + public static final HookClass CHAT_GROUP_VIEW_MARKER = new HookClass("CHAT_GROUP_VIEW_MARKER", "aohx"); + public static final HookClass CHAT_HEADER_METADATA = new HookClass("CHAT_HEADER_METADATA", "bbtq"); + public static final HookClass CHAT_IMAGE_METADATA = new HookClass("CHAT_IMAGE_METADATA", "aosk"); + public static final HookClass CHAT_MESSAGE_VIEW_HOLDER = new HookClass("CHAT_MESSAGE_VIEW_HOLDER", "apcm"); + public static final HookClass CHAT_METADATA = new HookClass("CHAT_METADATA", "bblp"); + public static final HookClass CHAT_METADATA_JSON_PARSER = new HookClass("CHAT_METADATA_JSON_PARSER", "bblq"); + public static final HookClass CHAT_METADATA_JSON_PARSER_SECOND = new HookClass("CHAT_METADATA_JSON_PARSER_SECOND", "bbyw"); + public static final HookClass CHAT_NOTIFICATION_CREATOR = new HookClass("CHAT_NOTIFICATION_CREATOR", "aodb"); + public static final HookClass CHAT_V10_BUILDER = new HookClass("CHAT_V10_BUILDER", "aolg"); + public static final HookClass CHAT_VIDEO = new HookClass("CHAT_VIDEO", "apfw"); + public static final HookClass CHAT_VIDEO_METADATA = new HookClass("CHAT_VIDEO_METADATA", "apma"); + public static final HookClass CHEETAH_PROFILE_SETTINGS_CREATOR = new HookClass("CHEETAH_PROFILE_SETTINGS_CREATOR", "akvx"); + public static final HookClass COUNTDOWNTIMER_VIEW = new HookClass("COUNTDOWNTIMER_VIEW", "com.snap.opera.view.CountdownTimerView"); + public static final HookClass DOWNLOADER_RUNNABLE = new HookClass("DOWNLOADER_RUNNABLE", "avun$2"); + public static final HookClass ENCRYPTED_STREAM_BUILDER = new HookClass("ENCRYPTED_STREAM_BUILDER", "avnn"); + public static final HookClass ENCRYPTION_ALGORITHM = new HookClass("ENCRYPTION_ALGORITHM", "com.snapchat.android.framework.crypto.CbcEncryptionAlgorithm"); + public static final HookClass ENUM_BATCHED_SNAP_POSITION = new HookClass("ENUM_BATCHED_SNAP_POSITION", "aexf"); + public static final HookClass ENUM_LENS_ACTIVATOR_TYPE = new HookClass("ENUM_LENS_ACTIVATOR_TYPE", "com.looksery.sdk.domain.Category.ActivatorType"); + public static final HookClass ENUM_LENS_TYPE = new HookClass("ENUM_LENS_TYPE", "amaw$c"); + public static final HookClass ENUM_SNAP_ADVANCE_MODES = new HookClass("ENUM_SNAP_ADVANCE_MODES", "xcr"); + public static final HookClass EXPERIMENT_BASE = new HookClass("EXPERIMENT_BASE", "awhl"); + public static final HookClass FONT_CLASS = new HookClass("FONT_CLASS", "android.graphics.Typeface"); + public static final HookClass FRIEND_PROFILE_POPUP_FRAGMENT = new HookClass("FRIEND_PROFILE_POPUP_FRAGMENT", "com.snapchat.android.app.feature.miniprofile.internal.friend.FriendMiniProfilePopupFragment"); + public static final HookClass GROUP_SNAP_METADATA = new HookClass("GROUP_SNAP_METADATA", "aotd"); + public static final HookClass GROUP_SNAP_WRAPPER = new HookClass("GROUP_SNAP_WRAPPER", "xop"); + public static final HookClassDef INST = new HookClassDef(); + public static final HookClass LENS = new HookClass("LENS", "amaw"); + public static final HookClass LENS_APPLICATION_CONTEXT_ENUM = new HookClass("LENS_APPLICATION_CONTEXT_ENUM", "amax"); + public static final HookClass LENS_ASSET_BUILT = new HookClass("LENS_ASSET_BUILT", "amay"); + public static final HookClass LENS_ASSET_LOAD_MODE = new HookClass("LENS_ASSET_LOAD_MODE", "ambv"); + public static final HookClass LENS_ASSET_TYPE = new HookClass("LENS_ASSET_TYPE", "amay$a"); + public static final HookClass LENS_AUTHENTICATION = new HookClass("LENS_AUTHENTICATION", "com.snapchat.android.app.feature.lenses.internal.security.LensesSecurityManager"); + public static final HookClass LENS_CAMERA_CONTEXT_ENUM = new HookClass("LENS_CAMERA_CONTEXT_ENUM", "amba"); + public static final HookClass LENS_CATEGORY = new HookClass("LENS_CATEGORY", "ambf"); + public static final HookClass LENS_CATEGORY_RESOLVER = new HookClass("LENS_CATEGORY_RESOLVER", "ambd"); + public static final HookClass LENS_CONTEXT_HOLDER = new HookClass("LENS_CONTEXT_HOLDER", "ambj"); + public static final HookClass LENS_LOADER = new HookClass("LENS_LOADER", "alur"); + public static final HookClass LENS_SLUG = new HookClass("LENS_SLUG", "bcfj"); + public static final HookClass LENS_TRACK = new HookClass("LENS_TRACK", "bcjt"); + public static final HookClass META_DATA_BUILDER = new HookClass("META_DATA_BUILDER", "apyt"); + public static final HookClass NETWORK_DISPATCHER = new HookClass("NETWORK_DISPATCHER", "aogb"); + public static final HookClass NETWORK_MANAGER = new HookClass("NETWORK_MANAGER", "avrz"); + public static final HookClass NEW_CONCENTRIC_TIMERVIEW = new HookClass("NEW_CONCENTRIC_TIMERVIEW", "com.snap.opera.view.NewConcentricTimerView"); + public static final HookClass OPERA_PAGE_VIEW = new HookClass("OPERA_PAGE_VIEW", "com.snap.opera.view.OperaPageView"); + public static final HookClass RECEIVED_SNAP = new HookClass("RECEIVED_SNAP", "auhw"); + public static final HookClass RECEIVED_SNAP_ENCRYPTION = new HookClass("RECEIVED_SNAP_ENCRYPTION", "apkj"); + public static final HookClass RECEIVED_SNAP_PAYLOAD_BUILDER = new HookClass("RECEIVED_SNAP_PAYLOAD_BUILDER", "afxv"); + public static final HookClass SCREENSHOT_DETECTOR = new HookClass("SCREENSHOT_DETECTOR", "awbn"); + public static final HookClass SENT_BATCHED_VIDEO = new HookClass("SENT_BATCHED_VIDEO", "ahnk"); + public static final HookClass SENT_IMAGE = new HookClass("SENT_IMAGE", "auhz"); + public static final HookClass SENT_SNAP_BASE = new HookClass("SENT_SNAP_BASE", "auhb"); + public static final HookClass SENT_VIDEO = new HookClass("SENT_VIDEO", "auin"); + public static final HookClass SHARE_IMAGE = new HookClass("SHARE_IMAGE", "ahhy"); + public static final HookClass SHARE_VIDEO = new HookClass("SHARE_VIDEO", "ahid"); + public static final HookClass SNAPCHAT_CAPTION_VIEW_CLASS = new HookClass("SNAPCHAT_CAPTION_VIEW_CLASS", "com.snapchat.android.app.feature.creativetools.caption.SnapCaptionView"); + public static final HookClass SNAP_BASE = new HookClass("SNAP_BASE", "apja"); + public static final HookClass SNAP_COUNTDOWN_CONTROLLER = new HookClass("SNAP_COUNTDOWN_CONTROLLER", "atpd"); + public static final HookClass SNAP_STATUS = new HookClass("SNAP_STATUS", "apja$a"); + public static final HookClass STORY_ADVANCER = new HookClass("STORY_ADVANCER", "wtp"); + public static final HookClass STORY_DATA_DISCOVER = new HookClass("STORY_DATA_DISCOVER", "kml"); + public static final HookClass STORY_DATA_DYNAMIC = new HookClass("STORY_DATA_DYNAMIC", "kmm"); + public static final HookClass STORY_DATA_MAP = new HookClass("STORY_DATA_MAP", "kmn"); + public static final HookClass STORY_DATA_MOMENT = new HookClass("STORY_DATA_MOMENT", "kmz"); + public static final HookClass STORY_DATA_PROMOTED = new HookClass("STORY_DATA_PROMOTED", "kmo"); + public static final HookClass STORY_FRIEND_RECENT = new HookClass("STORY_FRIEND_RECENT", "eut"); + public static final HookClass STORY_FRIEND_VIEWED = new HookClass("STORY_FRIEND_VIEWED", "agru"); + public static final HookClass STORY_LOADER = new HookClass("STORY_LOADER", "agfs"); + public static final HookClass STORY_MANAGER = new HookClass("STORY_MANAGER", "agos"); + public static final HookClass STORY_METADATA = new HookClass("STORY_METADATA", "xop"); + public static final HookClass STORY_METADATA_LOADER = new HookClass("STORY_METADATA_LOADER", "agty"); + public static final HookClass STORY_SNAP = new HookClass("STORY_SNAP", "atza"); + public static final HookClass STORY_SNAP_AD_LOADER = new HookClass("STORY_SNAP_AD_LOADER", "agho"); + public static final HookClass STORY_SNAP_PAYLOAD_BUILDER = new HookClass("STORY_SNAP_PAYLOAD_BUILDER", "agiv"); + public static final HookClass STORY_SPONSORED = new HookClass("STORY_ADVERT", "ewu"); + public static final HookClass STORY_STATUS_UPDATER = new HookClass("STORY_STATUS_UPDATER", "agjl"); + public static final HookClass TEXTURE_VIDEO_VIEW = new HookClass("TEXTURE_VIDEO_VIEW", "com.snap.opera.shared.view.TextureVideoView"); + public static final HookClass USER_PREFS = new HookClass("USER_PREFS", "com.snapchat.android.core.user.UserPrefsImpl"); + + public static class HookClass extends Constant { + private String strClass; + + public HookClass(String name, @NonNull String value) { + super(name); + this.strClass = value; + } + + public String getStrClass() { + return this.strClass; + } + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookDef.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookDef.java index 88702d2..58c66cf 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookDef.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookDef.java @@ -1,120 +1,119 @@ -package com.ljmu.andre.snaptools.ModulePack.HookDefinitions; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.net.Uri; -import android.os.Bundle; -import androidx.annotation.Nullable; -import android.view.ActionMode; -import android.view.Menu; -import android.view.View; -import com.ljmu.andre.ConstantDefiner.Constant; -import com.ljmu.andre.ConstantDefiner.ConstantDefiner; -import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef; -import java.io.InputStream; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; - -public class HookDef extends ConstantDefiner { - public static final Hook AB_TEST_CHECK_BOOLEAN = new Hook("AB_TEST_CHECK_BOOLEAN", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, Boolean.TYPE); - public static final Hook AB_TEST_CHECK_FLOAT = new Hook("AB_TEST_CHECK_FLOAT", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, Float.TYPE); - public static final Hook AB_TEST_CHECK_INT = new Hook("AB_TEST_CHECK_INT", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, Integer.TYPE); - public static final Hook AB_TEST_CHECK_LONG = new Hook("AB_TEST_CHECK_LONG", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, Long.TYPE); - public static final Hook AB_TEST_CHECK_STRING = new Hook("AB_TEST_CHECK_VALUE", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, String.class); - public static final Hook BATCHED_MEDIA_LIMITER = new Hook("BATCHED_MEDIA_LIMITER", HookClassDef.SENT_VIDEO, "bi", new Object[0]); - public static final Hook CAMERA_IS_VISIBLE = new Hook("CAMERA_IS_VISIBLE", HookClassDef.CAMERA_FRAGMENT, "a", "aqst"); - public static final Hook CAPTION_CREATE_HOOK = new Hook("CAPTION_CREATE_HOOK", HookClassDef.CAPTION_MANAGER_CLASS, "onCreateActionMode", ActionMode.class, Menu.class); - public static final Hook CHAT_IMAGE_GET_ALGORITHM = new Hook("CHAT_IMAGE_GET_ALGORITHM", HookClassDef.CHAT_IMAGE_METADATA, "b", HookClassDef.CHAT_VIDEO.getStrClass()); - public static final Hook CHAT_ISSAVED_INAPP = new Hook("CHAT_ISSAVED_INAPP", (HookClassDef.HookClass) null, "eG_", new Object[0]); - public static final Hook CHAT_MESSAGE_VIEW_MEASURE = new Hook("CHAT_MESSAGE_VIEW_MEASURE", HookClassDef.CHAT_MESSAGE_VIEW_HOLDER, "F", new Object[0]); - public static final Hook CHAT_METADATA_READ = new Hook("CHAT_METADATA_READ", HookClassDef.CHAT_METADATA_JSON_PARSER, "a", "com.google.gson.stream.JsonReader"); - public static final Hook CHAT_METADATA_READ_SECOND = new Hook("CHAT_METADATA_READ_SECOND", HookClassDef.CHAT_METADATA_JSON_PARSER_SECOND, "a", "com.google.gson.stream.JsonReader"); - public static final Hook CHAT_METADATA_WRITE = new Hook("CHAT_METADATA_WRITE", HookClassDef.CHAT_METADATA_JSON_PARSER, "a", "com.google.gson.stream.JsonWriter", HookClassDef.CHAT_METADATA.getStrClass()); - public static final Hook CHAT_METADATA_WRITE_SECOND = new Hook("CHAT_METADATA_WRITE_SECOND", HookClassDef.CHAT_METADATA_JSON_PARSER_SECOND, "a", "com.google.gson.stream.JsonWriter", "atjr"); - public static final Hook CHAT_NOTIFICATION = new Hook("CHAT_NOTIFICATION", HookClassDef.CHAT_NOTIFICATION_CREATOR, "a", "aohl", "com.snapchat.android.core.notification.model.NotificationProcessorCallback"); - public static final Hook CHAT_SAVE_INAPP = new Hook("CHAT_SAVE_INAPP", HookClassDef.CHAT_MESSAGE_VIEW_HOLDER, "x", new Object[0]); - public static final Hook CHAT_VIDEO_GET_ALGORITHM = new Hook("CHAT_VIDEO_GET_ALGORITHM", HookClassDef.CHAT_VIDEO_METADATA, "e", new Object[0]); - public static final Hook CHAT_VIDEO_PATH = new Hook("CHAT_VIDEO_PATH", HookClassDef.CHAT_VIDEO, "eX_", new Object[0]); - public static final Hook CHECK_LENS_ASSET_AUTH = new Hook("CHECK_LENS_ASSET_AUTH", HookClassDef.LENS_AUTHENTICATION, "a", "afwj", String.class); - public static final Hook CHECK_LENS_AUTH = new Hook("CHECK_LENS_AUTH", HookClassDef.LENS_AUTHENTICATION, "a", HookClassDef.LENS.getStrClass(), String.class); - public static final Hook CHECK_LENS_CATEGORY_AUTH = new Hook("CHECK_LENS_CATEGORY_AUTH", HookClassDef.LENS_AUTHENTICATION, "a", "afwd", String.class); - public static final Hook CONSTRUCTOR_OPERA_PAGE_VIEW = new Hook("CONSTRUCTOR_OPERA_PAGE_VIEW", HookClassDef.OPERA_PAGE_VIEW, (String) null, Context.class); - public static final Hook COUNTDOWNTIMER_VIEW_ONDRAW = new Hook("COUNTDOWNTIMER_VIEW_ONDRAW", HookClassDef.COUNTDOWNTIMER_VIEW, "onDraw", Canvas.class); - public static final Hook CREATE_CHEETAH_PROFILE_SETTINGS_VIEW = new Hook("CREATE_CHEETAH_PROFILE_SETTINGS_VIEW", HookClassDef.CHEETAH_PROFILE_SETTINGS_CREATOR, (String) null, View.class); - public static final Hook DIRECT_GET_ALGORITHM = new Hook("DIRECT_GET_ALGORITHM", HookClassDef.RECEIVED_SNAP_ENCRYPTION, "a", HookClassDef.RECEIVED_SNAP.getStrClass(), String.class); - public static final Hook DISPATCH_CHAT_UPDATE = new Hook("DISPATCH_CHAT_UPDATE", HookClassDef.NETWORK_DISPATCHER, "a", "aiqx", "asyk"); - public static final Hook ENCRYPTION_ALGORITHM_STREAM = new Hook("ENCRYPTION_ALGORITHM_STREAM", HookClassDef.ENCRYPTION_ALGORITHM, "b", InputStream.class); - public static final Hook ERROR_SUPPRESS_DOWNLOADER_RUNNABLE = new Hook("ERROR_SUPPRESS_DOWNLOADER_RUNNABLE", HookClassDef.DOWNLOADER_RUNNABLE, "run", new Object[0]); - public static final Hook EXPERIMENT_PUSH_STATE = new Hook("EXPERIMENT_PUSH_STATE", HookClassDef.EXPERIMENT_BASE, "j", new Object[0]); - public static final Hook FONT_HOOK = new Hook("FONT_HOOK", HookClassDef.FONT_CLASS, "createFromFile", String.class); - public static final Hook FRIEND_PROFILE_POPUP_CREATED = new Hook("FRIEND_PROFILE_POPUP_CREATED", HookClassDef.FRIEND_PROFILE_POPUP_FRAGMENT, "onViewCreated", View.class, Bundle.class); - public static final Hook FRIEND_STORY_TILE_USERNAME = new Hook("FRIEND_STORY_TILE_USERNAME", HookClassDef.STORY_FRIEND_VIEWED, "a", new Object[0]); - public static final Hook GET_RECEIVED_SNAP_PAYLOAD = new Hook("GET_RECEIVED_SNAP_PAYLOAD", HookClassDef.RECEIVED_SNAP_PAYLOAD_BUILDER, "getRequestPayload", new Object[0]); - public static final Hook GET_SNAP_ID = new Hook("GET_SNAP_ID", HookClassDef.SNAP_BASE, "h", new Object[0]); // Checked - public static final Hook GET_STORY_SNAP_PAYLOAD = new Hook("GET_STORY_SNAP_PAYLOAD", HookClassDef.STORY_SNAP_PAYLOAD_BUILDER, "getRequestPayload", new Object[0]); - public static final Hook GET_USERNAME = new Hook("GET_USERNAME", HookClassDef.USER_PREFS, "w"); - public static final Hook GROUP_ALGORITHM_UNWRAPPED = new Hook("GROUP_ALGORITHM_UNWRAPPED", HookClassDef.GROUP_SNAP_WRAPPER, "a", String.class); - public static final Hook GROUP_GET_ALGORITHM = new Hook("GROUP_GET_ALGORITHM", HookClassDef.GROUP_SNAP_METADATA, "a", "aisw"); - public static final HookDef INST = new HookDef(); - public static final Hook LENS_LOADING = new Hook("LENS_LOADING", HookClassDef.LENS_LOADER, "a", List.class); - public static final Hook LOAD_INITIAL_STORIES = new Hook("LOAD_INITIAL_STORIES", HookClassDef.STORY_MANAGER, "a", Integer.TYPE, Integer.TYPE, Integer.TYPE, HashMap.class, HashMap.class, Integer.TYPE, Integer.TYPE, Integer.TYPE, List.class, Long.TYPE); - public static final Hook LOAD_NEW_STORY = new Hook("LOAD_NEW_STORY", HookClassDef.STORY_MANAGER, "a", "amur"); - public static final Hook LOAD_STORIES = new Hook("LOAD_STORIES", HookClassDef.STORY_LOADER, "a", List.class); - //public static final Hook LOAD_STORY_SNAP_ADVERT = new Hook("LOAD_STORY_SNAP_ADVERT", HookClassDef.STORY_SNAP_AD_LOADER, "a", "euc", "euc"); // This doesn't work for some reason - public static final Hook MARK_DIRECT_CHAT_VIEWED_PRESENT = new Hook("MARK_DIRECT_CHAT_VIEWED_PRESENT", HookClassDef.CHAT_DIRECT_VIEW_MARKER, "a", "aipc", "aoyr"); - public static final Hook MARK_DIRECT_CHAT_VIEWED_UNPRESENT = new Hook("MARK_DIRECT_CHAT_VIEWED_UNPRESENT", HookClassDef.CHAT_DIRECT_VIEW_MARKER, "a", "aoyr", "aipc"); - public static final Hook MARK_GROUP_CHAT_VIEWED = new Hook("MARK_GROUP_CHAT_VIEWED", HookClassDef.CHAT_GROUP_VIEW_MARKER, "a", "aiqx", String.class); - public static final Hook MARK_STORY_VIEWED = new Hook("MARK_STORY_VIEWED", HookClassDef.STORY_STATUS_UPDATER, "a", "ammc", HookClassDef.STORY_SNAP.getStrClass(), Boolean.TYPE); - public static final Hook NETWORK_EXECUTE_SYNC = new Hook("NETWORK_EXECUTE_SYNC", HookClassDef.NETWORK_MANAGER, "executeSynchronously", new Object[0]); - public static final Hook NEW_CONCENTRIC_TIMERVIEW_ONDRAW = new Hook("NEW_CONCENTRIC_TIMERVIEW_ONDRAW", HookClassDef.NEW_CONCENTRIC_TIMERVIEW, "onDraw", Canvas.class); - public static final Hook OPENED_SNAP = new Hook("OPENED_SNAP", HookClassDef.RECEIVED_SNAP, "e", Boolean.TYPE); - public static final Hook REPLACE_SHARED_IMAGE = new Hook("REPLACE_SHARED_IMAGE", HookClassDef.SHARE_IMAGE, "a", "fjw", Integer.class, String.class, long.class, boolean.class, int.class, "fjv$b"); - public static final Hook REPLACE_SHARED_VIDEO = new Hook("REPLACE_SHARED_VIDEO", HookClassDef.SHARE_VIDEO, "a", Uri.class, Integer.TYPE, Boolean.TYPE, "apmf", Long.TYPE, Long.TYPE); - public static final Hook RESOLVE_LENS_CATEGORY = new Hook("RESOLVE_LENS_CATEGORY", HookClassDef.LENS_CATEGORY_RESOLVER, "a", String.class); - public static final Hook SCREENSHOT_BYPASS = new Hook("SCREENSHOT_BYPASS", HookClassDef.SCREENSHOT_DETECTOR, "a", LinkedHashMap.class); - public static final Hook SENT_BATCHED_SNAP = new Hook("SENT_BATCHED_SNAP", HookClassDef.SENT_BATCHED_VIDEO, "c", new Object[0]); - public static final Hook SENT_SNAP = new Hook("SENT_SNAP", HookClassDef.META_DATA_BUILDER, "a", HookClassDef.SENT_SNAP_BASE.getStrClass()); - public static final Hook SET_SNAP_STATUS = new Hook("SET_SNAP_STATUS", HookClassDef.SNAP_BASE, "a", HookClassDef.SNAP_STATUS.getStrClass()); - public static final Hook SNAP_COUNTDOWN_POSTER = new Hook("SNAP_COUNTDOWN_POSTER", HookClassDef.SNAP_COUNTDOWN_CONTROLLER, "a", Long.TYPE); - public static final Hook SNAP_GET_MEDIA_TYPE = new Hook("SNAP_GET_MEDIA_TYPE", HookClassDef.SNAP_BASE, "aU_", new Object[0]); // Checked - public static final Hook SNAP_GET_TIMESTAMP = new Hook("SNAP_GET_TIMESTAMP", HookClassDef.STORY_SNAP, "az_", new Object[0]); // Checked - public static final Hook SNAP_GET_USERNAME = new Hook("SNAP_GET_USERNAME", HookClassDef.RECEIVED_SNAP, "s", new Object[0]); // Checked - public static final Hook STORY_DISPLAYED = new Hook("STORY_DISPLAYED", HookClassDef.STORY_ADVANCER, "E", new Object[0]); - public static final Hook STORY_GET_ALGORITHM = new Hook("STORY_GET_ALGORITHM", HookClassDef.STORY_SNAP, "aq", new Object[0]); - public static final Hook STORY_METADATA_BUILDER = new Hook("STORY_METADATA_BUILDER", HookClassDef.STORY_METADATA_LOADER, "a", HookClassDef.STORY_SNAP.getStrClass(), "aola", "aokz", "amms"); - public static final Hook STORY_METADATA_GET_OBJECT = new Hook("STORY_METADATA_GET_OBJECT", HookClassDef.STORY_METADATA, "a", String.class); - public static final Hook STORY_METADATA_INSERT_OBJECT = new Hook("STORY_METADATA_INSERT_OBJECT", HookClassDef.STORY_METADATA, "b", String.class, Object.class); - public static final Hook STREAM_TYPE_CHECK_BYPASS = new Hook("STREAM_TYPE_CHECK_BYPASS", HookClassDef.ENCRYPTED_STREAM_BUILDER, "a", "zq", Integer.TYPE, Integer.TYPE); - public static final Hook TEXTURE_VIDVIEW_SETLOOPING = new Hook("TEXTURE_VIDVIEW_SETLOOPING", HookClassDef.TEXTURE_VIDEO_VIEW, "setLooping", Boolean.TYPE); - public static final Hook TEXTURE_VIDVIEW_START = new Hook("TEXTURE_VIDVIEW_START", HookClassDef.TEXTURE_VIDEO_VIEW, "start", new Object[0]); - public static final Hook DIVISION_FIX = new Hook("DIVISION_FIX", HookClassDef.ADVANCE_FIX, "a",Integer.TYPE, Integer.TYPE ,Integer.TYPE ,Integer.TYPE); - - public static class Hook extends Constant { - private final HookClassDef.HookClass hookClass; - @Nullable - private final String hookMethod; - private final Object[] hookParams; - - Hook(String name, HookClassDef.HookClass hookClass2, @Nullable String hookMethod2, Object... hookParams2) { - super(name); - this.hookClass = hookClass2; - this.hookMethod = hookMethod2; - this.hookParams = hookParams2; - } - - public HookClassDef.HookClass getHookClass() { - return this.hookClass; - } - - @Nullable - public String getHookMethod() { - return this.hookMethod; - } - - public Object[] getHookParams() { - return this.hookParams; - } - } -} +package com.ljmu.andre.snaptools.ModulePack.HookDefinitions; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.net.Uri; +import android.os.Bundle; +import androidx.annotation.Nullable; +import android.view.ActionMode; +import android.view.Menu; +import android.view.View; +import com.ljmu.andre.ConstantDefiner.Constant; +import com.ljmu.andre.ConstantDefiner.ConstantDefiner; +import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef; +import java.io.InputStream; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; + +public class HookDef extends ConstantDefiner { + public static final Hook AB_TEST_CHECK_BOOLEAN = new Hook("AB_TEST_CHECK_BOOLEAN", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, Boolean.TYPE); + public static final Hook AB_TEST_CHECK_FLOAT = new Hook("AB_TEST_CHECK_FLOAT", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, Float.TYPE); + public static final Hook AB_TEST_CHECK_INT = new Hook("AB_TEST_CHECK_INT", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, Integer.TYPE); + public static final Hook AB_TEST_CHECK_LONG = new Hook("AB_TEST_CHECK_LONG", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, Long.TYPE); + public static final Hook AB_TEST_CHECK_STRING = new Hook("AB_TEST_CHECK_VALUE", HookClassDef.AB_TEST_MANAGER, "a", String.class, String.class, String.class); + public static final Hook BATCHED_MEDIA_LIMITER = new Hook("BATCHED_MEDIA_LIMITER", HookClassDef.SENT_VIDEO, "aV", new Object[0]); + public static final Hook CAMERA_IS_VISIBLE = new Hook("CAMERA_IS_VISIBLE", HookClassDef.CAMERA_FRAGMENT, "a", "azdk"); + public static final Hook CAPTION_CREATE_HOOK = new Hook("CAPTION_CREATE_HOOK", HookClassDef.CAPTION_MANAGER_CLASS, "onCreateActionMode", ActionMode.class, Menu.class); + public static final Hook CHAT_IMAGE_GET_ALGORITHM = new Hook("CHAT_IMAGE_GET_ALGORITHM", HookClassDef.CHAT_IMAGE_METADATA, "b", HookClassDef.CHAT_VIDEO.getStrClass()); + public static final Hook CHAT_ISSAVED_INAPP = new Hook("CHAT_ISSAVED_INAPP", (HookClassDef.HookClass) null, "eC_", new Object[0]); + public static final Hook CHAT_MESSAGE_VIEW_MEASURE = new Hook("CHAT_MESSAGE_VIEW_MEASURE", HookClassDef.CHAT_MESSAGE_VIEW_HOLDER, "F", new Object[0]); + public static final Hook CHAT_METADATA_READ = new Hook("CHAT_METADATA_READ", HookClassDef.CHAT_METADATA_JSON_PARSER, "a", "com.google.gson.stream.JsonReader"); + public static final Hook CHAT_METADATA_READ_SECOND = new Hook("CHAT_METADATA_READ_SECOND", HookClassDef.CHAT_METADATA_JSON_PARSER_SECOND, "a", "com.google.gson.stream.JsonReader"); + public static final Hook CHAT_METADATA_WRITE = new Hook("CHAT_METADATA_WRITE", HookClassDef.CHAT_METADATA_JSON_PARSER, "a", "com.google.gson.stream.JsonWriter", HookClassDef.CHAT_METADATA.getStrClass()); + public static final Hook CHAT_METADATA_WRITE_SECOND = new Hook("CHAT_METADATA_WRITE_SECOND", HookClassDef.CHAT_METADATA_JSON_PARSER_SECOND, "a", "com.google.gson.stream.JsonWriter", "bbyv"); + public static final Hook CHAT_NOTIFICATION = new Hook("CHAT_NOTIFICATION", HookClassDef.CHAT_NOTIFICATION_CREATOR, "a", "avxe", "avwy"); + public static final Hook CHAT_SAVE_INAPP = new Hook("CHAT_SAVE_INAPP", HookClassDef.CHAT_MESSAGE_VIEW_HOLDER, "x", new Object[0]); + public static final Hook CHAT_VIDEO_GET_ALGORITHM = new Hook("CHAT_VIDEO_GET_ALGORITHM", HookClassDef.CHAT_VIDEO_METADATA, "e", new Object[0]); + public static final Hook CHAT_VIDEO_PATH = new Hook("CHAT_VIDEO_PATH", HookClassDef.CHAT_VIDEO, "eT_", new Object[0]); + public static final Hook CHECK_LENS_ASSET_AUTH = new Hook("CHECK_LENS_ASSET_AUTH", HookClassDef.LENS_AUTHENTICATION, "a", "ambc", String.class); + public static final Hook CHECK_LENS_AUTH = new Hook("CHECK_LENS_AUTH", HookClassDef.LENS_AUTHENTICATION, "a", HookClassDef.LENS.getStrClass(), String.class); + public static final Hook CHECK_LENS_CATEGORY_AUTH = new Hook("CHECK_LENS_CATEGORY_AUTH", HookClassDef.LENS_AUTHENTICATION, "a", "amaw", String.class); + public static final Hook CONSTRUCTOR_OPERA_PAGE_VIEW = new Hook("CONSTRUCTOR_OPERA_PAGE_VIEW", HookClassDef.OPERA_PAGE_VIEW, (String) null, Context.class); + public static final Hook COUNTDOWNTIMER_VIEW_ONDRAW = new Hook("COUNTDOWNTIMER_VIEW_ONDRAW", HookClassDef.COUNTDOWNTIMER_VIEW, "onDraw", Canvas.class); + public static final Hook CREATE_CHEETAH_PROFILE_SETTINGS_VIEW = new Hook("CREATE_CHEETAH_PROFILE_SETTINGS_VIEW", HookClassDef.CHEETAH_PROFILE_SETTINGS_CREATOR, (String) null, View.class); + public static final Hook DIRECT_GET_ALGORITHM = new Hook("DIRECT_GET_ALGORITHM", HookClassDef.RECEIVED_SNAP_ENCRYPTION, "a", HookClassDef.RECEIVED_SNAP.getStrClass(), String.class); + public static final Hook DISPATCH_CHAT_UPDATE = new Hook("DISPATCH_CHAT_UPDATE", HookClassDef.NETWORK_DISPATCHER, "a", "aphd", "bbnl"); + public static final Hook ENCRYPTION_ALGORITHM_STREAM = new Hook("ENCRYPTION_ALGORITHM_STREAM", HookClassDef.ENCRYPTION_ALGORITHM, "b", InputStream.class); + public static final Hook ERROR_SUPPRESS_DOWNLOADER_RUNNABLE = new Hook("ERROR_SUPPRESS_DOWNLOADER_RUNNABLE", HookClassDef.DOWNLOADER_RUNNABLE, "run", new Object[0]); + public static final Hook EXPERIMENT_PUSH_STATE = new Hook("EXPERIMENT_PUSH_STATE", HookClassDef.EXPERIMENT_BASE, "j", new Object[0]); + public static final Hook FONT_HOOK = new Hook("FONT_HOOK", HookClassDef.FONT_CLASS, "createFromFile", String.class); + public static final Hook FRIEND_PROFILE_POPUP_CREATED = new Hook("FRIEND_PROFILE_POPUP_CREATED", HookClassDef.FRIEND_PROFILE_POPUP_FRAGMENT, "onViewCreated", View.class, Bundle.class); + public static final Hook FRIEND_STORY_TILE_USERNAME = new Hook("FRIEND_STORY_TILE_USERNAME", HookClassDef.STORY_FRIEND_VIEWED, "a", new Object[0]); + public static final Hook GET_RECEIVED_SNAP_PAYLOAD = new Hook("GET_RECEIVED_SNAP_PAYLOAD", HookClassDef.RECEIVED_SNAP_PAYLOAD_BUILDER, "getRequestPayload", new Object[0]); + public static final Hook GET_SNAP_ID = new Hook("GET_SNAP_ID", HookClassDef.SNAP_BASE, "h", new Object[0]); + public static final Hook GET_STORY_SNAP_PAYLOAD = new Hook("GET_STORY_SNAP_PAYLOAD", HookClassDef.STORY_SNAP_PAYLOAD_BUILDER, "getRequestPayload", new Object[0]); + public static final Hook GET_USERNAME = new Hook("GET_USERNAME", HookClassDef.USER_PREFS, "N"); + public static final Hook GROUP_ALGORITHM_UNWRAPPED = new Hook("GROUP_ALGORITHM_UNWRAPPED", HookClassDef.GROUP_SNAP_WRAPPER, "a", String.class); + public static final Hook GROUP_GET_ALGORITHM = new Hook("GROUP_GET_ALGORITHM", HookClassDef.GROUP_SNAP_METADATA, "a", "apjb"); + public static final HookDef INST = new HookDef(); + public static final Hook LENS_LOADING = new Hook("LENS_LOADING", HookClassDef.LENS_LOADER, "a", List.class); + public static final Hook LOAD_INITIAL_STORIES = new Hook("LOAD_INITIAL_STORIES", HookClassDef.STORY_MANAGER, "a", Integer.TYPE, Integer.TYPE, Integer.TYPE, HashMap.class, HashMap.class, Integer.TYPE, Integer.TYPE, Integer.TYPE, List.class, Long.TYPE); + public static final Hook LOAD_NEW_STORY = new Hook("LOAD_NEW_STORY", HookClassDef.STORY_MANAGER, "a", "auht"); + public static final Hook LOAD_STORIES = new Hook("LOAD_STORIES", HookClassDef.STORY_LOADER, "a", List.class); + public static final Hook LOAD_STORY_SNAP_ADVERT = new Hook("LOAD_STORY_SNAP_ADVERT", HookClassDef.STORY_SNAP_AD_LOADER, "a", HookClassDef.STORY_SNAP_AD_LOADER.getStrClass(), "ffh"); + public static final Hook MARK_DIRECT_CHAT_VIEWED_PRESENT = new Hook("MARK_DIRECT_CHAT_VIEWED_PRESENT", HookClassDef.CHAT_DIRECT_VIEW_MARKER, "a", "apfi", "awqi"); + public static final Hook MARK_DIRECT_CHAT_VIEWED_UNPRESENT = new Hook("MARK_DIRECT_CHAT_VIEWED_UNPRESENT", HookClassDef.CHAT_DIRECT_VIEW_MARKER, "b", "awqi", "apfi"); + public static final Hook MARK_GROUP_CHAT_VIEWED = new Hook("MARK_GROUP_CHAT_VIEWED", HookClassDef.CHAT_GROUP_VIEW_MARKER, "a", "aphd", String.class); + public static final Hook MARK_STORY_VIEWED = new Hook("MARK_STORY_VIEWED", HookClassDef.STORY_STATUS_UPDATER, "a", "atyj", HookClassDef.STORY_SNAP.getStrClass(), Boolean.TYPE); + public static final Hook NETWORK_EXECUTE_SYNC = new Hook("NETWORK_EXECUTE_SYNC", HookClassDef.NETWORK_MANAGER, "executeSynchronously", new Object[0]); + public static final Hook NEW_CONCENTRIC_TIMERVIEW_ONDRAW = new Hook("NEW_CONCENTRIC_TIMERVIEW_ONDRAW", HookClassDef.NEW_CONCENTRIC_TIMERVIEW, "onDraw", Canvas.class); + public static final Hook OPENED_SNAP = new Hook("OPENED_SNAP", HookClassDef.RECEIVED_SNAP, "e", Boolean.TYPE); + public static final Hook REPLACE_SHARED_IMAGE = new Hook("REPLACE_SHARED_IMAGE", HookClassDef.SHARE_IMAGE, "a", Bitmap.class, Integer.class, String.class, Long.TYPE, Boolean.TYPE, Integer.TYPE, "fye$b"); + public static final Hook REPLACE_SHARED_VIDEO = new Hook("REPLACE_SHARED_VIDEO", HookClassDef.SHARE_VIDEO, "a", Uri.class, Integer.TYPE, Boolean.TYPE, "axec", Long.TYPE, Long.TYPE); + public static final Hook RESOLVE_LENS_CATEGORY = new Hook("RESOLVE_LENS_CATEGORY", HookClassDef.LENS_CATEGORY_RESOLVER, "a", String.class); + public static final Hook SCREENSHOT_BYPASS = new Hook("SCREENSHOT_BYPASS", HookClassDef.SCREENSHOT_DETECTOR, "a", LinkedHashMap.class); + public static final Hook SENT_BATCHED_SNAP = new Hook("SENT_BATCHED_SNAP", HookClassDef.SENT_BATCHED_VIDEO, "d", new Object[0]); + public static final Hook SENT_SNAP = new Hook("SENT_SNAP", HookClassDef.META_DATA_BUILDER, "a", HookClassDef.SENT_SNAP_BASE.getStrClass()); + public static final Hook SET_SNAP_STATUS = new Hook("SET_SNAP_STATUS", HookClassDef.SNAP_BASE, "a", HookClassDef.SNAP_STATUS.getStrClass()); + public static final Hook SNAP_COUNTDOWN_POSTER = new Hook("SNAP_COUNTDOWN_POSTER", HookClassDef.SNAP_COUNTDOWN_CONTROLLER, "a", Long.TYPE); + public static final Hook SNAP_GET_MEDIA_TYPE = new Hook("SNAP_GET_MEDIA_TYPE", HookClassDef.SNAP_BASE, "bc_", new Object[0]); + public static final Hook SNAP_GET_TIMESTAMP = new Hook("SNAP_GET_TIMESTAMP", HookClassDef.STORY_SNAP, "aH_", new Object[0]); + public static final Hook SNAP_GET_USERNAME = new Hook("SNAP_GET_USERNAME", HookClassDef.RECEIVED_SNAP, "s", new Object[0]); + public static final Hook STORY_DISPLAYED = new Hook("STORY_DISPLAYED", HookClassDef.STORY_ADVANCER, "F", new Object[0]); + public static final Hook STORY_GET_ALGORITHM = new Hook("STORY_GET_ALGORITHM", HookClassDef.STORY_SNAP, "ar", new Object[0]); + public static final Hook STORY_METADATA_BUILDER = new Hook("STORY_METADATA_BUILDER", HookClassDef.STORY_METADATA_LOADER, "a", HookClassDef.STORY_SNAP.getStrClass(), "awbb", "awba", "atyz"); + public static final Hook STORY_METADATA_GET_OBJECT = new Hook("STORY_METADATA_GET_OBJECT", HookClassDef.STORY_METADATA, "a", String.class); + public static final Hook STORY_METADATA_INSERT_OBJECT = new Hook("STORY_METADATA_INSERT_OBJECT", HookClassDef.STORY_METADATA, "b", String.class, Object.class); + public static final Hook STREAM_TYPE_CHECK_BYPASS = new Hook("STREAM_TYPE_CHECK_BYPASS", HookClassDef.ENCRYPTED_STREAM_BUILDER, "a", "ye", Integer.TYPE, Integer.TYPE); + public static final Hook TEXTURE_VIDVIEW_SETLOOPING = new Hook("TEXTURE_VIDVIEW_SETLOOPING", HookClassDef.TEXTURE_VIDEO_VIEW, "setLooping", Boolean.TYPE); + public static final Hook TEXTURE_VIDVIEW_START = new Hook("TEXTURE_VIDVIEW_START", HookClassDef.TEXTURE_VIDEO_VIEW, "start", new Object[0]); + + public static class Hook extends Constant { + private final HookClassDef.HookClass hookClass; + @Nullable + private final String hookMethod; + private final Object[] hookParams; + + Hook(String name, HookClassDef.HookClass hookClass2, @Nullable String hookMethod2, Object... hookParams2) { + super(name); + this.hookClass = hookClass2; + this.hookMethod = hookMethod2; + this.hookParams = hookParams2; + } + + public HookClassDef.HookClass getHookClass() { + return this.hookClass; + } + + @Nullable + public String getHookMethod() { + return this.hookMethod; + } + + public Object[] getHookParams() { + return this.hookParams; + } + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookVariableDef.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookVariableDef.java index c06124c..4798e8c 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookVariableDef.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookDefinitions/HookVariableDef.java @@ -1,53 +1,52 @@ -package com.ljmu.andre.snaptools.ModulePack.HookDefinitions; - -import com.ljmu.andre.ConstantDefiner.Constant; -import com.ljmu.andre.ConstantDefiner.ConstantDefiner; - -public class HookVariableDef extends ConstantDefiner { - public static final HookVariable BATCHED_MEDIA_ITEM_BOOLEAN = new HookVariable("BATCHED_MEDIA_ITEM_BOOLEAN", "f"); // Done - public static final HookVariable BATCHED_MEDIA_LIST = new HookVariable("BATCHED_MEDIA_LIST", "aJ"); // Done - public static final HookVariable CHAT_METADATA_MEDIA = new HookVariable("CHAT_METADATA_MEDIA", "c"); // Done - public static final HookVariable CHAT_SAVING_LINKER = new HookVariable("CHAT_SAVING_LINKER", "H"); // Done (unsure) - public static final HookVariable CHAT_SAVING_LINKER_CHAT_REF = new HookVariable("CHAT_SAVING_LINKER_CHAT_REF", "d"); // Done - public static final HookVariable CHAT_TOP_PANEL_VIEW = new HookVariable("CHAT_TOP_PANEL_VIEW", "n");// Done - public static final HookVariable FILTER_METADATA_CACHE = new HookVariable("FILTER_METADATA_CACHE", "a"); - public static final HookVariable FILTER_SERIALIZABLE_METADATA = new HookVariable("FILTER_SERIALIZABLE_METADATA", "a"); // Done - public static final HookVariable GEOFILTER_VIEW_CREATION_ARG3 = new HookVariable("GEOFILTER_VIEW_CREATION_ARG3", "a"); - public static final HookVariable GROUP_ALGORITHM_WRAPPER_FIELD = new HookVariable("GROUP_ALGORITHM_WRAPPER_FIELD", "b"); // Done - public static final HookVariable LENS_ACTIVATOR = new HookVariable("LENS_ACTIVATOR", "b"); // Done - public static final HookVariable LENS_CATEGORY = new HookVariable("LENS_CATEGORY", "a"); // Done - public static final HookVariable LENS_CATEGORY_MAP = new HookVariable("LENS_CATEGORY_MAP", "b"); // Done - public static final HookVariable MCANONICALDISPLAYNAME = new HookVariable("MCANONICALDISPLAYNAME", "aM"); // Done - public static final HookVariable NOTIFICATION_TYPE = new HookVariable("NOTIFICATION_TYPE", "a"); // Done - public static final HookVariable NO_AUTO_ADVANCE = new HookVariable("NO_AUTO_ADVANCE", "NO_AUTO_ADVANCE"); - public static final HookVariable RECEIVED_SNAP_PAYLOAD_HOLDER = new HookVariable("RECEIVED_SNAP_PAYLOAD_HOLDER", "b"); // Done - public static final HookVariable RECEIVED_SNAP_PAYLOAD_MAP = new HookVariable("RECEIVED_SNAP_PAYLOAD_MAP", "a"); // Done - public static final HookVariable SENT_BATCHED_VIDEO_MEDIAHOLDER = new HookVariable("SENT_BATCHED_VIDEO_MEDIAHOLDER", "c"); // Done - public static final HookVariable SENT_MEDIA_BATCH_DATA = new HookVariable("SENT_MEDIA_BATCH_DATA", "cx"); // Done - public static final HookVariable SENT_MEDIA_BITMAP = new HookVariable("SENT_MEDIA_BITMAP", "P"); // Done - public static final HookVariable SENT_MEDIA_TIMESTAMP = new HookVariable("SENT_MEDIA_TIMESTAMP", "bT"); // Done - public static final HookVariable SENT_MEDIA_VIDEO_URI = new HookVariable("SENT_MEDIA_VIDEO_URI", "ba"); - public static final HookVariable SNAPCAPTIONVIEW_CONTEXT = new HookVariable("SNAPCAPTIONVIEW_CONTEXT", "b"); - public static final HookVariable SNAP_IS_ZIPPED = new HookVariable("SNAP_IS_ZIPPED", "aK"); // Done - public static final HookVariable STORY_ADVANCER_DISPLAY_STATE = new HookVariable("STORY_ADVANCER_DISPLAY_STATE", "i"); // Done - public static final HookVariable STORY_ADVANCER_METADATA = new HookVariable("STORY_ADVANCER_METADATA", "f"); // Done - public static final HookVariable STORY_COLLECTION_MAP = new HookVariable("STORY_COLLECTION_MAP", "e"); // Done - public static final HookVariable STORY_UPDATE_METADATA = new HookVariable("STORY_UPDATE_METADATA", "b"); // Done - public static final HookVariable STORY_UPDATE_METADATA_ID = new HookVariable("STORY_UPDATE_METADATA_ID", "a"); // Done - public static final HookVariable STORY_UPDATE_METADATA_LIST = new HookVariable("STORY_UPDATE_METADATA_LIST", "b"); - public static final HookVariable STREAM_TYPE_CHECK_BOOLEAN = new HookVariable("STREAM_TYPE_CHECK_BOOLEAN", "d"); - - public static class HookVariable extends Constant { - private final String varName; - - HookVariable(String name, String varName2) { - super(name); - this.varName = varName2; - } - - public String getVarName() { - return this.varName; - } - } -} - +package com.ljmu.andre.snaptools.ModulePack.HookDefinitions; + +import com.ljmu.andre.ConstantDefiner.Constant; +import com.ljmu.andre.ConstantDefiner.ConstantDefiner; + +public class HookVariableDef extends ConstantDefiner { + public static final HookVariable BATCHED_MEDIA_ITEM_BOOLEAN = new HookVariable("BATCHED_MEDIA_ITEM_BOOLEAN", "e"); + public static final HookVariable BATCHED_MEDIA_LIST = new HookVariable("BATCHED_MEDIA_LIST", "aK"); + public static final HookVariable CHAT_METADATA_MEDIA = new HookVariable("CHAT_METADATA_MEDIA", "c"); + public static final HookVariable CHAT_SAVING_LINKER = new HookVariable("CHAT_SAVING_LINKER", "B"); + public static final HookVariable CHAT_SAVING_LINKER_CHAT_REF = new HookVariable("CHAT_SAVING_LINKER_CHAT_REF", "d"); + public static final HookVariable CHAT_TOP_PANEL_VIEW = new HookVariable("CHAT_TOP_PANEL_VIEW", "o"); + public static final HookVariable FILTER_METADATA_CACHE = new HookVariable("FILTER_METADATA_CACHE", "a"); + public static final HookVariable FILTER_SERIALIZABLE_METADATA = new HookVariable("FILTER_SERIALIZABLE_METADATA", "a"); + public static final HookVariable GEOFILTER_VIEW_CREATION_ARG3 = new HookVariable("GEOFILTER_VIEW_CREATION_ARG3", "a"); + public static final HookVariable GROUP_ALGORITHM_WRAPPER_FIELD = new HookVariable("GROUP_ALGORITHM_WRAPPER_FIELD", "b"); + public static final HookVariable LENS_ACTIVATOR = new HookVariable("LENS_ACTIVATOR", "b"); + public static final HookVariable LENS_CATEGORY = new HookVariable("LENS_CATEGORY", "a"); + public static final HookVariable LENS_CATEGORY_MAP = new HookVariable("LENS_CATEGORY_MAP", "a"); + public static final HookVariable MCANONICALDISPLAYNAME = new HookVariable("MCANONICALDISPLAYNAME", "aK"); + public static final HookVariable NOTIFICATION_TYPE = new HookVariable("NOTIFICATION_TYPE", "a"); + public static final HookVariable NO_AUTO_ADVANCE = new HookVariable("NO_AUTO_ADVANCE", "NO_AUTO_ADVANCE"); + public static final HookVariable RECEIVED_SNAP_PAYLOAD_HOLDER = new HookVariable("RECEIVED_SNAP_PAYLOAD_HOLDER", "b"); + public static final HookVariable RECEIVED_SNAP_PAYLOAD_MAP = new HookVariable("RECEIVED_SNAP_PAYLOAD_MAP", "a"); + public static final HookVariable SENT_BATCHED_VIDEO_MEDIAHOLDER = new HookVariable("SENT_BATCHED_VIDEO_MEDIAHOLDER", "c"); + public static final HookVariable SENT_MEDIA_BATCH_DATA = new HookVariable("SENT_MEDIA_BATCH_DATA", "cf"); + public static final HookVariable SENT_MEDIA_BITMAP = new HookVariable("SENT_MEDIA_BITMAP", "aF"); + public static final HookVariable SENT_MEDIA_TIMESTAMP = new HookVariable("SENT_MEDIA_TIMESTAMP", "bE"); + public static final HookVariable SENT_MEDIA_VIDEO_URI = new HookVariable("SENT_MEDIA_VIDEO_URI", "aO"); + public static final HookVariable SNAPCAPTIONVIEW_CONTEXT = new HookVariable("SNAPCAPTIONVIEW_CONTEXT", "b"); + public static final HookVariable SNAP_IS_ZIPPED = new HookVariable("SNAP_IS_ZIPPED", "aJ"); + public static final HookVariable STORY_ADVANCER_DISPLAY_STATE = new HookVariable("STORY_ADVANCER_DISPLAY_STATE", "f"); + public static final HookVariable STORY_ADVANCER_METADATA = new HookVariable("STORY_ADVANCER_METADATA", "c"); + public static final HookVariable STORY_COLLECTION_MAP = new HookVariable("STORY_COLLECTION_MAP", "c"); + public static final HookVariable STORY_UPDATE_METADATA = new HookVariable("STORY_UPDATE_METADATA", "b"); + public static final HookVariable STORY_UPDATE_METADATA_ID = new HookVariable("STORY_UPDATE_METADATA_ID", "a"); + public static final HookVariable STORY_UPDATE_METADATA_LIST = new HookVariable("STORY_UPDATE_METADATA_LIST", "b"); + public static final HookVariable STREAM_TYPE_CHECK_BOOLEAN = new HookVariable("STREAM_TYPE_CHECK_BOOLEAN", "d"); + + public static class HookVariable extends Constant { + private final String varName; + + HookVariable(String name, String varName2) { + super(name); + this.varName = varName2; + } + + public String getVarName() { + return this.varName; + } + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookResolver.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookResolver.java index 46dff9e..602dac1 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookResolver.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookResolver.java @@ -1,240 +1,240 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.content.Context; -import androidx.annotation.NonNull; - -import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.Framework.Utils.LoadState.State; -import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef; -import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.HookClass; -import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef; -import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.Hook; -import com.ljmu.andre.snaptools.Utils.Constants; -import com.ljmu.andre.snaptools.Utils.StringUtils; - -import java.lang.reflect.Member; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import de.robv.android.xposed.XposedHelpers; -import timber.log.Timber; - -import static de.robv.android.xposed.XposedHelpers.findClass; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -@SuppressWarnings({"WeakerAccess"}) -public class HookResolver extends ModuleHelper { - private static final Map hookReferenceMap = new HashMap<>(); - private static final Map> hookClassMap = new HashMap<>(); - - // =========================================================================== - - public HookResolver(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - /** - * =========================================================================== - * Attempt to find the HookReference associated with the input Hook - * =========================================================================== - * - * @param hook - The Hook to find the linked HookReference for - * @return The HookReference linked to Hook - * @throws HookNotFoundException - When no HookReference is found - */ - @NonNull - public static HookReference resolveHook(@NonNull Hook hook) throws HookNotFoundException { - HookReference hookReference = hookReferenceMap.get(hook.getName()); - - if (hookReference == null) { - throw new HookNotFoundException( - String.format("Could not find hook [Name:%s][Class:%s][Method:%s]", - hook.getName(), hook.getHookClass().getStrClass(), hook.getHookMethod())); - } - - return hookReference; - } - - // =========================================================================== - - /** - * =========================================================================== - * Attempt to find the Class associated with the input HookClass - * =========================================================================== - * - * @param hookClass - The HookClass to find the linked Class for - * @return The Class linked to HookClass - * @throws HookNotFoundException - When no Class is found - */ - @NonNull - public static Class resolveHookClass(@NonNull HookClass hookClass) throws HookNotFoundException { - Class resolvedClass = hookClassMap.get(hookClass.getName()); - - if (resolvedClass == null) - throw new HookNotFoundException( - String.format( - "Could not find HookClass [Class:%s]", - hookClass.getStrClass())); - - return resolvedClass; - } - - @Override - public FragmentHelper[] getUIFragments() { - return null; - } - - /** - * =========================================================================== - * Begins Hook loading and Load State Updating - * =========================================================================== - */ - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - if (hookReferenceMap.size() > 0) { - Timber.w("Tried to resolve hooks more than once!"); - return; - } - - int failedClasses = buildClassMap(snapClassLoader); - int failedHooks = buildHookMap(snapClassLoader); - - if (failedClasses > 0 || failedHooks > 0) { - Timber.e("Failed to load [Classes: %s/%s][Hooks: %s/%s]", - failedClasses, HookClassDef.INST.size(), - failedHooks, HookDef.INST.size()); - moduleLoadState.setState(State.ISSUES); - } - } - - /** - * =========================================================================== - * Iterate through the HookClass values and build their appropriate - * =========================================================================== - * - * @return the number of failed Classes - */ - private int buildClassMap(ClassLoader classLoader) { - int failedClasses = 0; - for (HookClass hookClass : HookClassDef.INST.values()) { - try { - Class resolvedClass = findClass(hookClass.getStrClass(), classLoader); - - hookClassMap.put(hookClass.getName(), resolvedClass); - } catch (Throwable t) { - if (Constants.getApkVersionCode() >= 73 && Constants.isApkDebug()) { - Timber.e("Error building class [Class:%s][Reason:%s]", - hookClass, t.getMessage()); - } else { - Timber.e("Error building class: %s", StringUtils.obfus(hookClass.getStrClass())); - } - - failedClasses++; - } - } - - return failedClasses; - } - - /** - * =========================================================================== - * Attempt to build as many HookReferences using Hook.values() - * =========================================================================== - * - * @return the number of failed HookReferences - */ - private int buildHookMap(ClassLoader classLoader) { - int failedHooks = 0; - for (Hook hook : HookDef.INST.values()) { - try { - if (hook.getHookClass() == null) - continue; - - HookReference hookReference = new HookReference(hook, classLoader); - hookReferenceMap.put(hook.getName(), hookReference); - } catch (Throwable t) { - Timber.e("Error building hook [Hook:%s][Reason:%s]", - hook, t.getMessage()); - - if (Constants.getApkVersionCode() >= 73 && Constants.isApkDebug()) { - Timber.e("Error building hook [Hook:%s][Reason:%s]", - hook, t.getMessage()); - } else { - Timber.e("Error building hook: %s", StringUtils.obfus(hook.getHookMethod())); - } - failedHooks++; - } - } - - return failedHooks; - } - - // =========================================================================== - - // =========================================================================== - - /** - * =========================================================================== - * Hook reference: Builds and stores the Member for hooking - * =========================================================================== - */ - public static class HookReference { - private final Member hookMember; - - HookReference(Hook hook, ClassLoader classLoader) throws Throwable { - Class hookClass = resolveHookClass(hook.getHookClass()); - String hookMethod = hook.getHookMethod(); - Class[] hookParams = resolveParams(hook.getHookParams(), classLoader); - - if (hookMethod != null) - this.hookMember = XposedHelpers.findMethodExact(hookClass, hookMethod, hookParams); - else - this.hookMember = XposedHelpers.findConstructorExact(hookClass, hookParams); - - Timber.d(this.toString()); - } - - // =========================================================================== - - private Class[] resolveParams(Object[] unresolvedParams, ClassLoader classLoader) throws Throwable { - ArrayList resolvedParamList = new ArrayList<>(); - - for (Object param : unresolvedParams) { - Class resolvedParam; - - if (param instanceof String) - resolvedParam = findClass((String) param, classLoader); - else if (param instanceof Class) - resolvedParam = (Class) param; - else - continue; - - resolvedParamList.add(resolvedParam); - } - - return resolvedParamList.toArray(new Class[0]); - } - - @Override - public String toString() { - if (getHookMember() == null) - return "HookReference[Undefined]"; - - return String.format("HookReference[Class:%s, Method:%s]", - getHookMember().getDeclaringClass(), - getHookMember().getName()); - } - - public Member getHookMember() { - return hookMember; - } - } +package com.ljmu.andre.snaptools.ModulePack; + +import android.content.Context; +import androidx.annotation.NonNull; + +import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.Framework.Utils.LoadState.State; +import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef; +import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.HookClass; +import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef; +import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.Hook; +import com.ljmu.andre.snaptools.Utils.Constants; +import com.ljmu.andre.snaptools.Utils.StringUtils; + +import java.lang.reflect.Member; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import de.robv.android.xposed.XposedHelpers; +import timber.log.Timber; + +import static de.robv.android.xposed.XposedHelpers.findClass; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +@SuppressWarnings({"WeakerAccess"}) +public class HookResolver extends ModuleHelper { + private static final Map hookReferenceMap = new HashMap<>(); + private static final Map> hookClassMap = new HashMap<>(); + + // =========================================================================== + + public HookResolver(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + /** + * =========================================================================== + * Attempt to find the HookReference associated with the input Hook + * =========================================================================== + * + * @param hook - The Hook to find the linked HookReference for + * @return The HookReference linked to Hook + * @throws HookNotFoundException - When no HookReference is found + */ + @NonNull + public static HookReference resolveHook(@NonNull Hook hook) throws HookNotFoundException { + HookReference hookReference = hookReferenceMap.get(hook.getName()); + + if (hookReference == null) { + throw new HookNotFoundException( + String.format("Could not find hook [Name:%s][Class:%s][Method:%s]", + hook.getName(), hook.getHookClass().getStrClass(), hook.getHookMethod())); + } + + return hookReference; + } + + // =========================================================================== + + /** + * =========================================================================== + * Attempt to find the Class associated with the input HookClass + * =========================================================================== + * + * @param hookClass - The HookClass to find the linked Class for + * @return The Class linked to HookClass + * @throws HookNotFoundException - When no Class is found + */ + @NonNull + public static Class resolveHookClass(@NonNull HookClass hookClass) throws HookNotFoundException { + Class resolvedClass = hookClassMap.get(hookClass.getName()); + + if (resolvedClass == null) + throw new HookNotFoundException( + String.format( + "Could not find HookClass [Class:%s]", + hookClass.getStrClass())); + + return resolvedClass; + } + + @Override + public FragmentHelper[] getUIFragments() { + return null; + } + + /** + * =========================================================================== + * Begins Hook loading and Load State Updating + * =========================================================================== + */ + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + if (hookReferenceMap.size() > 0) { + Timber.w("Tried to resolve hooks more than once!"); + return; + } + + int failedClasses = buildClassMap(snapClassLoader); + int failedHooks = buildHookMap(snapClassLoader); + + if (failedClasses > 0 || failedHooks > 0) { + Timber.e("Failed to load [Classes: %s/%s][Hooks: %s/%s]", + failedClasses, HookClassDef.INST.size(), + failedHooks, HookDef.INST.size()); + moduleLoadState.setState(State.ISSUES); + } + } + + /** + * =========================================================================== + * Iterate through the HookClass values and build their appropriate + * =========================================================================== + * + * @return the number of failed Classes + */ + private int buildClassMap(ClassLoader classLoader) { + int failedClasses = 0; + for (HookClass hookClass : HookClassDef.INST.values()) { + try { + Class resolvedClass = findClass(hookClass.getStrClass(), classLoader); + + hookClassMap.put(hookClass.getName(), resolvedClass); + } catch (Throwable t) { + if (Constants.getApkVersionCode() >= 73 && Constants.isApkDebug()) { + Timber.e("Error building class [Class:%s][Reason:%s]", + hookClass, t.getMessage()); + } else { + Timber.e("Error building class: %s", StringUtils.obfus(hookClass.getStrClass())); + } + + failedClasses++; + } + } + + return failedClasses; + } + + /** + * =========================================================================== + * Attempt to build as many HookReferences using Hook.values() + * =========================================================================== + * + * @return the number of failed HookReferences + */ + private int buildHookMap(ClassLoader classLoader) { + int failedHooks = 0; + for (Hook hook : HookDef.INST.values()) { + try { + if (hook.getHookClass() == null) + continue; + + HookReference hookReference = new HookReference(hook, classLoader); + hookReferenceMap.put(hook.getName(), hookReference); + } catch (Throwable t) { + Timber.e("Error building hook [Hook:%s][Reason:%s]", + hook, t.getMessage()); + + if (Constants.getApkVersionCode() >= 73 && Constants.isApkDebug()) { + Timber.e("Error building hook [Hook:%s][Reason:%s]", + hook, t.getMessage()); + } else { + Timber.e("Error building hook: %s", StringUtils.obfus(hook.getHookMethod())); + } + failedHooks++; + } + } + + return failedHooks; + } + + // =========================================================================== + + // =========================================================================== + + /** + * =========================================================================== + * Hook reference: Builds and stores the Member for hooking + * =========================================================================== + */ + public static class HookReference { + private final Member hookMember; + + HookReference(Hook hook, ClassLoader classLoader) throws Throwable { + Class hookClass = resolveHookClass(hook.getHookClass()); + String hookMethod = hook.getHookMethod(); + Class[] hookParams = resolveParams(hook.getHookParams(), classLoader); + + if (hookMethod != null) + this.hookMember = XposedHelpers.findMethodExact(hookClass, hookMethod, hookParams); + else + this.hookMember = XposedHelpers.findConstructorExact(hookClass, hookParams); + + Timber.d(this.toString()); + } + + // =========================================================================== + + private Class[] resolveParams(Object[] unresolvedParams, ClassLoader classLoader) throws Throwable { + ArrayList resolvedParamList = new ArrayList<>(); + + for (Object param : unresolvedParams) { + Class resolvedParam; + + if (param instanceof String) + resolvedParam = findClass((String) param, classLoader); + else if (param instanceof Class) + resolvedParam = (Class) param; + else + continue; + + resolvedParamList.add(resolvedParam); + } + + return resolvedParamList.toArray(new Class[0]); + } + + @Override + public String toString() { + if (getHookMember() == null) + return "HookReference[Undefined]"; + + return String.format("HookReference[Class:%s, Method:%s]", + getHookMember().getDeclaringClass(), + getHookMember().getName()); + } + + public Member getHookMember() { + return hookMember; + } + } } \ No newline at end of file diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/LensCollector.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/LensCollector.java index 11fcc1a..b904c1c 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/LensCollector.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/LensCollector.java @@ -1,370 +1,370 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.content.Context; - -import com.ljmu.andre.CBIDatabase.CBITable; -import com.ljmu.andre.CBIDatabase.Utils.QueryBuilder; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.ModulePack.Databases.LensDatabase; -import com.ljmu.andre.snaptools.ModulePack.Databases.Tables.LensObject; -import com.ljmu.andre.snaptools.ModulePack.Fragments.LensSettingsFragment; -import com.ljmu.andre.snaptools.ModulePack.Utils.FieldMapper; -import com.ljmu.andre.snaptools.Utils.MapUtils; -import com.ljmu.andre.snaptools.Utils.MapUtils.KeyBinder; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.LENS; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.LENS_CONTEXT_HOLDER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.LENS_SLUG; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.LENS_TRACK; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHECK_LENS_ASSET_AUTH; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHECK_LENS_AUTH; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHECK_LENS_CATEGORY_AUTH; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LENS_LOADING; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.RESOLVE_LENS_CATEGORY; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.LENS_CATEGORY_MAP; -import static com.ljmu.andre.snaptools.ModulePack.HookResolver.resolveHookClass; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.LENS_AUTO_ENABLE; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -@SuppressWarnings("WeakerAccess") -public class LensCollector extends ModuleHelper { - private static final Object BUILD_LOCK = new Object(); - - public LensCollector(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - @Override - public FragmentHelper[] getUIFragments() { - return new FragmentHelper[]{new LensSettingsFragment()}; - } - - // =========================================================================== - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - LensDatabase.init(snapContext); - - /** - * =========================================================================== - * Bypass signature checks on the lenses - * =========================================================================== - */ - hookMethod( - CHECK_LENS_AUTH, - XC_MethodReplacement.returnConstant(true) - ); - - hookMethod( - CHECK_LENS_CATEGORY_AUTH, - XC_MethodReplacement.returnConstant(true) - ); - - hookMethod( - CHECK_LENS_ASSET_AUTH, - XC_MethodReplacement.returnConstant(true) - ); - - hookMethod( - RESOLVE_LENS_CATEGORY, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - if (param.getResult() == null || param.getThrowable() != null) { - try { - Map categorymap = getObjectField(LENS_CATEGORY_MAP, param.thisObject); - - Object category = categorymap.get("LENS_CATEGORY_GROUND"); - - if (category == null) - category = categorymap.get("LENS_CATEGORY_SKY"); - - if (category == null) - category = categorymap.get("LENS_CATEGORY_SELFIE"); - - param.setResult(category); - - } catch (Throwable e) { - Timber.e(e); - } - } - } - } - ); - - /*try { - Class assetClass = resolveHookClass(LENS_ASSET); - FieldMapper.initMapper("Asset", assetClass); - } catch (HookNotFoundException e) { - Timber.e(e); - moduleLoadState.fail(); - }*/ - - - /**Image Quality Improvements*/ - /*XposedHelpers.findAndHookMethod( - "com.snapchat.android.app.shared.util.SnapMediaUtils", snapClassLoader, - "a", Bitmap.class, int.class, new ST_MethodHook() { - @Override protected void before(MethodHookParam param) throws Throwable { - Timber.d("Default Compression: " + param.args[1]); - Bitmap bitmap = (Bitmap) param.args[0]; - param.args[1] = 100; - - Timber.d("Bitmap: [Bytes: %s][Config: %s][Density: %s][Height: %s][Width: %s]", bitmap.getByteCount(), bitmap.getConfig(), bitmap.getDensity(), - bitmap.getHeight(), bitmap.getWidth()); - - logStackTrace(); - } - }); - - XposedHelpers.findAndHookMethod( - "mlc", snapClassLoader, - "a", Bitmap.class, - new ST_MethodHook() { - @Override protected void before(MethodHookParam param) throws Throwable { - Timber.i("SNap Image Set"); - Bitmap bitmap = (Bitmap) param.args[0]; - if (bitmap != null) { - Timber.d("Bitmap: [Bytes: %s][Config: %s][Density: %s][Height: %s][Width: %s]", bitmap.getByteCount(), bitmap.getConfig(), bitmap.getDensity(), - bitmap.getHeight(), bitmap.getWidth()); - - param.args[0] = getResizedBitmap(bitmap, 1960, 4032); - } - - logStackTrace(); - } - });*/ - - try { - Class lensClass = resolveHookClass(LENS); - Class slugClass = resolveHookClass(LENS_SLUG); - Class trackClass = resolveHookClass(LENS_TRACK); - Class contextClass = resolveHookClass(LENS_CONTEXT_HOLDER); - CBITable lensTable = LensDatabase.getTable(LensObject.class); - - hookMethod( - LENS_LOADING, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - synchronized (BUILD_LOCK) { - try { - @SuppressWarnings("unchecked") - List lensList = (List) param.args[0]; - - if (lensList == null || lensList.isEmpty()) - return; - - Collection storedLensList = lensTable.getAll( - new QueryBuilder() - .addSelection("isActive", "1") - ); - - @SuppressWarnings("Convert2Lambda") - Map lensDbMap = MapUtils.convertList( - storedLensList, - new KeyBinder() { - @Override - public String getKey(LensObject mapEntry) { - return mapEntry.id; - } - } - ); - - FieldMapper lensMapper = FieldMapper.initMapper("Lens", lensClass); - - /** - * =========================================================================== - * Build field maps for static classes with unchanged content - * =========================================================================== - */ - /** ========================================================================== **/ - FieldMapper.initMapper("Slug", slugClass); - // =========================================================================== - FieldMapper.initMapper("Track", trackClass); - // =========================================================================== - FieldMapper.initMapper("Context", contextClass); - /** ========================================================================== **/ - - boolean enableNewLenses = getPref(LENS_AUTO_ENABLE); - - for (Object lens : lensList) { - try { - Timber.d("Working on lens: %s", lens); - - String idFieldName = lensMapper.get("id"); - String lensId = (String) XposedHelpers.getObjectField(lens, idFieldName); - - /*if (lensTable.contains(lensId)) { - Timber.i("Lens %s already exists", lensId); - lensDbMap.remove(lensId); - continue; - }*/ - lensDbMap.remove(lensId); - - LensObject newDbLens = new LensObject(); - newDbLens.buildFromFieldMap(lensMapper, lens); - newDbLens.isActive = enableNewLenses; - - if (!newDbLens.isReady()) { - Timber.w("Lens not ready to save: %s", newDbLens); - lensDbMap.remove(lensId); - continue; - } - - if (!lensTable.insert(newDbLens)) - Timber.w("Failed to insert lens into database: %s", newDbLens); - } catch (Throwable t) { - Timber.w(t, "Failed to build lens: %s", lens); - } - } - - Timber.d("Inserting table into list"); - - List convertedLenses = convertLensObjects( - snapClassLoader, - lensMapper, - lensDbMap.values() - ); - - if (convertedLenses != null && convertedLenses.size() > 0) { - lensList.addAll(convertedLenses); - Timber.d("Inserted %s lenses", convertedLenses.size()); - } - - cleanEmptyLenses(lensMapper, lensList); - - FieldMapper.removeMapper("Lens"); - FieldMapper.removeMapper("Slug"); - FieldMapper.removeMapper("Track"); - Timber.d("Cleared %s cached objects", LensObject.destroyDataCache()); - } catch (Throwable t) { - Timber.e(t, "Unknown error handling lens system"); - } - } - } - } - ); - } catch (Throwable e) { - Timber.e(e); - moduleLoadState.fail(); - } - } - - private List convertLensObjects(ClassLoader snapClassLoader, FieldMapper lensMapper, - Collection lensObjects) { - try { - FieldMapper slugMapper = FieldMapper.getMapper("Slug"); - Object slugPos = XposedHelpers.newInstance(slugMapper.getLinkClass()); - slugMapper.setField(slugPos, "alignment", "right"); - slugMapper.setField(slugPos, "position", "BOTTOM_RIGHT"); - slugMapper.setField(slugPos, "text", "SPONSORED"); - slugMapper.setField(slugPos, "time_before_fadeout", 3500); - - FieldMapper trackMapper = FieldMapper.getMapper("Track"); - Object trackInfo = XposedHelpers.newInstance(trackMapper.getLinkClass()); - trackMapper.setField(trackInfo, "skip_track", false); - - - List convertedLenses = new ArrayList<>(lensObjects.size()); - Map lensMapDowncast = lensMapper; - - for (LensObject lensObject : lensObjects) { - if (!lensObject.isReady()) - continue; - - //Timber.d("Processing: " + lensObject); - Object convertedLens; - - try { - convertedLens = XposedHelpers.newInstance(lensMapper.getLinkClass()); - } catch (Throwable t) { - Timber.e(t); - continue; - } - - for (String fieldTag : lensMapDowncast.keySet()) { - Object storedVal = lensObject.getFieldByTag(fieldTag); - - if (storedVal != null) - lensMapper.setField(convertedLens, fieldTag, storedVal); - /*else { - if (fieldTag.equals("id") || fieldTag.equals("code") - || fieldTag.equals("icon_link") || fieldTag.equals("mLensLink")) { - Answers.safeLogEvent( - new CustomEvent("NullLensEntry") - .putCustomAttribute("Field", fieldTag) - ); - } - }*/ - } - - lensMapper.setField(convertedLens, "mSponsoredSlugPosAndText", slugPos); - lensMapper.setField(convertedLens, "unlockable_track_info", trackInfo); - - if (isConvertedLensCompleted(lensMapper, convertedLens)) - convertedLenses.add(convertedLens); - /*else { - Answers.safeLogEvent( - new CustomEvent("LensCrashMitigated") - ); - }*/ - } - - Timber.d("Converted %s lenses", convertedLenses.size()); - return convertedLenses; - } catch (Throwable t) { - Timber.e(t); - } - - return Collections.emptyList(); - } - - private void cleanEmptyLenses(FieldMapper lensMapper, List convertedLensList) { - Iterator convertedLensIterator = convertedLensList.iterator(); - - int emptyLensCount = 0; - - while (convertedLensIterator.hasNext()) { - Object convertedLens = convertedLensIterator.next(); - - if (convertedLens == null || !isConvertedLensCompleted(lensMapper, convertedLens)) { - convertedLensIterator.remove(); - emptyLensCount++; - } - } - -// if (emptyLensCount > 0) { -// Answers.safeLogEvent( -// new CustomEvent("EmptyLensReport") -// .putCustomAttribute("Count", emptyLensCount) -// ); -// } - } - - public boolean isConvertedLensCompleted(FieldMapper lensMapper, Object convertedLens) { - return lensMapper.getFieldVal(convertedLens, "id") != null - && lensMapper.getFieldVal(convertedLens, "code") != null - && lensMapper.getFieldVal(convertedLens, "icon_link") != null - && lensMapper.getFieldVal(convertedLens, "mLensLink") != null; - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.content.Context; + +import com.ljmu.andre.CBIDatabase.CBITable; +import com.ljmu.andre.CBIDatabase.Utils.QueryBuilder; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.ModulePack.Databases.LensDatabase; +import com.ljmu.andre.snaptools.ModulePack.Databases.Tables.LensObject; +import com.ljmu.andre.snaptools.ModulePack.Fragments.LensSettingsFragment; +import com.ljmu.andre.snaptools.ModulePack.Utils.FieldMapper; +import com.ljmu.andre.snaptools.Utils.MapUtils; +import com.ljmu.andre.snaptools.Utils.MapUtils.KeyBinder; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedHelpers; +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.LENS; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.LENS_CONTEXT_HOLDER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.LENS_SLUG; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.LENS_TRACK; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHECK_LENS_ASSET_AUTH; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHECK_LENS_AUTH; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHECK_LENS_CATEGORY_AUTH; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LENS_LOADING; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.RESOLVE_LENS_CATEGORY; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.LENS_CATEGORY_MAP; +import static com.ljmu.andre.snaptools.ModulePack.HookResolver.resolveHookClass; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.LENS_AUTO_ENABLE; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +@SuppressWarnings("WeakerAccess") +public class LensCollector extends ModuleHelper { + private static final Object BUILD_LOCK = new Object(); + + public LensCollector(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + @Override + public FragmentHelper[] getUIFragments() { + return new FragmentHelper[]{new LensSettingsFragment()}; + } + + // =========================================================================== + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + LensDatabase.init(snapContext); + + /** + * =========================================================================== + * Bypass signature checks on the lenses + * =========================================================================== + */ + hookMethod( + CHECK_LENS_AUTH, + XC_MethodReplacement.returnConstant(true) + ); + + hookMethod( + CHECK_LENS_CATEGORY_AUTH, + XC_MethodReplacement.returnConstant(true) + ); + + hookMethod( + CHECK_LENS_ASSET_AUTH, + XC_MethodReplacement.returnConstant(true) + ); + + hookMethod( + RESOLVE_LENS_CATEGORY, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + if (param.getResult() == null || param.getThrowable() != null) { + try { + Map categorymap = getObjectField(LENS_CATEGORY_MAP, param.thisObject); + + Object category = categorymap.get("LENS_CATEGORY_GROUND"); + + if (category == null) + category = categorymap.get("LENS_CATEGORY_SKY"); + + if (category == null) + category = categorymap.get("LENS_CATEGORY_SELFIE"); + + param.setResult(category); + + } catch (Throwable e) { + Timber.e(e); + } + } + } + } + ); + + /*try { + Class assetClass = resolveHookClass(LENS_ASSET); + FieldMapper.initMapper("Asset", assetClass); + } catch (HookNotFoundException e) { + Timber.e(e); + moduleLoadState.fail(); + }*/ + + + /**Image Quality Improvements*/ + /*XposedHelpers.findAndHookMethod( + "com.snapchat.android.app.shared.util.SnapMediaUtils", snapClassLoader, + "a", Bitmap.class, int.class, new ST_MethodHook() { + @Override protected void before(MethodHookParam param) throws Throwable { + Timber.d("Default Compression: " + param.args[1]); + Bitmap bitmap = (Bitmap) param.args[0]; + param.args[1] = 100; + + Timber.d("Bitmap: [Bytes: %s][Config: %s][Density: %s][Height: %s][Width: %s]", bitmap.getByteCount(), bitmap.getConfig(), bitmap.getDensity(), + bitmap.getHeight(), bitmap.getWidth()); + + logStackTrace(); + } + }); + + XposedHelpers.findAndHookMethod( + "mlc", snapClassLoader, + "a", Bitmap.class, + new ST_MethodHook() { + @Override protected void before(MethodHookParam param) throws Throwable { + Timber.i("SNap Image Set"); + Bitmap bitmap = (Bitmap) param.args[0]; + if (bitmap != null) { + Timber.d("Bitmap: [Bytes: %s][Config: %s][Density: %s][Height: %s][Width: %s]", bitmap.getByteCount(), bitmap.getConfig(), bitmap.getDensity(), + bitmap.getHeight(), bitmap.getWidth()); + + param.args[0] = getResizedBitmap(bitmap, 1960, 4032); + } + + logStackTrace(); + } + });*/ + + try { + Class lensClass = resolveHookClass(LENS); + Class slugClass = resolveHookClass(LENS_SLUG); + Class trackClass = resolveHookClass(LENS_TRACK); + Class contextClass = resolveHookClass(LENS_CONTEXT_HOLDER); + CBITable lensTable = LensDatabase.getTable(LensObject.class); + + hookMethod( + LENS_LOADING, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + synchronized (BUILD_LOCK) { + try { + @SuppressWarnings("unchecked") + List lensList = (List) param.args[0]; + + if (lensList == null || lensList.isEmpty()) + return; + + Collection storedLensList = lensTable.getAll( + new QueryBuilder() + .addSelection("isActive", "1") + ); + + @SuppressWarnings("Convert2Lambda") + Map lensDbMap = MapUtils.convertList( + storedLensList, + new KeyBinder() { + @Override + public String getKey(LensObject mapEntry) { + return mapEntry.id; + } + } + ); + + FieldMapper lensMapper = FieldMapper.initMapper("Lens", lensClass); + + /** + * =========================================================================== + * Build field maps for static classes with unchanged content + * =========================================================================== + */ + /** ========================================================================== **/ + FieldMapper.initMapper("Slug", slugClass); + // =========================================================================== + FieldMapper.initMapper("Track", trackClass); + // =========================================================================== + FieldMapper.initMapper("Context", contextClass); + /** ========================================================================== **/ + + boolean enableNewLenses = getPref(LENS_AUTO_ENABLE); + + for (Object lens : lensList) { + try { + Timber.d("Working on lens: %s", lens); + + String idFieldName = lensMapper.get("id"); + String lensId = (String) XposedHelpers.getObjectField(lens, idFieldName); + + /*if (lensTable.contains(lensId)) { + Timber.i("Lens %s already exists", lensId); + lensDbMap.remove(lensId); + continue; + }*/ + lensDbMap.remove(lensId); + + LensObject newDbLens = new LensObject(); + newDbLens.buildFromFieldMap(lensMapper, lens); + newDbLens.isActive = enableNewLenses; + + if (!newDbLens.isReady()) { + Timber.w("Lens not ready to save: %s", newDbLens); + lensDbMap.remove(lensId); + continue; + } + + if (!lensTable.insert(newDbLens)) + Timber.w("Failed to insert lens into database: %s", newDbLens); + } catch (Throwable t) { + Timber.w(t, "Failed to build lens: %s", lens); + } + } + + Timber.d("Inserting table into list"); + + List convertedLenses = convertLensObjects( + snapClassLoader, + lensMapper, + lensDbMap.values() + ); + + if (convertedLenses != null && convertedLenses.size() > 0) { + lensList.addAll(convertedLenses); + Timber.d("Inserted %s lenses", convertedLenses.size()); + } + + cleanEmptyLenses(lensMapper, lensList); + + FieldMapper.removeMapper("Lens"); + FieldMapper.removeMapper("Slug"); + FieldMapper.removeMapper("Track"); + Timber.d("Cleared %s cached objects", LensObject.destroyDataCache()); + } catch (Throwable t) { + Timber.e(t, "Unknown error handling lens system"); + } + } + } + } + ); + } catch (Throwable e) { + Timber.e(e); + moduleLoadState.fail(); + } + } + + private List convertLensObjects(ClassLoader snapClassLoader, FieldMapper lensMapper, + Collection lensObjects) { + try { + FieldMapper slugMapper = FieldMapper.getMapper("Slug"); + Object slugPos = XposedHelpers.newInstance(slugMapper.getLinkClass()); + slugMapper.setField(slugPos, "alignment", "right"); + slugMapper.setField(slugPos, "position", "BOTTOM_RIGHT"); + slugMapper.setField(slugPos, "text", "SPONSORED"); + slugMapper.setField(slugPos, "time_before_fadeout", 3500); + + FieldMapper trackMapper = FieldMapper.getMapper("Track"); + Object trackInfo = XposedHelpers.newInstance(trackMapper.getLinkClass()); + trackMapper.setField(trackInfo, "skip_track", false); + + + List convertedLenses = new ArrayList<>(lensObjects.size()); + Map lensMapDowncast = lensMapper; + + for (LensObject lensObject : lensObjects) { + if (!lensObject.isReady()) + continue; + + //Timber.d("Processing: " + lensObject); + Object convertedLens; + + try { + convertedLens = XposedHelpers.newInstance(lensMapper.getLinkClass()); + } catch (Throwable t) { + Timber.e(t); + continue; + } + + for (String fieldTag : lensMapDowncast.keySet()) { + Object storedVal = lensObject.getFieldByTag(fieldTag); + + if (storedVal != null) + lensMapper.setField(convertedLens, fieldTag, storedVal); + /*else { + if (fieldTag.equals("id") || fieldTag.equals("code") + || fieldTag.equals("icon_link") || fieldTag.equals("mLensLink")) { + Answers.safeLogEvent( + new CustomEvent("NullLensEntry") + .putCustomAttribute("Field", fieldTag) + ); + } + }*/ + } + + lensMapper.setField(convertedLens, "mSponsoredSlugPosAndText", slugPos); + lensMapper.setField(convertedLens, "unlockable_track_info", trackInfo); + + if (isConvertedLensCompleted(lensMapper, convertedLens)) + convertedLenses.add(convertedLens); + /*else { + Answers.safeLogEvent( + new CustomEvent("LensCrashMitigated") + ); + }*/ + } + + Timber.d("Converted %s lenses", convertedLenses.size()); + return convertedLenses; + } catch (Throwable t) { + Timber.e(t); + } + + return Collections.emptyList(); + } + + private void cleanEmptyLenses(FieldMapper lensMapper, List convertedLensList) { + Iterator convertedLensIterator = convertedLensList.iterator(); + + int emptyLensCount = 0; + + while (convertedLensIterator.hasNext()) { + Object convertedLens = convertedLensIterator.next(); + + if (convertedLens == null || !isConvertedLensCompleted(lensMapper, convertedLens)) { + convertedLensIterator.remove(); + emptyLensCount++; + } + } + +// if (emptyLensCount > 0) { +// Answers.safeLogEvent( +// new CustomEvent("EmptyLensReport") +// .putCustomAttribute("Count", emptyLensCount) +// ); +// } + } + + public boolean isConvertedLensCompleted(FieldMapper lensMapper, Object convertedLens) { + return lensMapper.getFieldVal(convertedLens, "id") != null + && lensMapper.getFieldVal(convertedLens, "code") != null + && lensMapper.getFieldVal(convertedLens, "icon_link") != null + && lensMapper.getFieldVal(convertedLens, "mLensLink") != null; + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/MiscChanges.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/MiscChanges.java index 1e44cd5..d9fecf0 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/MiscChanges.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/MiscChanges.java @@ -1,304 +1,258 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.content.ClipboardManager; -import android.content.ComponentName; -import android.content.Context; -import android.content.pm.ComponentInfo; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.graphics.Typeface; -import android.text.InputFilter; -import android.text.InputType; -import android.view.ActionMode; -import android.view.Menu; -import android.view.MenuItem; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; - -import com.ljmu.andre.snaptools.Dialogs.Content.TextInputBasic; -import com.ljmu.andre.snaptools.Dialogs.DialogFactory; -import com.ljmu.andre.snaptools.Dialogs.ThemedDialog; -import com.ljmu.andre.snaptools.Dialogs.ThemedDialog.ThemedClickWrapper; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.ModulePack.Fragments.KotlinViews.ColorPickerDialogExtension; -import com.ljmu.andre.snaptools.ModulePack.Fragments.KotlinViews.FontPickerDialogExtension; -import com.ljmu.andre.snaptools.ModulePack.Fragments.MiscChangesFragment; -import com.ljmu.andre.snaptools.Utils.ContextHelper; -import com.ljmu.andre.snaptools.Utils.ResourceMapper; -import com.ljmu.andre.snaptools.Utils.ResourceUtils; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getCreateDir; -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.GsonPreferences.Preferences.putPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SNAPCHAT_CAPTION_VIEW_CLASS; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CAPTION_CREATE_HOOK; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.FONT_HOOK; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SNAPCAPTIONVIEW_CONTEXT; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.COPY_BUTTON; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.CURRENT_FONT; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.CUT_BUTTON; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FONTS_PATH; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_MULTILINE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.PASTE_BUTTON; - -/*import com.flask.colorpicker.ColorPickerView.WHEEL_TYPE; -import com.flask.colorpicker.OnColorChangedListener; -import com.flask.colorpicker.OnColorSelectedListener; -import com.flask.colorpicker.builder.ColorPickerClickListener; -import com.flask.colorpicker.builder.ColorPickerDialogBuilder;*/ - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class MiscChanges extends ModuleHelper { - public static boolean isInternalFontCall; - - public MiscChanges(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - public static Typeface createTypefaceSafe(File fontFile) { - isInternalFontCall = true; - return Typeface.createFromFile(fontFile); - } - - @Override - public FragmentHelper[] getUIFragments() { - return new FragmentHelper[]{new MiscChangesFragment()}; - } - - public static boolean isComponentEnabled(PackageManager pm, String pkgName, String clsName) { - ComponentName componentName = new ComponentName(pkgName, clsName); - int componentEnabledSetting = pm.getComponentEnabledSetting(componentName); - - switch (componentEnabledSetting) { - case PackageManager.COMPONENT_ENABLED_STATE_DISABLED: - return false; - case PackageManager.COMPONENT_ENABLED_STATE_ENABLED: - return true; - case PackageManager.COMPONENT_ENABLED_STATE_DEFAULT: - default: - // We need to get the application info to get the component's default state - try { - PackageInfo packageInfo = pm.getPackageInfo(pkgName, PackageManager.GET_ACTIVITIES - | PackageManager.GET_RECEIVERS - | PackageManager.GET_SERVICES - | PackageManager.GET_PROVIDERS - | PackageManager.GET_DISABLED_COMPONENTS); - - List components = new ArrayList<>(); - if (packageInfo.activities != null) Collections.addAll(components, packageInfo.activities); - if (packageInfo.services != null) Collections.addAll(components, packageInfo.services); - if (packageInfo.providers != null) Collections.addAll(components, packageInfo.providers); - - for (ComponentInfo componentInfo : components) { - if (componentInfo.name.equals(clsName)) { - return componentInfo.isEnabled(); - } - } - - // the component is not declared in the AndroidManifest - return false; - } catch (PackageManager.NameNotFoundException e) { - // the package isn't installed on the device - return false; - } - } - } - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - String currentFontFile = getPref(CURRENT_FONT); - - if (!currentFontFile.equals("Default")) { - hookMethod( - FONT_HOOK, - new HookWrapper((HookBefore) param -> { - if (isInternalFontCall) { - isInternalFontCall = false; - return; - } - - String fontFilename = (String) param.args[0]; - - File fontDir = getCreateDir(FONTS_PATH); - File replacementFontFile = new File(fontDir, currentFontFile); - - if (replacementFontFile.exists()) { - fontFilename = replacementFontFile.getAbsolutePath(); - Timber.d("[FONT] Font handled by hook"); - } - - param.args[0] = fontFilename; - }) - ); - } - - hookMethod( - CAPTION_CREATE_HOOK, - new HookWrapper((HookBefore) param -> { - Timber.d("Attempting to load custom menu"); - - /** - * =========================================================================== - * Recreate Snapchat's context menu - * =========================================================================== - */ - ActionMode actionMode = (ActionMode) param.args[0]; - Menu menu = (Menu) param.args[1]; - menu.clear(); - actionMode.getMenuInflater().inflate(ResourceMapper.getResId(ContextHelper.getActivity(), "caption_context_menu", "menu"), menu); - - EditText captionEditText = getObjectField(SNAPCAPTIONVIEW_CONTEXT, param.thisObject); - - int paste = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_paste"); - int cut = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_cut"); - int copy = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_copy"); - - if (getPref(COPY_BUTTON)) { - menu.findItem(copy).setVisible(true); - } - if (getPref(CUT_BUTTON)) { - menu.findItem(cut).setVisible(true); - } - //TODO: check if something is on the clipboard - ClipboardManager clipboardManager = (ClipboardManager) ContextHelper.getActivity().getSystemService(Context.CLIPBOARD_SERVICE); - if (getPref(PASTE_BUTTON)) { - if (clipboardManager != null) { - if (!clipboardManager.hasPrimaryClip()) { - menu.findItem(paste).setVisible(false); - - } else { - menu.findItem(paste).setVisible(true); - } - } else { - menu.findItem(paste).setVisible(true); - } - } - int bold = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_bold"); - int italic = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_italic"); - int underline = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_underline"); - menu.findItem(bold).setVisible(true); - menu.findItem(italic).setVisible(true); - menu.findItem(underline).setVisible(true); - - // =========================================================================== - - /** - * =========================================================================== - * Add a BG Color Picker - * =========================================================================== - */ - MenuItem bgColor = menu.add("BG Color"); - bgColor.setOnMenuItemClickListener(item -> { - Timber.d("Changing BG color"); - new ThemedDialog(ContextHelper.getActivity()) - .setTitle("Color Picker") - .setExtension( - new ColorPickerDialogExtension( - ContextHelper.getActivity(), - "primary", - captionEditText::setBackgroundColor - ) - ).show(); - - return true; - }); - bgColor.setVisible(true); - - // =========================================================================== - - /** - * =========================================================================== - * Add a Font Picker - * =========================================================================== - */ - MenuItem font = menu.add("Font"); - font.setOnMenuItemClickListener(item -> { - new ThemedDialog(ContextHelper.getActivity()) - .setTitle("Choose Font") - .setExtension( - new FontPickerDialogExtension( - ContextHelper.getActivity(), - MiscChangesFragment.getInstalledFonts(), - s -> { - Timber.d("Selected font: " + s); - putPref(CURRENT_FONT, s); - captionEditText.setTypeface(MiscChangesFragment.getTypefaceSafe(s)); - } - ) - ).show(); - - return true; - }); - font.setVisible(true); - // =========================================================================== - - /** - * =========================================================================== - * Add a Size Picker - * =========================================================================== - */ - MenuItem size = menu.add("Size"); - size.setOnMenuItemClickListener(item -> { - DialogFactory.createBasicTextInputDialog( - ContextHelper.getActivity(), - "Font Size", - "What size should the text be set to?", - null, - null, - InputType.TYPE_CLASS_NUMBER, - new ThemedClickWrapper(themedDialog -> { - String input = themedDialog.getExtension() - .getInputMessage(); - - try { - Float f = Float.parseFloat(input); - captionEditText.setTextSize(f); - themedDialog.dismiss(); - return; - } catch (Exception ignored) { - - } - - themedDialog.dismiss(); - })).show(); - - return true; - }); - size.setVisible(true); - // =========================================================================== - - param.setResult(true); - }) - ); - - - hookAllConstructors( - SNAPCHAT_CAPTION_VIEW_CLASS, - new HookWrapper((HookAfter) param -> { - EditText text = (EditText) param.thisObject; - if (getPref(FORCE_MULTILINE)) { - text.setSingleLine(false); - text.setMaxLines(500); - text.setImeOptions(EditorInfo.IME_ACTION_NONE); - text.setFilters(new InputFilter[0]); - - text.setOnLongClickListener(v -> { - text.showContextMenu(); - return false; - }); - } - }) - ); - } +package com.ljmu.andre.snaptools.ModulePack; + +import android.content.ClipboardManager; +import android.content.Context; +import android.graphics.Typeface; +import android.text.InputFilter; +import android.text.InputType; +import android.view.ActionMode; +import android.view.Menu; +import android.view.MenuItem; +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; + +import com.ljmu.andre.snaptools.Dialogs.Content.TextInputBasic; +import com.ljmu.andre.snaptools.Dialogs.DialogFactory; +import com.ljmu.andre.snaptools.Dialogs.ThemedDialog; +import com.ljmu.andre.snaptools.Dialogs.ThemedDialog.ThemedClickWrapper; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.ModulePack.Fragments.KotlinViews.ColorPickerDialogExtension; +import com.ljmu.andre.snaptools.ModulePack.Fragments.KotlinViews.FontPickerDialogExtension; +import com.ljmu.andre.snaptools.ModulePack.Fragments.MiscChangesFragment; +import com.ljmu.andre.snaptools.Utils.ContextHelper; +import com.ljmu.andre.snaptools.Utils.ResourceMapper; +import com.ljmu.andre.snaptools.Utils.ResourceUtils; + +import java.io.File; + +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getCreateDir; +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.GsonPreferences.Preferences.putPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SNAPCHAT_CAPTION_VIEW_CLASS; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CAPTION_CREATE_HOOK; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.FONT_HOOK; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SNAPCAPTIONVIEW_CONTEXT; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.COPY_BUTTON; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.CURRENT_FONT; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.CUT_BUTTON; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FONTS_PATH; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FORCE_MULTILINE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.PASTE_BUTTON; + +/*import com.flask.colorpicker.ColorPickerView.WHEEL_TYPE; +import com.flask.colorpicker.OnColorChangedListener; +import com.flask.colorpicker.OnColorSelectedListener; +import com.flask.colorpicker.builder.ColorPickerClickListener; +import com.flask.colorpicker.builder.ColorPickerDialogBuilder;*/ + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class MiscChanges extends ModuleHelper { + public static boolean isInternalFontCall; + + public MiscChanges(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + public static Typeface createTypefaceSafe(File fontFile) { + isInternalFontCall = true; + return Typeface.createFromFile(fontFile); + } + + @Override + public FragmentHelper[] getUIFragments() { + return new FragmentHelper[]{new MiscChangesFragment()}; + } + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + String currentFontFile = getPref(CURRENT_FONT); + + if (!currentFontFile.equals("Default")) { + hookMethod( + FONT_HOOK, + new HookWrapper((HookBefore) param -> { + if (isInternalFontCall) { + isInternalFontCall = false; + return; + } + + String fontFilename = (String) param.args[0]; + + File fontDir = getCreateDir(FONTS_PATH); + File replacementFontFile = new File(fontDir, currentFontFile); + + if (replacementFontFile.exists()) { + fontFilename = replacementFontFile.getAbsolutePath(); + Timber.d("[FONT] Font handled by hook"); + } + + param.args[0] = fontFilename; + }) + ); + } + + hookMethod( + CAPTION_CREATE_HOOK, + new HookWrapper((HookBefore) param -> { + Timber.d("Attempting to load custom menu"); + + /** + * =========================================================================== + * Recreate Snapchat's context menu + * =========================================================================== + */ + ActionMode actionMode = (ActionMode) param.args[0]; + Menu menu = (Menu) param.args[1]; + menu.clear(); + actionMode.getMenuInflater().inflate(ResourceMapper.getResId(ContextHelper.getActivity(), "caption_context_menu", "menu"), menu); + + EditText captionEditText = getObjectField(SNAPCAPTIONVIEW_CONTEXT, param.thisObject); + + int paste = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_paste"); + int cut = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_cut"); + int copy = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_copy"); + + if (getPref(COPY_BUTTON)) { + menu.findItem(copy).setVisible(true); + } + if (getPref(CUT_BUTTON)) { + menu.findItem(cut).setVisible(true); + } + //TODO: check if something is on the clipboard + ClipboardManager clipboardManager = (ClipboardManager) ContextHelper.getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + if (getPref(PASTE_BUTTON)) { + if (clipboardManager != null) { + if (!clipboardManager.hasPrimaryClip()) { + menu.findItem(paste).setVisible(false); + + } else { + menu.findItem(paste).setVisible(true); + } + } else { + menu.findItem(paste).setVisible(true); + } + } + int bold = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_bold"); + int italic = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_italic"); + int underline = ResourceUtils.getId(ContextHelper.getActivity(), "menu_item_underline"); + menu.findItem(bold).setVisible(true); + menu.findItem(italic).setVisible(true); + menu.findItem(underline).setVisible(true); + + // =========================================================================== + + /** + * =========================================================================== + * Add a BG Color Picker + * =========================================================================== + */ + MenuItem bgColor = menu.add("BG Color"); + bgColor.setOnMenuItemClickListener(item -> { + Timber.d("Changing BG color"); + new ThemedDialog(ContextHelper.getActivity()) + .setTitle("Color Picker") + .setExtension( + new ColorPickerDialogExtension( + ContextHelper.getActivity(), + "primary", + captionEditText::setBackgroundColor + ) + ).show(); + + return true; + }); + bgColor.setVisible(true); + + // =========================================================================== + + /** + * =========================================================================== + * Add a Font Picker + * =========================================================================== + */ + MenuItem font = menu.add("Font"); + font.setOnMenuItemClickListener(item -> { + new ThemedDialog(ContextHelper.getActivity()) + .setTitle("Choose Font") + .setExtension( + new FontPickerDialogExtension( + ContextHelper.getActivity(), + MiscChangesFragment.getInstalledFonts(), + s -> { + Timber.d("Selected font: " + s); + putPref(CURRENT_FONT, s); + captionEditText.setTypeface(MiscChangesFragment.getTypefaceSafe(s)); + } + ) + ).show(); + + return true; + }); + font.setVisible(true); + // =========================================================================== + + /** + * =========================================================================== + * Add a Size Picker + * =========================================================================== + */ + MenuItem size = menu.add("Size"); + size.setOnMenuItemClickListener(item -> { + DialogFactory.createBasicTextInputDialog( + ContextHelper.getActivity(), + "Font Size", + "What size should the text be set to?", + null, + null, + InputType.TYPE_CLASS_NUMBER, + new ThemedClickWrapper(themedDialog -> { + String input = themedDialog.getExtension() + .getInputMessage(); + + try { + Float f = Float.parseFloat(input); + captionEditText.setTextSize(f); + themedDialog.dismiss(); + return; + } catch (Exception ignored) { + + } + + themedDialog.dismiss(); + })).show(); + + return true; + }); + size.setVisible(true); + // =========================================================================== + + param.setResult(true); + }) + ); + + + hookAllConstructors( + SNAPCHAT_CAPTION_VIEW_CLASS, + new HookWrapper((HookAfter) param -> { + EditText text = (EditText) param.thisObject; + if (getPref(FORCE_MULTILINE)) { + text.setSingleLine(false); + text.setMaxLines(500); + text.setImeOptions(EditorInfo.IME_ACTION_NONE); + text.setFilters(new InputFilter[0]); + + text.setOnLongClickListener(v -> { + text.showContextMenu(); + return false; + }); + } + }) + ); + } } \ No newline at end of file diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModuleHelper.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModuleHelper.java index 2cb8d3f..9dca811 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModuleHelper.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModuleHelper.java @@ -1,199 +1,199 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import androidx.annotation.Nullable; - -import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; -import com.ljmu.andre.snaptools.Framework.Module; -import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.HookClass; -import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.Hook; -import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.HookVariable; -import com.ljmu.andre.snaptools.ModulePack.HookResolver.HookReference; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -import de.robv.android.xposed.XC_MethodHook; -import de.robv.android.xposed.XC_MethodHook.MethodHookParam; -import de.robv.android.xposed.XposedBridge; -import de.robv.android.xposed.XposedHelpers; -import timber.log.Timber; - -import static com.ljmu.andre.snaptools.Utils.UnhookManager.addUnhook; -import static de.robv.android.xposed.XposedHelpers.callMethod; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -@SuppressWarnings({"WeakerAccess", "unused"}) -public abstract class ModuleHelper extends Module { - public ModuleHelper(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - /** - * =========================================================================== - * A function to help distinguish between Constructors and Methods - * =========================================================================== - */ - void hookConstructor(Hook hook, XC_MethodHook xc_methodHook) { - hookMethod(hook, xc_methodHook); - } - - /** - * =========================================================================== - * Attempt to perform the requested hook... Mark a failure on error - * =========================================================================== - */ - void hookMethod(Hook hook, XC_MethodHook xc_methodHook) { - try { - HookReference hookReference = HookResolver.resolveHook(hook); - addUnhook( - name(), - XposedBridge.hookMethod( - hookReference.getHookMember(), - xc_methodHook - ) - ); - - moduleLoadState.success(); - } catch (HookNotFoundException e) { - Timber.e("Hook Failed: %s", e.getMessage()); - moduleLoadState.fail(); - } - } - - - /** - * =========================================================================== - * Attempt to hook all of the Constructors of a given HookClass - * =========================================================================== - */ - void hookAllConstructors(HookClass hookClass, XC_MethodHook xc_methodHook) { - try { - Class resolvedClass = HookResolver.resolveHookClass(hookClass); - addUnhook( - name(), - XposedBridge.hookAllConstructors( - resolvedClass, - xc_methodHook) - ); - - moduleLoadState.success(); - } catch (HookNotFoundException e) { - Timber.e("Hook Failed: %s", e.getMessage()); - moduleLoadState.fail(); - } - } - - /** - * =========================================================================== - * Utility method to get an object field with a generic type - * =========================================================================== - */ - @SuppressWarnings("unchecked") - T getObjectField(HookVariable hookVariable, Object obj) { - return (T) XposedHelpers.getObjectField(obj, hookVariable.getVarName()); - } - - /** - * =========================================================================== - * Utility method to get an object field with a generic type - * =========================================================================== - */ - @SuppressWarnings("unchecked") - T getObjectFieldWithType(HookVariable hookVariable, Object obj, Class type) { - Field objectField = XposedHelpers.findFirstFieldByExactType(obj.getClass(), type); - - try { - return (T) objectField.get(obj); - } catch (IllegalAccessException e) { - // should not happen - XposedBridge.log(e); - throw new IllegalAccessError(e.getMessage()); - } - } - - - /** - * =========================================================================== - * Utility method to set an object field with a hook variable - * =========================================================================== - */ - void setObjectField(HookVariable hookVariable, Object obj, Object value) { - XposedHelpers.setObjectField(obj, hookVariable.getVarName(), value); - } - - /** - * =========================================================================== - * Call a Hook's Method from the linked Obj with the supplied Params - * =========================================================================== - */ - @SuppressWarnings("unchecked") - T callHook(Hook hook, Object obj, Object... params) throws HookNotFoundException { - try { - return (T) callMethod(obj, hook.getHookMethod(), params); - } catch (Throwable e) { - throw new HookNotFoundException(e); - } - } - - /** - * =========================================================================== - * Call a Hook's Static Method with the supplied Params - * =========================================================================== - */ - @SuppressWarnings("unchecked") - T callStaticHook(Hook hook, Object... params) throws HookNotFoundException { - try { - return (T) ((Method) HookResolver.resolveHook(hook).getHookMember()).invoke(null, params); - } catch (Throwable e) { - if (e instanceof HookNotFoundException) - throw (HookNotFoundException) e; - - throw new HookNotFoundException(e); - } - } - - public interface HookBefore { - void before(MethodHookParam param) throws Throwable; - } - - public interface HookAfter { - void after(MethodHookParam param) throws Throwable; - } - - public static class HookWrapper extends ST_MethodHook { - private HookBefore hookBefore; - private HookAfter hookAfter; - - public HookWrapper(@Nullable HookBefore hookBefore, @Nullable HookAfter hookAfter) { - this.hookBefore = hookBefore; - this.hookAfter = hookAfter; - } - - public HookWrapper(HookBefore hookBefore) { - this.hookBefore = hookBefore; - } - - public HookWrapper(HookAfter hookAfter) { - this.hookAfter = hookAfter; - } - - @Override - protected void before(MethodHookParam param) throws Throwable { - if (hookBefore != null) - hookBefore.before(param); - } - - @Override - protected void after(MethodHookParam param) throws Throwable { - if (hookAfter != null) - hookAfter.after(param); - } - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import androidx.annotation.Nullable; + +import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; +import com.ljmu.andre.snaptools.Framework.Module; +import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.HookClass; +import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.Hook; +import com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.HookVariable; +import com.ljmu.andre.snaptools.ModulePack.HookResolver.HookReference; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XC_MethodHook.MethodHookParam; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; +import timber.log.Timber; + +import static com.ljmu.andre.snaptools.Utils.UnhookManager.addUnhook; +import static de.robv.android.xposed.XposedHelpers.callMethod; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +@SuppressWarnings({"WeakerAccess", "unused"}) +public abstract class ModuleHelper extends Module { + public ModuleHelper(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + /** + * =========================================================================== + * A function to help distinguish between Constructors and Methods + * =========================================================================== + */ + void hookConstructor(Hook hook, XC_MethodHook xc_methodHook) { + hookMethod(hook, xc_methodHook); + } + + /** + * =========================================================================== + * Attempt to perform the requested hook... Mark a failure on error + * =========================================================================== + */ + void hookMethod(Hook hook, XC_MethodHook xc_methodHook) { + try { + HookReference hookReference = HookResolver.resolveHook(hook); + addUnhook( + name(), + XposedBridge.hookMethod( + hookReference.getHookMember(), + xc_methodHook + ) + ); + + moduleLoadState.success(); + } catch (HookNotFoundException e) { + Timber.e("Hook Failed: %s", e.getMessage()); + moduleLoadState.fail(); + } + } + + + /** + * =========================================================================== + * Attempt to hook all of the Constructors of a given HookClass + * =========================================================================== + */ + void hookAllConstructors(HookClass hookClass, XC_MethodHook xc_methodHook) { + try { + Class resolvedClass = HookResolver.resolveHookClass(hookClass); + addUnhook( + name(), + XposedBridge.hookAllConstructors( + resolvedClass, + xc_methodHook) + ); + + moduleLoadState.success(); + } catch (HookNotFoundException e) { + Timber.e("Hook Failed: %s", e.getMessage()); + moduleLoadState.fail(); + } + } + + /** + * =========================================================================== + * Utility method to get an object field with a generic type + * =========================================================================== + */ + @SuppressWarnings("unchecked") + T getObjectField(HookVariable hookVariable, Object obj) { + return (T) XposedHelpers.getObjectField(obj, hookVariable.getVarName()); + } + + /** + * =========================================================================== + * Utility method to get an object field with a generic type + * =========================================================================== + */ + @SuppressWarnings("unchecked") + T getObjectFieldWithType(HookVariable hookVariable, Object obj, Class type) { + Field objectField = XposedHelpers.findFirstFieldByExactType(obj.getClass(), type); + + try { + return (T) objectField.get(obj); + } catch (IllegalAccessException e) { + // should not happen + XposedBridge.log(e); + throw new IllegalAccessError(e.getMessage()); + } + } + + + /** + * =========================================================================== + * Utility method to set an object field with a hook variable + * =========================================================================== + */ + void setObjectField(HookVariable hookVariable, Object obj, Object value) { + XposedHelpers.setObjectField(obj, hookVariable.getVarName(), value); + } + + /** + * =========================================================================== + * Call a Hook's Method from the linked Obj with the supplied Params + * =========================================================================== + */ + @SuppressWarnings("unchecked") + T callHook(Hook hook, Object obj, Object... params) throws HookNotFoundException { + try { + return (T) callMethod(obj, hook.getHookMethod(), params); + } catch (Throwable e) { + throw new HookNotFoundException(e); + } + } + + /** + * =========================================================================== + * Call a Hook's Static Method with the supplied Params + * =========================================================================== + */ + @SuppressWarnings("unchecked") + T callStaticHook(Hook hook, Object... params) throws HookNotFoundException { + try { + return (T) ((Method) HookResolver.resolveHook(hook).getHookMember()).invoke(null, params); + } catch (Throwable e) { + if (e instanceof HookNotFoundException) + throw (HookNotFoundException) e; + + throw new HookNotFoundException(e); + } + } + + public interface HookBefore { + void before(MethodHookParam param) throws Throwable; + } + + public interface HookAfter { + void after(MethodHookParam param) throws Throwable; + } + + public static class HookWrapper extends ST_MethodHook { + private HookBefore hookBefore; + private HookAfter hookAfter; + + public HookWrapper(@Nullable HookBefore hookBefore, @Nullable HookAfter hookAfter) { + this.hookBefore = hookBefore; + this.hookAfter = hookAfter; + } + + public HookWrapper(HookBefore hookBefore) { + this.hookBefore = hookBefore; + } + + public HookWrapper(HookAfter hookAfter) { + this.hookAfter = hookAfter; + } + + @Override + protected void before(MethodHookParam param) throws Throwable { + if (hookBefore != null) + hookBefore.before(param); + } + + @Override + protected void after(MethodHookParam param) throws Throwable { + if (hookAfter != null) + hookAfter.after(param); + } + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulePackImpl.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulePackImpl.java index 926c134..5e6aa5f 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulePackImpl.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulePackImpl.java @@ -1,204 +1,204 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.app.Activity; -import android.content.Context; -import android.util.Pair; - -import com.ljmu.andre.snaptools.Exceptions.ModulePackLoadAborted; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.Framework.MetaData.LocalPackMetaData; -import com.ljmu.andre.snaptools.Framework.Module; -import com.ljmu.andre.snaptools.Framework.ModulePack; -import com.ljmu.andre.snaptools.Framework.Utils.LoadState.State; -import com.ljmu.andre.snaptools.Framework.Utils.ModuleLoadState; -import com.ljmu.andre.snaptools.Framework.Utils.PackLoadState; -import com.ljmu.andre.snaptools.ModulePack.Caching.SnapDiskCache; -import com.ljmu.andre.snaptools.ModulePack.Fragments.GeneralSettingsFragment; -import com.ljmu.andre.snaptools.ModulePack.Fragments.KnownBugsFragment; -import com.ljmu.andre.snaptools.ModulePack.ModulesDef.Modules; -import com.ljmu.andre.snaptools.Utils.Constants; - -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getCreateDir; -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FILTERS_PATH; -import static com.ljmu.andre.snaptools.Utils.FrameworkPreferencesDef.DISABLED_MODULES; -import static com.ljmu.andre.snaptools.Utils.PreferenceHelpers.collectionContains; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -@SuppressWarnings({"unused", "WeakerAccess"}) -public class ModulePackImpl extends ModulePack { - private static final int MINIMUM_FRAMEWORK_VERSION = 110; - - public ModulePackImpl(LocalPackMetaData packMetaData, PackLoadState loadState) throws ModulePackLoadAborted { - super(packMetaData, loadState); - - checkFrameworkVersion(); - } - - private void checkFrameworkVersion() throws ModulePackLoadAborted { - if (Constants.getApkVersionCode() < MINIMUM_FRAMEWORK_VERSION) - throw new ModulePackLoadAborted("Pack requires newer APK version"); - } - - /** - * =========================================================================== - * Helper method to quickly determine if a settings UI can be expected - * =========================================================================== - */ - @Override - public boolean hasGeneralSettingsUI() { - return true; - } - - /** - * =========================================================================== - * Pull the Settings UI for this Pack - * =========================================================================== - */ - @Override - public FragmentHelper[] getStaticFragments() { - GeneralSettingsFragment settingsFragment = new GeneralSettingsFragment(); - settingsFragment.setPackName(getPackName()); - - for (Modules moduleData : ModulesDef.INST.values()) { - if (moduleData.canBeDisabled()) { - settingsFragment.addDisplayHolder( - Pair.create( - moduleData.getModuleName(), - moduleData.getDescription() - ) - ); - } - } - - return new FragmentHelper[]{settingsFragment, new KnownBugsFragment().buildMetaData(this)}; } - - /** - * =========================================================================== - * Attempt to load the contained Modules - * =========================================================================== - */ - @Override - public Map loadModules() { - getCreateDir(FILTERS_PATH); - - Map moduleLoadStates = new LinkedHashMap<>(); - HashSet disabledModules = getPref(DISABLED_MODULES); - - for (Modules moduleData : ModulesDef.INST.values()) { - ModuleLoadState loadState = new ModuleLoadState(moduleData.getModuleName()); - moduleLoadStates.put(loadState.getName(), loadState); - - // Check if module should be skipped \\ - if (moduleData.canBeDisabled() && - collectionContains( - DISABLED_MODULES, - moduleData.getModuleName() - )) { - loadState.setState(State.SKIPPED); - continue; - } - - // =========================================================================== - - try { - Class moduleClass = moduleData.getModuleClass(); - Constructor constructor = moduleClass.getConstructor(String.class, boolean.class); - Module module = constructor.newInstance(moduleData.getModuleName(), moduleData.canBeDisabled()); - modules.add(module); - - loadState.setState(State.SUCCESS); - } catch (Throwable e) { - Timber.e(e, "Failed loading module: " - + moduleData.getClassName()); - loadState.setState(State.FAILED); - } - } - - hasLoaded = true; - - return moduleLoadStates; - } - - @Override - public List injectAllHooks(ClassLoader snapClassLoader, Context snapContext) { - if (!hasLoaded) - throw new IllegalStateException("Module Pack not loaded!"); - - if (hasInjected) { - Timber.d("Tried to re-inject all hooks"); - return null; - } - - SnapDiskCache.getInstance().destroyTempDir(); - - List hookResults = new ArrayList<>(); - Map moduleLoadStateMap = getPackLoadState().getModuleLoadStates(); - - for (ModuleLoadState moduleLoadState : moduleLoadStateMap.values()) { - hookResults.add(moduleLoadState); - - if (moduleLoadState.getState() != State.SUCCESS) - continue; - - Module module = getModule(moduleLoadState.getName()); - if (module == null) { - moduleLoadState.setState(State.FAILED); - continue; - } - - try { - module.injectHooks(snapClassLoader, snapContext, moduleLoadState); - } catch (Throwable t) { - Timber.e(t); - moduleLoadState.fail(); - } - } - - packLoadState.refreshPackLoadState(); - - hasInjected = true; - return hookResults; - } - - @Override - public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { - Map moduleLoadStateMap = getPackLoadState().getModuleLoadStates(); - - for (ModuleLoadState state : moduleLoadStateMap.values()) { - if (state.getState() != State.SUCCESS) - continue; - - Module module = getModule(state.getName()); - if (module == null) { - state.setState(State.FAILED); - continue; - } - - try { - module.prepareActivity(snapClassLoader, snapActivity); - } catch (Throwable t) { - Timber.e(t); - state.fail(); - } - } - } - - @Override - public String isPremiumCheck() { - return "A SnapTools Pack"; - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.app.Activity; +import android.content.Context; +import android.util.Pair; + +import com.ljmu.andre.snaptools.Exceptions.ModulePackLoadAborted; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.Framework.MetaData.LocalPackMetaData; +import com.ljmu.andre.snaptools.Framework.Module; +import com.ljmu.andre.snaptools.Framework.ModulePack; +import com.ljmu.andre.snaptools.Framework.Utils.LoadState.State; +import com.ljmu.andre.snaptools.Framework.Utils.ModuleLoadState; +import com.ljmu.andre.snaptools.Framework.Utils.PackLoadState; +import com.ljmu.andre.snaptools.ModulePack.Caching.SnapDiskCache; +import com.ljmu.andre.snaptools.ModulePack.Fragments.GeneralSettingsFragment; +import com.ljmu.andre.snaptools.ModulePack.Fragments.KnownBugsFragment; +import com.ljmu.andre.snaptools.ModulePack.ModulesDef.Modules; +import com.ljmu.andre.snaptools.Utils.Constants; + +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getCreateDir; +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.FILTERS_PATH; +import static com.ljmu.andre.snaptools.Utils.FrameworkPreferencesDef.DISABLED_MODULES; +import static com.ljmu.andre.snaptools.Utils.PreferenceHelpers.collectionContains; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +@SuppressWarnings({"unused", "WeakerAccess"}) +public class ModulePackImpl extends ModulePack { + private static final int MINIMUM_FRAMEWORK_VERSION = 110; + + public ModulePackImpl(LocalPackMetaData packMetaData, PackLoadState loadState) throws ModulePackLoadAborted { + super(packMetaData, loadState); + + checkFrameworkVersion(); + } + + private void checkFrameworkVersion() throws ModulePackLoadAborted { + if (Constants.getApkVersionCode() < MINIMUM_FRAMEWORK_VERSION) + throw new ModulePackLoadAborted("Pack requires newer APK version"); + } + + /** + * =========================================================================== + * Helper method to quickly determine if a settings UI can be expected + * =========================================================================== + */ + @Override + public boolean hasGeneralSettingsUI() { + return true; + } + + /** + * =========================================================================== + * Pull the Settings UI for this Pack + * =========================================================================== + */ + @Override + public FragmentHelper[] getStaticFragments() { + GeneralSettingsFragment settingsFragment = new GeneralSettingsFragment(); + settingsFragment.setPackName(getPackName()); + + for (Modules moduleData : ModulesDef.INST.values()) { + if (moduleData.canBeDisabled()) { + settingsFragment.addDisplayHolder( + Pair.create( + moduleData.getModuleName(), + moduleData.getDescription() + ) + ); + } + } + + return new FragmentHelper[]{settingsFragment, new KnownBugsFragment().buildMetaData(this)}; } + + /** + * =========================================================================== + * Attempt to load the contained Modules + * =========================================================================== + */ + @Override + public Map loadModules() { + getCreateDir(FILTERS_PATH); + + Map moduleLoadStates = new LinkedHashMap<>(); + HashSet disabledModules = getPref(DISABLED_MODULES); + + for (Modules moduleData : ModulesDef.INST.values()) { + ModuleLoadState loadState = new ModuleLoadState(moduleData.getModuleName()); + moduleLoadStates.put(loadState.getName(), loadState); + + // Check if module should be skipped \\ + if (moduleData.canBeDisabled() && + collectionContains( + DISABLED_MODULES, + moduleData.getModuleName() + )) { + loadState.setState(State.SKIPPED); + continue; + } + + // =========================================================================== + + try { + Class moduleClass = moduleData.getModuleClass(); + Constructor constructor = moduleClass.getConstructor(String.class, boolean.class); + Module module = constructor.newInstance(moduleData.getModuleName(), moduleData.canBeDisabled()); + modules.add(module); + + loadState.setState(State.SUCCESS); + } catch (Throwable e) { + Timber.e(e, "Failed loading module: " + + moduleData.getClassName()); + loadState.setState(State.FAILED); + } + } + + hasLoaded = true; + + return moduleLoadStates; + } + + @Override + public List injectAllHooks(ClassLoader snapClassLoader, Context snapContext) { + if (!hasLoaded) + throw new IllegalStateException("Module Pack not loaded!"); + + if (hasInjected) { + Timber.d("Tried to re-inject all hooks"); + return null; + } + + SnapDiskCache.getInstance().destroyTempDir(); + + List hookResults = new ArrayList<>(); + Map moduleLoadStateMap = getPackLoadState().getModuleLoadStates(); + + for (ModuleLoadState moduleLoadState : moduleLoadStateMap.values()) { + hookResults.add(moduleLoadState); + + if (moduleLoadState.getState() != State.SUCCESS) + continue; + + Module module = getModule(moduleLoadState.getName()); + if (module == null) { + moduleLoadState.setState(State.FAILED); + continue; + } + + try { + module.injectHooks(snapClassLoader, snapContext, moduleLoadState); + } catch (Throwable t) { + Timber.e(t); + moduleLoadState.fail(); + } + } + + packLoadState.refreshPackLoadState(); + + hasInjected = true; + return hookResults; + } + + @Override + public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { + Map moduleLoadStateMap = getPackLoadState().getModuleLoadStates(); + + for (ModuleLoadState state : moduleLoadStateMap.values()) { + if (state.getState() != State.SUCCESS) + continue; + + Module module = getModule(state.getName()); + if (module == null) { + state.setState(State.FAILED); + continue; + } + + try { + module.prepareActivity(snapClassLoader, snapActivity); + } catch (Throwable t) { + Timber.e(t); + state.fail(); + } + } + } + + @Override + public String isPremiumCheck() { + return "A SnapTools Pack"; + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulesDef.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulesDef.java index 5b1dd1e..d7f4559 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulesDef.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulesDef.java @@ -1,177 +1,172 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import com.ljmu.andre.ConstantDefiner.Constant; -import com.ljmu.andre.ConstantDefiner.ConstantDefiner; -import com.ljmu.andre.snaptools.Framework.Module; -import com.ljmu.andre.snaptools.ModulePack.ModulesDef.Modules; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -@SuppressWarnings("unused") -class ModulesDef extends ConstantDefiner { - public static final ModulesDef INST = new ModulesDef(); - - public static final Modules HOOK_RESOLVER = new Modules( - 1, - "Hook Resolver", - HookResolver.class, - false - ); - - // =========================================================================== - - public static final Modules SAVING = new Modules( - 2, - "Saving", - Saving.class, - "Responsible for handling the saving of media\nSupported Media:\n\tStory/Received Videos and Images\n\tChat Images and Videos" - ); - - // =========================================================================== - - public static final Modules LENS_COLLECTOR = new Modules( - 3, - "Lens Collector", - LensCollector.class, - "Collects your daily Lenses so that you can choose to enable/disable whichever lenses you desire" - ); - - // =========================================================================== - - public static final Modules CHAT_MANAGER = new Modules( - 4, - "Chat Manager", - ChatSaving.class, - "Collects all chat messages and allows you to re-read them within the SnapTools app. Also provides the option to automatically save messages within Snapchat" - ); - - // =========================================================================== - - public static final Modules MISC_CHANGES = new Modules( - 5, - "Misc Changes", - MiscChanges.class, - "A collection of small changes that provide small benefits:\n\t- Enable torch/flash on front facing camera\n\t- Multiline Captions" - ); - - // =========================================================================== - - public static final Modules REMOVE_SNAP_TIMER = new Modules( - 6, - "Remove Snap Timer", - RemoveSnapTimer.class, - "Removes the timer on all snaps. Used mainly when unlimited viewing is enabled" - ); - - // =========================================================================== - - public static final Modules SCREENSHOT_BYPASS = new Modules( - 7, - "Screenshot Bypass", - ScreenshotBypass.class, - "Block screenshot notifications being sent to the recipient" - ); - - // =========================================================================== - - public static final Modules STORY_BLOCKER = new Modules( - 8, - "Story Blocker", - StoryBlocker.class, - "Blocks advertising within Snapchat, and allows the ability to block specific users' stories" - ); - - // =========================================================================== - - public static final Modules UNLIMITED_VIEWING = new Modules( - 9, - "Unlimited Viewing", - UnlimitedViewing.class, - "Removes the time limit when viewing snaps" - ); - - // =========================================================================== - - public static final Modules SHARING = new Modules( - 10, - "Sharing", - Sharing.class, - "Convert images shared to Snapchat into snaps that can be added to your story as opposed to chat media" - ); - - // =========================================================================== - -// public static final Modules CUSTOM_FILTERS = new Modules( -// 11, -// "Custom Filters", -// CustomFilters.class, -// "Allows for custom images and a Now Playing filter to be loaded alongside Snapchat filters" -// ); - - // =========================================================================== - - public static final Modules STEALTH_VIEWING = new Modules( - 12, - "Stealth Viewing", - StealthViewing.class, - "Allows you to view chats and snaps without marking them as viewed" - ); - - public static final Modules ACCOUNT_MANAGER = new Modules( - 13, - "Account Manager", - AccountManager.class, - "Allows for safely and securely swapping between Snapchat accounts, along with other account management features" - ); - - // =========================================================================== - - public static final Modules FORCED_HOOKS = new Modules( - 14, - "Forced Hooks", - ForcedHooks.class, - false - ); - - // =========================================================================== - - public static class Modules extends Constant { - private final Class moduleClass; - private final boolean canBeDisabled; - private String description; - - Modules(int index, String moduleName, Class moduleClass, String description) { - this(index, moduleName, moduleClass, true); - this.description = description; - } - - Modules(int index, String moduleName, Class moduleClass, boolean canBeDisabled) { - super(index, moduleName); - this.moduleClass = moduleClass; - this.canBeDisabled = canBeDisabled; - } - - public Class getModuleClass() { - return moduleClass; - } - - public String getClassName() { - return moduleClass.getSimpleName(); - } - - public String getModuleName() { - return getName(); - } - - public String getDescription() { - return description; - } - - public boolean canBeDisabled() { - return canBeDisabled; - } - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import com.ljmu.andre.ConstantDefiner.Constant; +import com.ljmu.andre.ConstantDefiner.ConstantDefiner; +import com.ljmu.andre.snaptools.Framework.Module; +import com.ljmu.andre.snaptools.ModulePack.ModulesDef.Modules; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +@SuppressWarnings("unused") +class ModulesDef extends ConstantDefiner { + public static final ModulesDef INST = new ModulesDef(); + + public static final Modules HOOK_RESOLVER = new Modules( + 1, + "Hook Resolver", + HookResolver.class, + false + ); + + // =========================================================================== + + public static final Modules SAVING = new Modules( + 2, + "Saving", + Saving.class, + "Responsible for handling the saving of media\nSupported Media:\n\tStory/Received Videos and Images\n\tChat Images and Videos" + ); + + // =========================================================================== + + public static final Modules LENS_COLLECTOR = new Modules( + 3, + "Lens Collector", + LensCollector.class, + "Collects your daily Lenses so that you can choose to enable/disable whichever lenses you desire" + ); + + // =========================================================================== + + public static final Modules CHAT_MANAGER = new Modules( + 4, + "Chat Manager", + ChatSaving.class, + "Collects all chat messages and allows you to re-read them within the SnapTools app. Also provides the option to automatically save messages within Snapchat" + ); + + // =========================================================================== + + public static final Modules MISC_CHANGES = new Modules( + 5, + "Misc Changes", + MiscChanges.class, + "A collection of small changes that provide small benefits:\n\t- Enable torch/flash on front facing camera\n\t- Multiline Captions" + ); + + // =========================================================================== + + public static final Modules REMOVE_SNAP_TIMER = new Modules( + 6, + "Remove Snap Timer", + RemoveSnapTimer.class, + "Removes the timer on all snaps. Used mainly when unlimited viewing is enabled" + ); + + // =========================================================================== + + public static final Modules SCREENSHOT_BYPASS = new Modules( + 7, + "Screenshot Bypass", + ScreenshotBypass.class, + "Block screenshot notifications being sent to the recipient" + ); + + // =========================================================================== + + public static final Modules STORY_BLOCKER = new Modules( + 8, + "Story Blocker", + StoryBlocker.class, + "Blocks advertising within Snapchat, and allows the ability to block specific users' stories" + ); + + // =========================================================================== + + public static final Modules UNLIMITED_VIEWING = new Modules( + 9, + "Unlimited Viewing", + UnlimitedViewing.class, + "Removes the time limit when viewing snaps" + ); + + // =========================================================================== + + public static final Modules SHARING = new Modules( + 10, + "Sharing", + Sharing.class, + "Convert images shared to Snapchat into snaps that can be added to your story as opposed to chat media" + ); + + // =========================================================================== + +// public static final Modules CUSTOM_FILTERS = new Modules( +// 11, +// "Custom Filters", +// CustomFilters.class, +// "Allows for custom images and a Now Playing filter to be loaded alongside Snapchat filters" +// ); + + // =========================================================================== + + public static final Modules STEALTH_VIEWING = new Modules( + 12, + "Stealth Viewing", + StealthViewing.class, + "Allows you to view chats and snaps without marking them as viewed" + ); + + // =========================================================================== + + // =========================================================================== + + public static final Modules FORCED_HOOKS = new Modules( + 13, + "Forced Hooks", + ForcedHooks.class, + false + ); + + // =========================================================================== + + public static class Modules extends Constant { + private final Class moduleClass; + private final boolean canBeDisabled; + private String description; + + Modules(int index, String moduleName, Class moduleClass, String description) { + this(index, moduleName, moduleClass, true); + this.description = description; + } + + Modules(int index, String moduleName, Class moduleClass, boolean canBeDisabled) { + super(index, moduleName); + this.moduleClass = moduleClass; + this.canBeDisabled = canBeDisabled; + } + + public Class getModuleClass() { + return moduleClass; + } + + public String getClassName() { + return moduleClass.getSimpleName(); + } + + public String getModuleName() { + return getName(); + } + + public String getDescription() { + return description; + } + + public boolean canBeDisabled() { + return canBeDisabled; + } + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/RemoveSnapTimer.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/RemoveSnapTimer.java index b4b6edc..7b06275 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/RemoveSnapTimer.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/RemoveSnapTimer.java @@ -1,54 +1,54 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.content.Context; - -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; - -import de.robv.android.xposed.XC_MethodReplacement; - -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.COUNTDOWNTIMER_VIEW_ONDRAW; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.NEW_CONCENTRIC_TIMERVIEW_ONDRAW; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class RemoveSnapTimer extends ModuleHelper { - public RemoveSnapTimer(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - @Override - public FragmentHelper[] getUIFragments() { - return null; - } - - // =========================================================================== - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - // Removed within snapchat =================================================== -// hookMethod( -// SNAPTIMERVIEW_ONDRAW, -// XC_MethodReplacement.DO_NOTHING -// ); -// -// hookMethod( -// CONCENTRIC_TIMERVIEW_ONDRAW, -// XC_MethodReplacement.DO_NOTHING -// ); - - hookMethod( - NEW_CONCENTRIC_TIMERVIEW_ONDRAW, - XC_MethodReplacement.DO_NOTHING - ); - - hookMethod( - COUNTDOWNTIMER_VIEW_ONDRAW, - XC_MethodReplacement.DO_NOTHING - ); - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.content.Context; + +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; + +import de.robv.android.xposed.XC_MethodReplacement; + +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.COUNTDOWNTIMER_VIEW_ONDRAW; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.NEW_CONCENTRIC_TIMERVIEW_ONDRAW; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class RemoveSnapTimer extends ModuleHelper { + public RemoveSnapTimer(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + @Override + public FragmentHelper[] getUIFragments() { + return null; + } + + // =========================================================================== + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + // Removed within snapchat =================================================== +// hookMethod( +// SNAPTIMERVIEW_ONDRAW, +// XC_MethodReplacement.DO_NOTHING +// ); +// +// hookMethod( +// CONCENTRIC_TIMERVIEW_ONDRAW, +// XC_MethodReplacement.DO_NOTHING +// ); + + hookMethod( + NEW_CONCENTRIC_TIMERVIEW_ONDRAW, + XC_MethodReplacement.DO_NOTHING + ); + + hookMethod( + COUNTDOWNTIMER_VIEW_ONDRAW, + XC_MethodReplacement.DO_NOTHING + ); + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/Saving.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/Saving.java index 457cb9b..126038f 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/Saving.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/Saving.java @@ -1,888 +1,866 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.app.Activity; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Bitmap.CompressFormat; -import android.net.Uri; -import androidx.annotation.Nullable; -import android.widget.FrameLayout; -import android.widget.Toast; - -import com.google.common.io.ByteStreams; -import com.google.common.io.Closer; -import com.google.common.io.Files; -import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.ModulePack.Fragments.SavingSettingsFragment; -import com.ljmu.andre.snaptools.ModulePack.Notifications.SaveNotification; -import com.ljmu.andre.snaptools.ModulePack.Notifications.SaveNotification.ToastType; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.SaveTriggerManager; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.ChatImageSnap; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.ChatVideoSnap; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.GroupSnap; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.ReceivedSnap; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.SentSnap; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.Snap; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.Snap.Builder; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.Snap.SaveState; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.Snap.SnapTypeDef; -import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.StorySnap; -import com.ljmu.andre.snaptools.ModulePack.Utils.SavingLayout; -import com.ljmu.andre.snaptools.ModulePack.Utils.SavingViewPool; -import com.ljmu.andre.snaptools.Utils.ContextHelper; -import com.ljmu.andre.snaptools.Utils.CustomObservers.ErrorObserver; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.UUID; -import java.util.concurrent.Callable; - -import de.robv.android.xposed.XposedHelpers; -import io.reactivex.Observable; -import io.reactivex.schedulers.Schedulers; -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getCreateDir; -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.RECEIVED_SNAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SENT_IMAGE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SENT_VIDEO; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_IMAGE_GET_ALGORITHM; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_VIDEO_GET_ALGORITHM; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_VIDEO_PATH; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CONSTRUCTOR_OPERA_PAGE_VIEW; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.DIRECT_GET_ALGORITHM; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.ENCRYPTION_ALGORITHM_STREAM; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_USERNAME; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GROUP_ALGORITHM_UNWRAPPED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GROUP_GET_ALGORITHM; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.OPENED_SNAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SENT_BATCHED_SNAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SENT_SNAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_GET_MEDIA_TYPE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_GET_TIMESTAMP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_GET_USERNAME; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_DISPLAYED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_GET_ALGORITHM; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_BUILDER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_GET_OBJECT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_INSERT_OBJECT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STREAM_TYPE_CHECK_BYPASS; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.DIVISION_FIX; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.CHAT_METADATA_MEDIA; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.GROUP_ALGORITHM_WRAPPER_FIELD; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_BATCHED_VIDEO_MEDIAHOLDER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_MEDIA_BATCH_DATA; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_MEDIA_BITMAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_MEDIA_TIMESTAMP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_MEDIA_VIDEO_URI; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SNAP_IS_ZIPPED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_ADVANCER_DISPLAY_STATE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_ADVANCER_METADATA; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STREAM_TYPE_CHECK_BOOLEAN; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.SAVE_SENT_SNAPS; -import static com.ljmu.andre.snaptools.Utils.FrameworkPreferencesDef.TEMP_PATH; -import static com.ljmu.andre.snaptools.Utils.XposedUtils.logEntireClass; -import static de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField; -import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -@SuppressWarnings("WeakerAccess") -public class Saving extends ModuleHelper { - private static final String KEY_HEADER = "SNAP_KEY"; - public static boolean hasLoadedHooks; - private static String yourUsername = ""; - - public Saving(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - @Override - public FragmentHelper[] getUIFragments() { - return new FragmentHelper[]{ - new SavingSettingsFragment() - }; - } - - // =========================================================================== - - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - SaveTriggerManager.init(); - - /** - * =========================================================================== - * Hook to inject the manual saving layout - * =========================================================================== - */ - hookConstructor( - CONSTRUCTOR_OPERA_PAGE_VIEW, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - try { - FrameLayout operaLayout = (FrameLayout) param.thisObject; - SavingLayout savingLayout = SavingViewPool.requestLayout(ContextHelper.getActivity()); - - operaLayout.addView(savingLayout); - } catch (Throwable t) { - Timber.e(t); - } - } - } - ); - - /** - * =========================================================================== - * Bypasses type checking on encrypted streams - * This would cause a duplicate stream to become corrupt so cannot happen - * =========================================================================== - */ - hookMethod( - STREAM_TYPE_CHECK_BYPASS, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - setObjectField(STREAM_TYPE_CHECK_BOOLEAN, param.thisObject, false); - } - } - ); - - /** - * =========================================================================== - * New Sent Snap Detected -> Determine the type and extract the media - * =========================================================================== - */ - if (getPref(SAVE_SENT_SNAPS)) { - hookMethod( - SENT_BATCHED_SNAP, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Timber.i("Splitting process"); - - Object mediaHolder = getObjectField(SENT_BATCHED_VIDEO_MEDIAHOLDER, param.thisObject); - - Observable.fromCallable(new Callable() { - @Override - public Object call() throws Exception { - Uri videoUri = getObjectField(SENT_MEDIA_VIDEO_URI, mediaHolder); - Timber.i("Handling splitting media"); - String videoPath = videoUri.getPath().replaceFirst("file:", ""); - File sourceMedia = new File(videoPath); - - if (!sourceMedia.exists() && !sourceMedia.createNewFile()) - Timber.w("Source tracked video doesn't exist and couldn't be created"); - - File tempDir = getCreateDir(TEMP_PATH); - File targetMedia = new File(tempDir, "Batched_Sent_Snap.mp4"); - - Files.copy(sourceMedia, targetMedia); - Timber.d("Copied batch file successfully"); - return new Object(); - } - }).subscribeOn(Schedulers.computation()) - .subscribe(new ErrorObserver<>("Error duplicating sent batch")); - - //Files.copy(file); - } - } - ); - - hookMethod( - SENT_SNAP, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Object media = param.args[0]; - - SentSnap sentSnap = null; - - try { - Class sentImage = HookResolver.resolveHookClass(SENT_IMAGE); - Class sentVideo = HookResolver.resolveHookClass(SENT_VIDEO); - - if (media.getClass().equals(sentImage)) - sentSnap = handleSentSnap(ContextHelper.getActivity(), media, false); - else if (media.getClass().equals(sentVideo)) - sentSnap = handleSentSnap(ContextHelper.getActivity(), media, true); - else { - Timber.e("Unhandled Sent Snap Type: %s", media.getClass()); - } - } catch (Throwable t) { - Timber.e(t); - } - - SaveNotification.show( - ContextHelper.getActivity(), - sentSnap != null ? SaveNotification.ToastType.GOOD : SaveNotification.ToastType.BAD, - Toast.LENGTH_LONG, - sentSnap - ); - } - } - ); - } - - - /** - * =========================================================================== - * Story Snap Algorithm Injection - * =========================================================================== - */ - hookMethod( - STORY_GET_ALGORITHM, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - if (param.getResult() == null) { - Timber.w("Null Story Snap Algorithm"); - return; - } - - //Timber.d("Got original algorithm: " + param.thisObject.toString()); - //logStackTrace(); - - String key = getOrCreateKey(param.thisObject); - boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, param.thisObject); - boolean isZipped = getObjectField(SNAP_IS_ZIPPED, param.thisObject); - String fileExtension = isVideo ? ".mp4" : ".jpg"; - - Long timestamp = callHook(SNAP_GET_TIMESTAMP, param.thisObject); - String username = callHook(SNAP_GET_USERNAME, param.thisObject); - - if (username != null && username.equals(yourUsername)) { - Timber.i("Viewing your own story"); - return; - } - - // Build the snap ============================================================ - new Builder() - .setContext(ContextHelper.getActivity()) - .setKey(key) - .setUsername(username) - .setDateTime(timestamp) - .setSnapType(SnapTypeDef.STORY) - .setFileExtension(fileExtension) - .setIsZipped(isZipped) - .build(StorySnap.class) - // Signal the snap that it's retrieving the algorithm ======================== - .providingAlgorithm(); - - setAdditionalInstanceField(param.getResult(), KEY_HEADER, key); - } - } - ); - - /** - * =========================================================================== - * Direct Snap Algorithm Injection - * =========================================================================== - */ - hookMethod( - DIRECT_GET_ALGORITHM, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - if (param.getResult() == null) { - Timber.w("Null Direct Snap Algorithm"); - return; - } - - Timber.d("EncryptionHolder: " + param.getResult()); - - Object snapMetaData = param.args[0]; - String key = getOrCreateKey(snapMetaData); - boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, snapMetaData); - boolean isZipped = getObjectField(SNAP_IS_ZIPPED, snapMetaData); - String fileExtension = isVideo ? ".mp4" : ".jpg"; - - Long timestamp = callHook(SNAP_GET_TIMESTAMP, snapMetaData); - String username = callHook(SNAP_GET_USERNAME, snapMetaData); - - new Builder() - .setContext(ContextHelper.getActivity()) - .setKey(key) - .setUsername(username) - .setDateTime(timestamp) - .setSnapType(SnapTypeDef.RECEIVED) - .setFileExtension(fileExtension) - .setIsZipped(isZipped) - .build(ReceivedSnap.class); - - Object encryptionHolder = param.getResult(); - Object encryptor = XposedHelpers.getObjectField(encryptionHolder, "c"); - setAdditionalInstanceField(encryptor, KEY_HEADER, key); - } - } - ); - - /** - * =========================================================================== - * Chat Image Algorithm Injection - * =========================================================================== - */ - hookMethod( - CHAT_IMAGE_GET_ALGORITHM, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - if (param.getResult() == null) { - Timber.w("Null Chat Video Algorithm"); - return; - } - - Object chatMetaData = param.args[0]; - - if (chatMetaData == null) { - Timber.w("Null ChatMetaData"); - return; - } - - String key = getOrCreateKey(chatMetaData); - boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, chatMetaData); - - setAdditionalInstanceField(param.getResult(), KEY_HEADER, key); - - // If it's a video, don't overwrite the existing stored data ================= - if (isVideo) - return; - - Long timestamp = callHook(SNAP_GET_TIMESTAMP, chatMetaData); - String username = callHook(SNAP_GET_USERNAME, chatMetaData); - - new Snap.Builder() - .setContext(ContextHelper.getActivity()) - .setKey(key) - .setUsername(username) - .setDateTime(timestamp) - .setSnapType(SnapTypeDef.CHAT) - .setFileExtension(".jpg") - .build(ChatImageSnap.class); - } - } - ); - - /** - * =========================================================================== - * Chat Video Algorithm Injection - * =========================================================================== - */ - hookMethod( - CHAT_VIDEO_GET_ALGORITHM, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Object chatMetaData = getObjectField(CHAT_METADATA_MEDIA, param.thisObject); - - if (chatMetaData == null) { - Timber.w("Null ChatMetaData"); - return; - } - - Uri videoPath = callHook(CHAT_VIDEO_PATH, chatMetaData); - - String key = getOrCreateKey(chatMetaData); - - Long timestamp = callHook(SNAP_GET_TIMESTAMP, chatMetaData); - String username = callHook(SNAP_GET_USERNAME, chatMetaData); - - ChatVideoSnap snap = new ChatVideoSnap.Builder() - .setVideoPath(videoPath) - .setContext(ContextHelper.getActivity()) - .setKey(key) - .setUsername(username) - .setDateTime(timestamp) - .setSnapType(SnapTypeDef.CHAT) - .setFileExtension(".mp4") - .build(); - - snap.providingAlgorithm(); - } - } - ); - - /** - * =========================================================================== - * Group Snap Algorithm Injection - * =========================================================================== - */ - hookMethod( - GROUP_GET_ALGORITHM, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - if (param.getResult() == null) { - Timber.w("Null Group Snap Algorithm"); - return; - } - - Object groupMetaData = param.args[0]; - - if (groupMetaData == null) { - Timber.w("Null GroupMetaData"); - return; - } - - Class receivedSnapClass = HookResolver.resolveHookClass(RECEIVED_SNAP); - - if (groupMetaData.getClass() == receivedSnapClass) { - Timber.i("Tried to process received snap in group handler"); - return; - } - - String key = getOrCreateKey(groupMetaData); - boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, groupMetaData); - String fileExtension = isVideo ? ".mp4" : ".jpg"; - - Object encryptionWrapper; - if (isVideo) - encryptionWrapper = callHook(GROUP_ALGORITHM_UNWRAPPED, param.getResult(), "video_first_frame_media_info"); - else - encryptionWrapper = callHook(GROUP_ALGORITHM_UNWRAPPED, param.getResult(), "image_media_info"); - - Long timestamp = callHook(SNAP_GET_TIMESTAMP, groupMetaData); - String username = callHook(SNAP_GET_USERNAME, groupMetaData); - - new Builder() - .setContext(ContextHelper.getActivity()) - .setKey(key) - .setUsername(username) - .setDateTime(timestamp) - .setSnapType(SnapTypeDef.GROUP) - .setFileExtension(fileExtension) - .build(GroupSnap.class); - - setAdditionalInstanceField(getObjectField(GROUP_ALGORITHM_WRAPPER_FIELD, encryptionWrapper), KEY_HEADER, key); - } - } - ); - - /** - * =========================================================================== - * Encryption Algorithm Stream Wrapper - * =========================================================================== - */ - hookMethod( - ENCRYPTION_ALGORITHM_STREAM, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - String key = (String) getAdditionalInstanceField(param.thisObject, KEY_HEADER); - - if (key == null) { - return; - } - - Snap snap = Snap.getSnapFromCache(key); - - if (snap != null) { - InputStream inputStream = (InputStream) param.getResult(); - Timber.d("InputStream: " + inputStream); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - try { - ByteStreams.copy(inputStream, outputStream); - } catch (IOException e) { - Timber.e(e); - } - - ByteArrayInputStream copiedInputStream = new ByteArrayInputStream(outputStream.toByteArray()); - param.setResult(copiedInputStream); - - SaveState saveState = snap.copyStream(outputStream); - - Timber.d("Stream Save State: " + saveState); - - if (saveState == null) { - Timber.d("Null savestate... Ignoring"); - return; - } - - ToastType toastType; - - switch (saveState) { - case NOT_READY: - Timber.i("Snap not ready"); - return; - case EXISTING: - toastType = SaveNotification.ToastType.WARNING; - break; - case FAILED: - toastType = SaveNotification.ToastType.BAD; - break; - case SUCCESS: - toastType = SaveNotification.ToastType.GOOD; - break; - default: - Timber.e("Unhandled Save State: " + saveState); - return; - } - - SaveNotification.show( - ContextHelper.getActivity(), - toastType, - Toast.LENGTH_LONG, - snap - ); - } - } - } - ); - - /** - * =========================================================================== - * Force Stories to contain their matched MetaData - * =========================================================================== - */ - hookMethod( - STORY_METADATA_BUILDER, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Object storyMetadata = param.getResult(); - callHook(STORY_METADATA_INSERT_OBJECT, storyMetadata, "STORY_REPLY_SNAP", param.args[0]); - } - } - ); - - /** - * =========================================================================== - * Story Viewed -> Grab MetaData and draw the frame to a bitmap to save - * =========================================================================== - */ - hookMethod( - STORY_DISPLAYED, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Object displayState = getObjectField(STORY_ADVANCER_DISPLAY_STATE, param.thisObject); - - if (displayState == null || !displayState.toString().equals("FULLY_DISPLAYED")) - return; - - Object snapMetaData = getObjectField(STORY_ADVANCER_METADATA, param.thisObject); - - Object storySnap = callHook(STORY_METADATA_GET_OBJECT, snapMetaData, "STORY_REPLY_SNAP"); - - if (storySnap == null) { - Timber.d("StorySnap null: Probably not a normal story"); - return; - } - - String username = callHook(SNAP_GET_USERNAME, storySnap); - - if (username != null && username.equals(yourUsername)) { - Timber.i("Your story displayed"); - return; - } - - String key = getOrCreateKey(storySnap); - Snap snap = Snap.getSnapFromCache(key); - - if (snap == null) { - Timber.e("Null Snap from Cache"); - SaveNotification.show( - ContextHelper.getActivity(), - SaveNotification.ToastType.BAD, - Toast.LENGTH_LONG - ); - return; - } - - SaveState saveState = snap.finalDisplayEvent(); - - Timber.d("Stream Save State: " + saveState); - - if (saveState == null) { - Timber.d("Null savestate... Ignoring"); - return; - } - - ToastType toastType; - - switch (saveState) { - case NOT_READY: - Timber.i("Snap not ready"); - return; - case EXISTING: - toastType = SaveNotification.ToastType.WARNING; - break; - case FAILED: - toastType = SaveNotification.ToastType.BAD; - break; - case SUCCESS: - toastType = SaveNotification.ToastType.GOOD; - break; - default: - Timber.e("Unhandled Save State: " + saveState); - return; - } - - SaveNotification.show( - ContextHelper.getActivity(), - toastType, - Toast.LENGTH_LONG, - snap - ); - } - } - ); - - /** - * =========================================================================== - * Received Snap Opened -> Grab MetaData and wait - * =========================================================================== - */ - hookMethod( - OPENED_SNAP, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Timber.d("Snap Type: " + param.thisObject.getClass()); - - if (!((boolean) param.args[0])) { - Timber.d("Direct Snap Input False"); - - return; - } - - String key = getOrCreateKey(param.thisObject); - Snap snap = Snap.getSnapFromCache(key); - - if (snap == null) { - Timber.e("Null Snap from Cache"); - SaveNotification.show(ContextHelper.getActivity(), SaveNotification.ToastType.BAD, Toast.LENGTH_LONG); - return; - } - - if (!(snap instanceof ReceivedSnap)) { - Timber.w("Tried to handle an incorrect type in the received snap handler: " + snap.getClass()); - return; - } - - SaveState saveState = snap.finalDisplayEvent(); - - Timber.d("Stream Save State: " + saveState); - - if (saveState == null) { - Timber.d("Null savestate... Ignoring"); - return; - } - - ToastType toastType; - - switch (saveState) { - case NOT_READY: - Timber.i("Snap not ready"); - return; - case EXISTING: - toastType = SaveNotification.ToastType.WARNING; - break; - case FAILED: - toastType = SaveNotification.ToastType.BAD; - break; - case SUCCESS: - toastType = SaveNotification.ToastType.GOOD; - break; - default: - Timber.e("Unhandled Save State: " + saveState); - return; - } - - SaveNotification.show( - ContextHelper.getActivity(), - toastType, - Toast.LENGTH_LONG, - snap - ); - - /*TransferState transferState = ((ReceivedSnap) snap).markReady(); - - if (transferState == null) { - Timber.w("Direct snap not ready to save"); - return; - } - - StackingDotNotification.showStatus(snapActivity, transferState.getToastType(), Toast.LENGTH_LONG);*/ - } - } - ); - - hookMethod( - DIVISION_FIX, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - try { - if ((Integer) param.args[0] == 0) - param.args[0] = 1; - if ((Integer) param.args[1] == 0) - param.args[1] = 1; - if ((Integer) param.args[2] == 0) - param.args[2] = 1; - if ((Integer) param.args[3] == 0) - param.args[3] = 1; - } catch (Exception e) { - Timber.e("DIVISION_FIX HOOK -> "+ e); - } - } - } - ); - - - hasLoadedHooks = true; - } - - @Override - public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { - // Safer to call User Prefs later, after Snapchat has been initialized - try { - yourUsername = callStaticHook(GET_USERNAME); - } catch (HookNotFoundException e) { - Timber.e(e); - moduleLoadState.fail(); - } - } - - // =========================================================================== - - /** - * =========================================================================== - * Attempt to extract and save the appropriate media from the holder - * =========================================================================== - * - * @return NULL if unsuccessful - */ - private SentSnap handleSentSnap(Activity snapActivity, Object mediaHolder, boolean isVideo) { - String username; - - try { - username = callStaticHook(GET_USERNAME); - } catch (HookNotFoundException e) { - Timber.e(e); - return null; - } - - long timestamp = getObjectField(SENT_MEDIA_TIMESTAMP, mediaHolder); - // Create Snap to get OutputFile ============================================= - SentSnap snap = new SentSnap() - .setContext(snapActivity) - .setKey(UUID.randomUUID().toString()) - .setUsername(username) - .setDateTime(timestamp) - .setFileExtension(isVideo ? ".mp4" : ".jpg") - .setSnapType(SnapTypeDef.SENT); - - File outputFile = snap.getOutputFile(); - - try { - if (!outputFile.exists() && !outputFile.createNewFile()) - throw new IOException("Couldn't Create New File: " + outputFile.getAbsolutePath()); - } catch (IOException e) { - Timber.e(e); - return null; - } - - // Create a closer to register all streams =================================== - Closer closer = Closer.create(); - - try { - FileOutputStream outputStream = closer.register(new FileOutputStream(outputFile)); - - if (!isVideo) { - - // Compress the image into the stream ======================================== - Bitmap sentImage = getObjectField(SENT_MEDIA_BITMAP, mediaHolder); - if (sentImage == null) { - Timber.w("No sendable image?"); - return null; - } - - sentImage.compress(CompressFormat.JPEG, 100, outputStream); - - } else { - - Timber.d("MediaHolder: " + mediaHolder.getClass()); - // Copy the video file into our output stream ================================ - Object batchHolder = getObjectField(SENT_MEDIA_BATCH_DATA, mediaHolder); - - Timber.d("BatchHolder: " + batchHolder); - logEntireClass(batchHolder, 2); - - File videoFile; - if (batchHolder != null) { - videoFile = new File(getCreateDir(TEMP_PATH), "Batched_Sent_Snap.mp4"); - } else { - Uri videoUri = getObjectField(SENT_MEDIA_VIDEO_URI, mediaHolder); - - if (videoUri == null) - return null; - - String videoPath = videoUri.getPath().replaceFirst("file:", ""); - videoFile = new File(videoPath); - - if (!videoFile.exists()) - return null; - } - - Files.copy( - videoFile, - outputFile - ); - } - - snap.runMediaScanner(outputFile.getAbsolutePath()); - return snap; - } catch (FileNotFoundException e) { - Timber.e(e, "Input or Output files not found!"); - } catch (IOException e) { - Timber.e(e, "Error copying the video to the output location"); - } finally { - try { - closer.close(); - } catch (IOException ignore) { - // We tried our best to close the streams... - // Nothing more we can do - } - } - - return null; - } - - // =========================================================================== - - /** - * =========================================================================== - * Get an existing or create a unique key for a specific object - * =========================================================================== - */ - @Nullable - private synchronized String getOrCreateKey(Object obj) { - if (obj == null) - return null; - - String key = (String) getAdditionalInstanceField(obj, KEY_HEADER); - - if (key == null) { - key = UUID.randomUUID().toString(); - setAdditionalInstanceField(obj, KEY_HEADER, key); - Timber.d("Applying [Key: %s] to [Obj: %s]", key, obj.toString()); - } - - return key; - } -} \ No newline at end of file +package com.ljmu.andre.snaptools.ModulePack; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Bitmap.CompressFormat; +import android.net.Uri; +import androidx.annotation.Nullable; +import android.widget.FrameLayout; +import android.widget.Toast; + +import com.google.common.io.ByteStreams; +import com.google.common.io.Closer; +import com.google.common.io.Files; +import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.ModulePack.Fragments.SavingSettingsFragment; +import com.ljmu.andre.snaptools.ModulePack.Notifications.SaveNotification; +import com.ljmu.andre.snaptools.ModulePack.Notifications.SaveNotification.ToastType; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.SaveTriggerManager; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.ChatImageSnap; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.ChatVideoSnap; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.GroupSnap; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.ReceivedSnap; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.SentSnap; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.Snap; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.Snap.Builder; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.Snap.SaveState; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.Snap.SnapTypeDef; +import com.ljmu.andre.snaptools.ModulePack.SavingUtils.Snaps.StorySnap; +import com.ljmu.andre.snaptools.ModulePack.Utils.SavingLayout; +import com.ljmu.andre.snaptools.ModulePack.Utils.SavingViewPool; +import com.ljmu.andre.snaptools.Utils.ContextHelper; +import com.ljmu.andre.snaptools.Utils.CustomObservers.ErrorObserver; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.UUID; +import java.util.concurrent.Callable; + +import de.robv.android.xposed.XposedHelpers; +import io.reactivex.Observable; +import io.reactivex.schedulers.Schedulers; +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getCreateDir; +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.RECEIVED_SNAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SENT_IMAGE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SENT_VIDEO; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_IMAGE_GET_ALGORITHM; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_VIDEO_GET_ALGORITHM; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CHAT_VIDEO_PATH; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CONSTRUCTOR_OPERA_PAGE_VIEW; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.DIRECT_GET_ALGORITHM; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.ENCRYPTION_ALGORITHM_STREAM; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_USERNAME; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GROUP_ALGORITHM_UNWRAPPED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GROUP_GET_ALGORITHM; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.OPENED_SNAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SENT_BATCHED_SNAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SENT_SNAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_GET_MEDIA_TYPE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_GET_TIMESTAMP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_GET_USERNAME; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_DISPLAYED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_GET_ALGORITHM; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_BUILDER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_GET_OBJECT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_INSERT_OBJECT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STREAM_TYPE_CHECK_BYPASS; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.CHAT_METADATA_MEDIA; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.GROUP_ALGORITHM_WRAPPER_FIELD; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_BATCHED_VIDEO_MEDIAHOLDER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_MEDIA_BATCH_DATA; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_MEDIA_BITMAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_MEDIA_TIMESTAMP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SENT_MEDIA_VIDEO_URI; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.SNAP_IS_ZIPPED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_ADVANCER_DISPLAY_STATE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_ADVANCER_METADATA; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STREAM_TYPE_CHECK_BOOLEAN; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.SAVE_SENT_SNAPS; +import static com.ljmu.andre.snaptools.Utils.FrameworkPreferencesDef.TEMP_PATH; +import static com.ljmu.andre.snaptools.Utils.XposedUtils.logEntireClass; +import static de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField; +import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +@SuppressWarnings("WeakerAccess") +public class Saving extends ModuleHelper { + private static final String KEY_HEADER = "SNAP_KEY"; + public static boolean hasLoadedHooks; + private static String yourUsername = ""; + + public Saving(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + @Override + public FragmentHelper[] getUIFragments() { + return new FragmentHelper[]{ + new SavingSettingsFragment() + }; + } + + // =========================================================================== + + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + SaveTriggerManager.init(); + + /** + * =========================================================================== + * Hook to inject the manual saving layout + * =========================================================================== + */ + hookConstructor( + CONSTRUCTOR_OPERA_PAGE_VIEW, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + try { + FrameLayout operaLayout = (FrameLayout) param.thisObject; + SavingLayout savingLayout = SavingViewPool.requestLayout(ContextHelper.getActivity()); + + operaLayout.addView(savingLayout); + } catch (Throwable t) { + Timber.e(t); + } + } + } + ); + + /** + * =========================================================================== + * Bypasses type checking on encrypted streams + * This would cause a duplicate stream to become corrupt so cannot happen + * =========================================================================== + */ + hookMethod( + STREAM_TYPE_CHECK_BYPASS, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + setObjectField(STREAM_TYPE_CHECK_BOOLEAN, param.thisObject, false); + } + } + ); + + /** + * =========================================================================== + * New Sent Snap Detected -> Determine the type and extract the media + * =========================================================================== + */ + if (getPref(SAVE_SENT_SNAPS)) { + hookMethod( + SENT_BATCHED_SNAP, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Timber.i("Splitting process"); + + Object mediaHolder = getObjectField(SENT_BATCHED_VIDEO_MEDIAHOLDER, param.thisObject); + + Observable.fromCallable(new Callable() { + @Override + public Object call() throws Exception { + Uri videoUri = getObjectField(SENT_MEDIA_VIDEO_URI, mediaHolder); + Timber.i("Handling splitting media"); + String videoPath = videoUri.getPath().replaceFirst("file:", ""); + File sourceMedia = new File(videoPath); + + if (!sourceMedia.exists() && !sourceMedia.createNewFile()) + Timber.w("Source tracked video doesn't exist and couldn't be created"); + + File tempDir = getCreateDir(TEMP_PATH); + File targetMedia = new File(tempDir, "Batched_Sent_Snap.mp4"); + + Files.copy(sourceMedia, targetMedia); + Timber.d("Copied batch file successfully"); + return new Object(); + } + }).subscribeOn(Schedulers.computation()) + .subscribe(new ErrorObserver<>("Error duplicating sent batch")); + + //Files.copy(file); + } + } + ); + + hookMethod( + SENT_SNAP, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Object media = param.args[0]; + + SentSnap sentSnap = null; + + try { + Class sentImage = HookResolver.resolveHookClass(SENT_IMAGE); + Class sentVideo = HookResolver.resolveHookClass(SENT_VIDEO); + + if (media.getClass().equals(sentImage)) + sentSnap = handleSentSnap(ContextHelper.getActivity(), media, false); + else if (media.getClass().equals(sentVideo)) + sentSnap = handleSentSnap(ContextHelper.getActivity(), media, true); + else { + Timber.e("Unhandled Sent Snap Type: %s", media.getClass()); + } + } catch (Throwable t) { + Timber.e(t); + } + + SaveNotification.show( + ContextHelper.getActivity(), + sentSnap != null ? SaveNotification.ToastType.GOOD : SaveNotification.ToastType.BAD, + Toast.LENGTH_LONG, + sentSnap + ); + } + } + ); + } + + + /** + * =========================================================================== + * Story Snap Algorithm Injection + * =========================================================================== + */ + hookMethod( + STORY_GET_ALGORITHM, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + if (param.getResult() == null) { + Timber.w("Null Story Snap Algorithm"); + return; + } + + //Timber.d("Got original algorithm: " + param.thisObject.toString()); + //logStackTrace(); + + String key = getOrCreateKey(param.thisObject); + boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, param.thisObject); + boolean isZipped = getObjectField(SNAP_IS_ZIPPED, param.thisObject); + String fileExtension = isVideo ? ".mp4" : ".jpg"; + + Long timestamp = callHook(SNAP_GET_TIMESTAMP, param.thisObject); + String username = callHook(SNAP_GET_USERNAME, param.thisObject); + + if (username != null && username.equals(yourUsername)) { + Timber.i("Viewing your own story"); + return; + } + + // Build the snap ============================================================ + new Builder() + .setContext(ContextHelper.getActivity()) + .setKey(key) + .setUsername(username) + .setDateTime(timestamp) + .setSnapType(SnapTypeDef.STORY) + .setFileExtension(fileExtension) + .setIsZipped(isZipped) + .build(StorySnap.class) + // Signal the snap that it's retrieving the algorithm ======================== + .providingAlgorithm(); + + setAdditionalInstanceField(param.getResult(), KEY_HEADER, key); + } + } + ); + + /** + * =========================================================================== + * Direct Snap Algorithm Injection + * =========================================================================== + */ + hookMethod( + DIRECT_GET_ALGORITHM, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + if (param.getResult() == null) { + Timber.w("Null Direct Snap Algorithm"); + return; + } + + Timber.d("EncryptionHolder: " + param.getResult()); + + Object snapMetaData = param.args[0]; + String key = getOrCreateKey(snapMetaData); + boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, snapMetaData); + boolean isZipped = getObjectField(SNAP_IS_ZIPPED, snapMetaData); + String fileExtension = isVideo ? ".mp4" : ".jpg"; + + Long timestamp = callHook(SNAP_GET_TIMESTAMP, snapMetaData); + String username = callHook(SNAP_GET_USERNAME, snapMetaData); + + new Builder() + .setContext(ContextHelper.getActivity()) + .setKey(key) + .setUsername(username) + .setDateTime(timestamp) + .setSnapType(SnapTypeDef.RECEIVED) + .setFileExtension(fileExtension) + .setIsZipped(isZipped) + .build(ReceivedSnap.class); + + Object encryptionHolder = param.getResult(); + Object encryptor = XposedHelpers.getObjectField(encryptionHolder, "c"); + setAdditionalInstanceField(encryptor, KEY_HEADER, key); + } + } + ); + + /** + * =========================================================================== + * Chat Image Algorithm Injection + * =========================================================================== + */ + hookMethod( + CHAT_IMAGE_GET_ALGORITHM, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + if (param.getResult() == null) { + Timber.w("Null Chat Video Algorithm"); + return; + } + + Object chatMetaData = param.args[0]; + + if (chatMetaData == null) { + Timber.w("Null ChatMetaData"); + return; + } + + String key = getOrCreateKey(chatMetaData); + boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, chatMetaData); + + setAdditionalInstanceField(param.getResult(), KEY_HEADER, key); + + // If it's a video, don't overwrite the existing stored data ================= + if (isVideo) + return; + + Long timestamp = callHook(SNAP_GET_TIMESTAMP, chatMetaData); + String username = callHook(SNAP_GET_USERNAME, chatMetaData); + + new Snap.Builder() + .setContext(ContextHelper.getActivity()) + .setKey(key) + .setUsername(username) + .setDateTime(timestamp) + .setSnapType(SnapTypeDef.CHAT) + .setFileExtension(".jpg") + .build(ChatImageSnap.class); + } + } + ); + + /** + * =========================================================================== + * Chat Video Algorithm Injection + * =========================================================================== + */ + hookMethod( + CHAT_VIDEO_GET_ALGORITHM, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Object chatMetaData = getObjectField(CHAT_METADATA_MEDIA, param.thisObject); + + if (chatMetaData == null) { + Timber.w("Null ChatMetaData"); + return; + } + + Uri videoPath = callHook(CHAT_VIDEO_PATH, chatMetaData); + + String key = getOrCreateKey(chatMetaData); + + Long timestamp = callHook(SNAP_GET_TIMESTAMP, chatMetaData); + String username = callHook(SNAP_GET_USERNAME, chatMetaData); + + ChatVideoSnap snap = new ChatVideoSnap.Builder() + .setVideoPath(videoPath) + .setContext(ContextHelper.getActivity()) + .setKey(key) + .setUsername(username) + .setDateTime(timestamp) + .setSnapType(SnapTypeDef.CHAT) + .setFileExtension(".mp4") + .build(); + + snap.providingAlgorithm(); + } + } + ); + + /** + * =========================================================================== + * Group Snap Algorithm Injection + * =========================================================================== + */ + hookMethod( + GROUP_GET_ALGORITHM, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + if (param.getResult() == null) { + Timber.w("Null Group Snap Algorithm"); + return; + } + + Object groupMetaData = param.args[0]; + + if (groupMetaData == null) { + Timber.w("Null GroupMetaData"); + return; + } + + Class receivedSnapClass = HookResolver.resolveHookClass(RECEIVED_SNAP); + + if (groupMetaData.getClass() == receivedSnapClass) { + Timber.i("Tried to process received snap in group handler"); + return; + } + + String key = getOrCreateKey(groupMetaData); + boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, groupMetaData); + String fileExtension = isVideo ? ".mp4" : ".jpg"; + + Object encryptionWrapper; + if (isVideo) + encryptionWrapper = callHook(GROUP_ALGORITHM_UNWRAPPED, param.getResult(), "video_first_frame_media_info"); + else + encryptionWrapper = callHook(GROUP_ALGORITHM_UNWRAPPED, param.getResult(), "image_media_info"); + + Long timestamp = callHook(SNAP_GET_TIMESTAMP, groupMetaData); + String username = callHook(SNAP_GET_USERNAME, groupMetaData); + + new Builder() + .setContext(ContextHelper.getActivity()) + .setKey(key) + .setUsername(username) + .setDateTime(timestamp) + .setSnapType(SnapTypeDef.GROUP) + .setFileExtension(fileExtension) + .build(GroupSnap.class); + + setAdditionalInstanceField(getObjectField(GROUP_ALGORITHM_WRAPPER_FIELD, encryptionWrapper), KEY_HEADER, key); + } + } + ); + + /** + * =========================================================================== + * Encryption Algorithm Stream Wrapper + * =========================================================================== + */ + hookMethod( + ENCRYPTION_ALGORITHM_STREAM, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + String key = (String) getAdditionalInstanceField(param.thisObject, KEY_HEADER); + + if (key == null) { + return; + } + + Snap snap = Snap.getSnapFromCache(key); + + if (snap != null) { + InputStream inputStream = (InputStream) param.getResult(); + Timber.d("InputStream: " + inputStream); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try { + ByteStreams.copy(inputStream, outputStream); + } catch (IOException e) { + Timber.e(e); + } + + ByteArrayInputStream copiedInputStream = new ByteArrayInputStream(outputStream.toByteArray()); + param.setResult(copiedInputStream); + + SaveState saveState = snap.copyStream(outputStream); + + Timber.d("Stream Save State: " + saveState); + + if (saveState == null) { + Timber.d("Null savestate... Ignoring"); + return; + } + + ToastType toastType; + + switch (saveState) { + case NOT_READY: + Timber.i("Snap not ready"); + return; + case EXISTING: + toastType = SaveNotification.ToastType.WARNING; + break; + case FAILED: + toastType = SaveNotification.ToastType.BAD; + break; + case SUCCESS: + toastType = SaveNotification.ToastType.GOOD; + break; + default: + Timber.e("Unhandled Save State: " + saveState); + return; + } + + SaveNotification.show( + ContextHelper.getActivity(), + toastType, + Toast.LENGTH_LONG, + snap + ); + } + } + } + ); + + /** + * =========================================================================== + * Force Stories to contain their matched MetaData + * =========================================================================== + */ + hookMethod( + STORY_METADATA_BUILDER, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Object storyMetadata = param.getResult(); + callHook(STORY_METADATA_INSERT_OBJECT, storyMetadata, "STORY_REPLY_SNAP", param.args[0]); + } + } + ); + + /** + * =========================================================================== + * Story Viewed -> Grab MetaData and draw the frame to a bitmap to save + * =========================================================================== + */ + hookMethod( + STORY_DISPLAYED, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Object displayState = getObjectField(STORY_ADVANCER_DISPLAY_STATE, param.thisObject); + + if (displayState == null || !displayState.toString().equals("FULLY_DISPLAYED")) + return; + + Object snapMetaData = getObjectField(STORY_ADVANCER_METADATA, param.thisObject); + + Object storySnap = callHook(STORY_METADATA_GET_OBJECT, snapMetaData, "STORY_REPLY_SNAP"); + + if (storySnap == null) { + Timber.d("StorySnap null: Probably not a normal story"); + return; + } + + String username = callHook(SNAP_GET_USERNAME, storySnap); + + if (username != null && username.equals(yourUsername)) { + Timber.i("Your story displayed"); + return; + } + + String key = getOrCreateKey(storySnap); + Snap snap = Snap.getSnapFromCache(key); + + if (snap == null) { + Timber.e("Null Snap from Cache"); + SaveNotification.show( + ContextHelper.getActivity(), + SaveNotification.ToastType.BAD, + Toast.LENGTH_LONG + ); + return; + } + + SaveState saveState = snap.finalDisplayEvent(); + + Timber.d("Stream Save State: " + saveState); + + if (saveState == null) { + Timber.d("Null savestate... Ignoring"); + return; + } + + ToastType toastType; + + switch (saveState) { + case NOT_READY: + Timber.i("Snap not ready"); + return; + case EXISTING: + toastType = SaveNotification.ToastType.WARNING; + break; + case FAILED: + toastType = SaveNotification.ToastType.BAD; + break; + case SUCCESS: + toastType = SaveNotification.ToastType.GOOD; + break; + default: + Timber.e("Unhandled Save State: " + saveState); + return; + } + + SaveNotification.show( + ContextHelper.getActivity(), + toastType, + Toast.LENGTH_LONG, + snap + ); + } + } + ); + + /** + * =========================================================================== + * Received Snap Opened -> Grab MetaData and wait + * =========================================================================== + */ + hookMethod( + OPENED_SNAP, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Timber.d("Snap Type: " + param.thisObject.getClass()); + + if (!((boolean) param.args[0])) { + Timber.d("Direct Snap Input False"); + + return; + } + + String key = getOrCreateKey(param.thisObject); + Snap snap = Snap.getSnapFromCache(key); + + if (snap == null) { + Timber.e("Null Snap from Cache"); + SaveNotification.show(ContextHelper.getActivity(), SaveNotification.ToastType.BAD, Toast.LENGTH_LONG); + return; + } + + if (!(snap instanceof ReceivedSnap)) { + Timber.w("Tried to handle an incorrect type in the received snap handler: " + snap.getClass()); + return; + } + + SaveState saveState = snap.finalDisplayEvent(); + + Timber.d("Stream Save State: " + saveState); + + if (saveState == null) { + Timber.d("Null savestate... Ignoring"); + return; + } + + ToastType toastType; + + switch (saveState) { + case NOT_READY: + Timber.i("Snap not ready"); + return; + case EXISTING: + toastType = SaveNotification.ToastType.WARNING; + break; + case FAILED: + toastType = SaveNotification.ToastType.BAD; + break; + case SUCCESS: + toastType = SaveNotification.ToastType.GOOD; + break; + default: + Timber.e("Unhandled Save State: " + saveState); + return; + } + + SaveNotification.show( + ContextHelper.getActivity(), + toastType, + Toast.LENGTH_LONG, + snap + ); + + /*TransferState transferState = ((ReceivedSnap) snap).markReady(); + + if (transferState == null) { + Timber.w("Direct snap not ready to save"); + return; + } + + StackingDotNotification.showStatus(snapActivity, transferState.getToastType(), Toast.LENGTH_LONG);*/ + } + } + ); + + hasLoadedHooks = true; + } + + @Override + public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { + // Safer to call User Prefs later, after Snapchat has been initialized + try { + yourUsername = callStaticHook(GET_USERNAME); + } catch (HookNotFoundException e) { + Timber.e(e); + moduleLoadState.fail(); + } + } + + // =========================================================================== + + /** + * =========================================================================== + * Attempt to extract and save the appropriate media from the holder + * =========================================================================== + * + * @return NULL if unsuccessful + */ + private SentSnap handleSentSnap(Activity snapActivity, Object mediaHolder, boolean isVideo) { + String username; + + try { + username = callStaticHook(GET_USERNAME); + } catch (HookNotFoundException e) { + Timber.e(e); + return null; + } + + long timestamp = getObjectField(SENT_MEDIA_TIMESTAMP, mediaHolder); + + // Create Snap to get OutputFile ============================================= + SentSnap snap = new SentSnap() + .setContext(snapActivity) + .setKey(UUID.randomUUID().toString()) + .setUsername(username) + .setDateTime(timestamp) + .setFileExtension(isVideo ? ".mp4" : ".jpg") + .setSnapType(SnapTypeDef.SENT); + + File outputFile = snap.getOutputFile(); + + try { + if (!outputFile.exists() && !outputFile.createNewFile()) + throw new IOException("Couldn't Create New File: " + outputFile.getAbsolutePath()); + } catch (IOException e) { + Timber.e(e); + return null; + } + + // Create a closer to register all streams =================================== + Closer closer = Closer.create(); + + try { + FileOutputStream outputStream = closer.register(new FileOutputStream(outputFile)); + + if (!isVideo) { + + // Compress the image into the stream ======================================== + Bitmap sentImage = getObjectField(SENT_MEDIA_BITMAP, mediaHolder); + if (sentImage == null) { + Timber.w("No sendable image?"); + return null; + } + + sentImage.compress(CompressFormat.JPEG, 100, outputStream); + + } else { + + Timber.d("MediaHolder: " + mediaHolder.getClass()); + // Copy the video file into our output stream ================================ + Object batchHolder = getObjectField(SENT_MEDIA_BATCH_DATA, mediaHolder); + + Timber.d("BatchHolder: " + batchHolder); + logEntireClass(batchHolder, 2); + + File videoFile; + if (batchHolder != null) { + videoFile = new File(getCreateDir(TEMP_PATH), "Batched_Sent_Snap.mp4"); + } else { + Uri videoUri = getObjectField(SENT_MEDIA_VIDEO_URI, mediaHolder); + + if (videoUri == null) + return null; + + String videoPath = videoUri.getPath().replaceFirst("file:", ""); + videoFile = new File(videoPath); + + if (!videoFile.exists()) + return null; + } + + Files.copy( + videoFile, + outputFile + ); + } + + snap.runMediaScanner(outputFile.getAbsolutePath()); + return snap; + } catch (FileNotFoundException e) { + Timber.e(e, "Input or Output files not found!"); + } catch (IOException e) { + Timber.e(e, "Error copying the video to the output location"); + } finally { + try { + closer.close(); + } catch (IOException ignore) { + // We tried our best to close the streams... + // Nothing more we can do + } + } + + return null; + } + + // =========================================================================== + + /** + * =========================================================================== + * Get an existing or create a unique key for a specific object + * =========================================================================== + */ + @Nullable + private synchronized String getOrCreateKey(Object obj) { + if (obj == null) + return null; + + String key = (String) getAdditionalInstanceField(obj, KEY_HEADER); + + if (key == null) { + key = UUID.randomUUID().toString(); + setAdditionalInstanceField(obj, KEY_HEADER, key); + Timber.d("Applying [Key: %s] to [Obj: %s]", key, obj.toString()); + } + + return key; + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ScreenshotBypass.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ScreenshotBypass.java index 238f943..3ce906f 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ScreenshotBypass.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ScreenshotBypass.java @@ -1,58 +1,58 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.content.Context; - -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; - -import de.robv.android.xposed.XC_MethodReplacement; - -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SCREENSHOT_BYPASS; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class ScreenshotBypass extends ModuleHelper { - public ScreenshotBypass(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - @Override - public FragmentHelper[] getUIFragments() { - return null; - } - - // =========================================================================== - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - hookMethod( - SCREENSHOT_BYPASS, - XC_MethodReplacement.DO_NOTHING); - - /*hookMethod( - SET_SCREENSHOT_COUNT, - new ST_MethodHook() { - @Override protected void before(MethodHookParam param) { - param.args[0] = 0L; - } - }); - hookMethod( - SET_VIDEO_SCREENSHOT_COUNT, - new ST_MethodHook() { - @Override protected void before(MethodHookParam param) { - param.args[0] = 0L; - } - }); - hookMethod( - SET_SCREENSHOT_COUNT3, - new ST_MethodHook() { - @Override protected void before(MethodHookParam param) { - param.args[0] = 0L; - } - });*/ - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.content.Context; + +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; + +import de.robv.android.xposed.XC_MethodReplacement; + +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SCREENSHOT_BYPASS; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class ScreenshotBypass extends ModuleHelper { + public ScreenshotBypass(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + @Override + public FragmentHelper[] getUIFragments() { + return null; + } + + // =========================================================================== + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + hookMethod( + SCREENSHOT_BYPASS, + XC_MethodReplacement.DO_NOTHING); + + /*hookMethod( + SET_SCREENSHOT_COUNT, + new ST_MethodHook() { + @Override protected void before(MethodHookParam param) { + param.args[0] = 0L; + } + }); + hookMethod( + SET_VIDEO_SCREENSHOT_COUNT, + new ST_MethodHook() { + @Override protected void before(MethodHookParam param) { + param.args[0] = 0L; + } + }); + hookMethod( + SET_SCREENSHOT_COUNT3, + new ST_MethodHook() { + @Override protected void before(MethodHookParam param) { + param.args[0] = 0L; + } + });*/ + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/Sharing.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/Sharing.java index caac2e3..1cc6523 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/Sharing.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/Sharing.java @@ -1,393 +1,388 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Matrix; -import android.net.Uri; - -import com.google.common.io.Files; -import com.ljmu.andre.snaptools.Dialogs.DialogFactory; -import com.ljmu.andre.snaptools.Dialogs.ThemedDialog; -import com.ljmu.andre.snaptools.Dialogs.ThemedDialog.ThemedClickListener; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.ModulePack.Fragments.SharingFragment; -import com.ljmu.andre.snaptools.ModulePack.Notifications.SafeToastAdapter; -import com.ljmu.andre.snaptools.Utils.ContextHelper; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import java.io.File; -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.List; - -import de.robv.android.xposed.XC_MethodReplacement; -import de.robv.android.xposed.XposedHelpers; -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.ENUM_BATCHED_SNAP_POSITION; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.BATCHED_MEDIA_LIMITER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CAMERA_IS_VISIBLE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.REPLACE_SHARED_IMAGE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.REPLACE_SHARED_VIDEO; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.BATCHED_MEDIA_ITEM_BOOLEAN; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.BATCHED_MEDIA_LIST; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.BATCHED_MEDIA_CAP; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.SHARING_AUTO_ROTATE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.SHOW_SHARING_TUTORIAL; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class Sharing extends ModuleHelper { - public static final int FAILSAFE_BATCHED_MEDIA_CAP = 36; - - public Sharing(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - @Override - public FragmentHelper[] getUIFragments() { - return new FragmentHelper[]{ - new SharingFragment() - }; - } - - // =========================================================================== - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - if (getPref(SHOW_SHARING_TUTORIAL)) { - hookMethod( - CAMERA_IS_VISIBLE, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Intent intent = ContextHelper.getActivity().getIntent(); - - if (intent == null || ContextHelper.getActivity().isFinishing()) { - Timber.d("Null Intent"); - return; - } - - if (intent.getBooleanExtra("IS_SHARE", false)) { - if (intent.getStringExtra("image_url") != null) { - DialogFactory.createConfirmation( - ContextHelper.getActivity(), - "Shared Image Detected", - "Found an image that has been shared to Snapchat" - + "\nPress No to cancel the share" + - "\nPress Yes to continue, then take a regular snap for the media to be replaced" + - "\n\nImportant: If you experience Image Rotation while sharing, activate the \"Prevent Image Rotation Bug\" in Sharing Settings" - , - new ThemedClickListener() { - @Override - public void clicked(ThemedDialog themedDialog) { - themedDialog.dismiss(); - } - }, - new ThemedClickListener() { - @Override - public void clicked(ThemedDialog themedDialog) { - intent.removeExtra("image_url"); - intent.removeExtra("IS_SHARE"); - themedDialog.dismiss(); - } - } - ).show(); - } else if (intent.getStringExtra("video_url") != null) { - DialogFactory.createConfirmation( - ContextHelper.getActivity(), - "Shared Video Detected", - "Found a video that has been shared to Snapchat" - + "\nPress No to cancel the share" + - "\nPress Yes to continue, then take a regular video for the media to be replaced" - , - new ThemedClickListener() { - @Override - public void clicked(ThemedDialog themedDialog) { - themedDialog.dismiss(); - } - }, - new ThemedClickListener() { - @Override - public void clicked(ThemedDialog themedDialog) { - intent.removeExtra("image_url"); - intent.removeExtra("IS_SHARE"); - themedDialog.dismiss(); - } - } - ).show(); - - } else - intent.removeExtra("IS_SHARE"); - } - } - } - ); - } - - hookMethod( - REPLACE_SHARED_IMAGE, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Intent intent = ContextHelper.getActivity().getIntent(); - - Timber.d("Called camera REPLACE_SHARED_IMAGE"); - - if (intent == null) { - Timber.d("Null Intent"); - return; - } - - if (intent.getBooleanExtra("IS_SHARE", false)) { - intent.removeExtra("IS_SHARE"); - Timber.d("It's a shared item"); - String imgPath = intent.getStringExtra("image_url"); - intent.removeExtra("image_url"); - Timber.d("ImgPath: %s", imgPath); - - if (imgPath == null) { - SafeToastAdapter.showErrorToast( - ContextHelper.getActivity(), - "Shared image path not found" - ); - return; - } - - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inPreferredConfig = Bitmap.Config.ARGB_8888; - Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options); - - - if (bitmap == null) { - SafeToastAdapter.showErrorToast( - ContextHelper.getActivity(), - "Failed to load shared media" - ); - return; - } - - // Weird Image Rotation Fix (The infamous 270 degrees bug) - if (getPref(SHARING_AUTO_ROTATE)) { - Matrix matrix = new Matrix(); - matrix.postRotate(-90); - bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), - bitmap.getHeight(), matrix, true - ); - } - - if (bitmap == null) { - SafeToastAdapter.showErrorToast( - ContextHelper.getActivity(), - "Failed to manipulate shared media to prevent Image Rotation" - ); - return; - } - - // TODO: Put fjx$a in a variable somewhere. - param.args[0] = XposedHelpers - .findConstructorExact("fjw$a", snapClassLoader, Bitmap.class) - .newInstance(bitmap); - } - } - } - ); - - hookMethod( - REPLACE_SHARED_VIDEO, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - if (ContextHelper.getActivity() == null || ContextHelper.getActivity().isDestroyed() || ContextHelper.getActivity().isFinishing()) { - Timber.w("SnapActivity not valid for shared video"); - return; - } - - Intent intent = ContextHelper.getActivity().getIntent(); - - if (intent == null) { - Timber.d("Null Intent"); - return; - } - - try { - if (intent.getBooleanExtra("IS_SHARE", false)) { - intent.removeExtra("IS_SHARE"); - Timber.d("It's a shared item"); - String videoPath = intent.getStringExtra("video_url"); - intent.removeExtra("video_url"); - Timber.d("VidPath: " + videoPath); - - if (videoPath == null) { - SafeToastAdapter.showErrorToast( - ContextHelper.getActivity(), - "Shared video path not found" - ); - return; - } - File sourceFile = new File(videoPath); - - if (!sourceFile.exists()) { - SafeToastAdapter.showErrorToast( - ContextHelper.getActivity(), - "Shared video doesn't exist" - ); - return; - } - - Uri snapPath = (Uri) param.args[0]; - - if (snapPath == null) { - SafeToastAdapter.showErrorToast( - ContextHelper.getActivity(), - "Recorded video path not found" - ); - return; - } - - File sharedVideoFile = new File(videoPath); - File snapFile = new File(snapPath.getPath()); - Files.copy(sharedVideoFile, snapFile); - - } - } catch (Throwable t) { - Timber.e(t, "Error with shared video"); - } - } - } - ); - -// findAndHookMethod( -// "frj", snapClassLoader, -// "onVideoRecordingSuccess", -// new HookWrapper((HookBefore) param -> { -// Timber.d("Video File: " + XposedHelpers.getObjectField(param.thisObject, "k")); -// if (snapActivity == null || snapActivity.isDestroyed() || snapActivity.isFinishing()) { -// Timber.w("SnapActivity not valid for shared video"); -// return; -// } -// -// Intent intent = snapActivity.getIntent(); -// -// if (intent == null) { -// Timber.d("Null Intent"); -// return; -// } -// -// try { -// if (intent.getBooleanExtra("IS_SHARE", false)) { -// intent.removeExtra("IS_SHARE"); -// Timber.d("It's a shared item"); -// String videoPath = intent.getStringExtra("video_url"); -// intent.removeExtra("video_url"); -// Timber.d("VidPath: " + videoPath); -// -// if (videoPath == null) { -// SafeToastAdapter.showErrorToast( -// snapActivity, -// "Shared video path not found" -// ); -// -// Answers.safeLogEvent( -// new CustomEvent("SharedMedia") -// .putCustomAttribute("Type", "Video") -// .putCustomAttribute("Success", "FALSE") -// ); -// return; -// } -// File sourceFile = new File(videoPath); -// -// if (!sourceFile.exists()) { -// SafeToastAdapter.showErrorToast( -// snapActivity, -// "Shared video doesn't exist" -// ); -// -// Answers.safeLogEvent( -// new CustomEvent("SharedMedia") -// .putCustomAttribute("Type", "Video") -// .putCustomAttribute("Success", "FALSE") -// ); -// return; -// } -// -// File sharedVideoFile = new File(videoPath); -// File snapFile = (File) XposedHelpers.getObjectField(param.thisObject, "k"); -// Files.copy(sharedVideoFile, snapFile); -// -// Answers.safeLogEvent( -// new CustomEvent("SharedMedia") -// .putCustomAttribute("Type", "Video") -// .putCustomAttribute("Success", "TRUE") -// ); -// } -// } catch (Throwable t) { -// Timber.e(t, "Error with shared video"); -// } -// }) -// ); - - hookMethod( - BATCHED_MEDIA_LIMITER, - new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { - try { - List batchedMediaList = getObjectField(BATCHED_MEDIA_LIST, param.thisObject); - Class typeEnum = HookResolver.resolveHookClass(ENUM_BATCHED_SNAP_POSITION); - - if (batchedMediaList == null) { - Timber.i("Null batched media list"); - return Enum.valueOf(typeEnum, "NONE"); - } - - int batchCap = Math.min(getPref(BATCHED_MEDIA_CAP), FAILSAFE_BATCHED_MEDIA_CAP); - - List arrayList = new ArrayList<>(batchCap); - int i = 0; - - while (i < batchedMediaList.size() && i < batchCap) { - Object batchedMediaItem = batchedMediaList.get(i); - setObjectField(BATCHED_MEDIA_ITEM_BOOLEAN, batchedMediaItem, false); - arrayList.add(i); - i++; - } - - - if (arrayList.isEmpty()) { - Timber.i("Empty batch list"); - return Enum.valueOf(typeEnum, "NONE"); - } - - Timber.i("Batched size: " + arrayList.size()); - - if (arrayList.size() == 1) { - int intValue = arrayList.get(0); - if (intValue == 0) - return Enum.valueOf(typeEnum, "BEGIN"); - - if (intValue == i - 1) - return Enum.valueOf(typeEnum, "END"); - - return Enum.valueOf(typeEnum, "MIDDLE"); - } else if (arrayList.size() == 2 && arrayList.get(0) == 0 && arrayList.get(1) == i - 1) - return Enum.valueOf(typeEnum, "BEGIN_AND_END"); - else - return Enum.valueOf(typeEnum, "OTHER"); - } catch (Throwable t) { - Timber.e(t); - throw t; - } - } - } - ); - } -} \ No newline at end of file +package com.ljmu.andre.snaptools.ModulePack; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.net.Uri; + +import com.google.common.io.Files; +import com.ljmu.andre.snaptools.Dialogs.DialogFactory; +import com.ljmu.andre.snaptools.Dialogs.ThemedDialog; +import com.ljmu.andre.snaptools.Dialogs.ThemedDialog.ThemedClickListener; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.ModulePack.Fragments.SharingFragment; +import com.ljmu.andre.snaptools.ModulePack.Notifications.SafeToastAdapter; +import com.ljmu.andre.snaptools.Utils.ContextHelper; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import de.robv.android.xposed.XC_MethodReplacement; +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.ENUM_BATCHED_SNAP_POSITION; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.BATCHED_MEDIA_LIMITER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CAMERA_IS_VISIBLE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.REPLACE_SHARED_IMAGE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.REPLACE_SHARED_VIDEO; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.BATCHED_MEDIA_ITEM_BOOLEAN; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.BATCHED_MEDIA_LIST; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.BATCHED_MEDIA_CAP; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.SHARING_AUTO_ROTATE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.SHOW_SHARING_TUTORIAL; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class Sharing extends ModuleHelper { + public static final int FAILSAFE_BATCHED_MEDIA_CAP = 36; + + public Sharing(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + @Override + public FragmentHelper[] getUIFragments() { + return new FragmentHelper[]{ + new SharingFragment() + }; + } + + // =========================================================================== + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + if (getPref(SHOW_SHARING_TUTORIAL)) { + hookMethod( + CAMERA_IS_VISIBLE, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Intent intent = ContextHelper.getActivity().getIntent(); + + if (intent == null || ContextHelper.getActivity().isFinishing()) { + Timber.d("Null Intent"); + return; + } + + if (intent.getBooleanExtra("IS_SHARE", false)) { + if (intent.getStringExtra("image_url") != null) { + DialogFactory.createConfirmation( + ContextHelper.getActivity(), + "Shared Image Detected", + "Found an image that has been shared to Snapchat" + + "\nPress No to cancel the share" + + "\nPress Yes to continue, then take a regular snap for the media to be replaced" + + "\n\nImportant: If you experience Image Rotation while sharing, activate the \"Prevent Image Rotation Bug\" in Sharing Settings" + , + new ThemedClickListener() { + @Override + public void clicked(ThemedDialog themedDialog) { + themedDialog.dismiss(); + } + }, + new ThemedClickListener() { + @Override + public void clicked(ThemedDialog themedDialog) { + intent.removeExtra("image_url"); + intent.removeExtra("IS_SHARE"); + themedDialog.dismiss(); + } + } + ).show(); + } else if (intent.getStringExtra("video_url") != null) { + DialogFactory.createConfirmation( + ContextHelper.getActivity(), + "Shared Video Detected", + "Found a video that has been shared to Snapchat" + + "\nPress No to cancel the share" + + "\nPress Yes to continue, then take a regular video for the media to be replaced" + , + new ThemedClickListener() { + @Override + public void clicked(ThemedDialog themedDialog) { + themedDialog.dismiss(); + } + }, + new ThemedClickListener() { + @Override + public void clicked(ThemedDialog themedDialog) { + intent.removeExtra("image_url"); + intent.removeExtra("IS_SHARE"); + themedDialog.dismiss(); + } + } + ).show(); + + } else + intent.removeExtra("IS_SHARE"); + } + } + } + ); + } + + hookMethod( + REPLACE_SHARED_IMAGE, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Intent intent = ContextHelper.getActivity().getIntent(); + + Timber.d("Called camera REPLACE_SHARED_IMAGE"); + + if (intent == null) { + Timber.d("Null Intent"); + return; + } + + if (intent.getBooleanExtra("IS_SHARE", false)) { + intent.removeExtra("IS_SHARE"); + Timber.d("It's a shared item"); + String imgPath = intent.getStringExtra("image_url"); + intent.removeExtra("image_url"); + Timber.d("ImgPath: %s", imgPath); + + if (imgPath == null) { + SafeToastAdapter.showErrorToast( + ContextHelper.getActivity(), + "Shared image path not found" + ); + return; + } + + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inPreferredConfig = Bitmap.Config.ARGB_8888; + Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options); + + + if (bitmap == null) { + SafeToastAdapter.showErrorToast( + ContextHelper.getActivity(), + "Failed to load shared media" + ); + return; + } + + // Weird Image Rotation Fix (The infamous 270 degrees bug) + if (getPref(SHARING_AUTO_ROTATE)) { + Matrix matrix = new Matrix(); + matrix.postRotate(-90); + bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), + bitmap.getHeight(), matrix, true + ); + } + + if (bitmap == null) { + SafeToastAdapter.showErrorToast( + ContextHelper.getActivity(), + "Failed to manipulate shared media to prevent Image Rotation" + ); + return; + } + + param.args[0] = bitmap; + } + } + } + ); + + hookMethod( + REPLACE_SHARED_VIDEO, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + if (ContextHelper.getActivity() == null || ContextHelper.getActivity().isDestroyed() || ContextHelper.getActivity().isFinishing()) { + Timber.w("SnapActivity not valid for shared video"); + return; + } + + Intent intent = ContextHelper.getActivity().getIntent(); + + if (intent == null) { + Timber.d("Null Intent"); + return; + } + + try { + if (intent.getBooleanExtra("IS_SHARE", false)) { + intent.removeExtra("IS_SHARE"); + Timber.d("It's a shared item"); + String videoPath = intent.getStringExtra("video_url"); + intent.removeExtra("video_url"); + Timber.d("VidPath: " + videoPath); + + if (videoPath == null) { + SafeToastAdapter.showErrorToast( + ContextHelper.getActivity(), + "Shared video path not found" + ); + return; + } + File sourceFile = new File(videoPath); + + if (!sourceFile.exists()) { + SafeToastAdapter.showErrorToast( + ContextHelper.getActivity(), + "Shared video doesn't exist" + ); + return; + } + + Uri snapPath = (Uri) param.args[0]; + + if (snapPath == null) { + SafeToastAdapter.showErrorToast( + ContextHelper.getActivity(), + "Recorded video path not found" + ); + return; + } + + File sharedVideoFile = new File(videoPath); + File snapFile = new File(snapPath.getPath()); + Files.copy(sharedVideoFile, snapFile); + + } + } catch (Throwable t) { + Timber.e(t, "Error with shared video"); + } + } + } + ); + +// findAndHookMethod( +// "frj", snapClassLoader, +// "onVideoRecordingSuccess", +// new HookWrapper((HookBefore) param -> { +// Timber.d("Video File: " + XposedHelpers.getObjectField(param.thisObject, "k")); +// if (snapActivity == null || snapActivity.isDestroyed() || snapActivity.isFinishing()) { +// Timber.w("SnapActivity not valid for shared video"); +// return; +// } +// +// Intent intent = snapActivity.getIntent(); +// +// if (intent == null) { +// Timber.d("Null Intent"); +// return; +// } +// +// try { +// if (intent.getBooleanExtra("IS_SHARE", false)) { +// intent.removeExtra("IS_SHARE"); +// Timber.d("It's a shared item"); +// String videoPath = intent.getStringExtra("video_url"); +// intent.removeExtra("video_url"); +// Timber.d("VidPath: " + videoPath); +// +// if (videoPath == null) { +// SafeToastAdapter.showErrorToast( +// snapActivity, +// "Shared video path not found" +// ); +// +// Answers.safeLogEvent( +// new CustomEvent("SharedMedia") +// .putCustomAttribute("Type", "Video") +// .putCustomAttribute("Success", "FALSE") +// ); +// return; +// } +// File sourceFile = new File(videoPath); +// +// if (!sourceFile.exists()) { +// SafeToastAdapter.showErrorToast( +// snapActivity, +// "Shared video doesn't exist" +// ); +// +// Answers.safeLogEvent( +// new CustomEvent("SharedMedia") +// .putCustomAttribute("Type", "Video") +// .putCustomAttribute("Success", "FALSE") +// ); +// return; +// } +// +// File sharedVideoFile = new File(videoPath); +// File snapFile = (File) XposedHelpers.getObjectField(param.thisObject, "k"); +// Files.copy(sharedVideoFile, snapFile); +// +// Answers.safeLogEvent( +// new CustomEvent("SharedMedia") +// .putCustomAttribute("Type", "Video") +// .putCustomAttribute("Success", "TRUE") +// ); +// } +// } catch (Throwable t) { +// Timber.e(t, "Error with shared video"); +// } +// }) +// ); + + hookMethod( + BATCHED_MEDIA_LIMITER, + new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + try { + List batchedMediaList = getObjectField(BATCHED_MEDIA_LIST, param.thisObject); + Class typeEnum = HookResolver.resolveHookClass(ENUM_BATCHED_SNAP_POSITION); + + if (batchedMediaList == null) { + Timber.i("Null batched media list"); + return Enum.valueOf(typeEnum, "NONE"); + } + + int batchCap = Math.min(getPref(BATCHED_MEDIA_CAP), FAILSAFE_BATCHED_MEDIA_CAP); + + List arrayList = new ArrayList<>(batchCap); + int i = 0; + + while (i < batchedMediaList.size() && i < batchCap) { + Object batchedMediaItem = batchedMediaList.get(i); + setObjectField(BATCHED_MEDIA_ITEM_BOOLEAN, batchedMediaItem, false); + arrayList.add(i); + i++; + } + + + if (arrayList.isEmpty()) { + Timber.i("Empty batch list"); + return Enum.valueOf(typeEnum, "NONE"); + } + + Timber.i("Batched size: " + arrayList.size()); + + if (arrayList.size() == 1) { + int intValue = arrayList.get(0); + if (intValue == 0) + return Enum.valueOf(typeEnum, "BEGIN"); + + if (intValue == i - 1) + return Enum.valueOf(typeEnum, "END"); + + return Enum.valueOf(typeEnum, "MIDDLE"); + } else if (arrayList.size() == 2 && arrayList.get(0) == 0 && arrayList.get(1) == i - 1) + return Enum.valueOf(typeEnum, "BEGIN_AND_END"); + else + return Enum.valueOf(typeEnum, "OTHER"); + } catch (Throwable t) { + Timber.e(t); + throw t; + } + } + } + ); + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/StealthViewing.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/StealthViewing.java index 282c10f..045b6d9 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/StealthViewing.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/StealthViewing.java @@ -1,482 +1,482 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.app.Activity; -import android.content.Context; -import android.os.Handler; -import android.os.Looper; -import android.view.View; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; - -import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.ModulePack.Fragments.KotlinViews.StealthViewProvider; -import com.ljmu.andre.snaptools.ModulePack.Fragments.StealthViewingFragment; -import com.ljmu.andre.snaptools.Utils.ContextHelper; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.CHAT_V10_BUILDER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SNAP_STATUS; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.STORY_SNAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CONSTRUCTOR_OPERA_PAGE_VIEW; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CREATE_CHEETAH_PROFILE_SETTINGS_VIEW; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.DISPATCH_CHAT_UPDATE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_RECEIVED_SNAP_PAYLOAD; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_SNAP_ID; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_STORY_SNAP_PAYLOAD; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.MARK_DIRECT_CHAT_VIEWED_PRESENT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.MARK_DIRECT_CHAT_VIEWED_UNPRESENT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.MARK_GROUP_CHAT_VIEWED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.MARK_STORY_VIEWED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.NETWORK_EXECUTE_SYNC; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.OPENED_SNAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SET_SNAP_STATUS; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_DISPLAYED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_BUILDER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_GET_OBJECT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_INSERT_OBJECT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.CHAT_TOP_PANEL_VIEW; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.RECEIVED_SNAP_PAYLOAD_HOLDER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.RECEIVED_SNAP_PAYLOAD_MAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_ADVANCER_DISPLAY_STATE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_ADVANCER_METADATA; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_UPDATE_METADATA; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_UPDATE_METADATA_ID; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_UPDATE_METADATA_LIST; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.*; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ViewFactory.detach; -import static com.ljmu.andre.snaptools.Utils.ContextHelper.getModuleContext; -import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getId; -import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getIdFromString; -import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getView; -import static de.robv.android.xposed.XposedHelpers.callMethod; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class StealthViewing extends ModuleHelper { - private static final int MAX_STEALTH_BYPASS_SIZE = 50; - public static boolean bypassNextStealthView; - private List activeLayouts = new ArrayList<>(); - private Set stealthySnapSet = Collections.newSetFromMap(new LinkedHashMap() { - protected boolean removeEldestEntry(Map.Entry eldest) { - return size() > 100; - } - }); - - private Set stealthBypassSet = Collections.newSetFromMap(new LinkedHashMap() { - protected boolean removeEldestEntry(Map.Entry eldest) { - return size() > MAX_STEALTH_BYPASS_SIZE; - } - }); - private StealthViewProvider viewProvider = new StealthViewProvider(); - - private int cheetahHeaderId, oldHeaderId; - private ViewGroup cheetahStealthContainer, stealthContainer; - - public StealthViewing(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - @Override - public FragmentHelper[] getUIFragments() { - return new FragmentHelper[]{ - new StealthViewingFragment() - }; - } - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - bypassNextStealthView = !(boolean) getPref(DEFAULT_SNAP_STEALTH); - - if (getPref(SHOW_SNAP_STEALTH_BUTTON)) { - hookConstructor( - CONSTRUCTOR_OPERA_PAGE_VIEW, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Timber.d("Opera view created.... Assigning active view"); - activeLayouts.add((FrameLayout) param.thisObject); - } - } - ); - - hookMethod( - OPENED_SNAP, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Timber.d("Direct snap displayed... Binding stealth to active layout"); - - if (Looper.myLooper() != Looper.getMainLooper()) { - new Handler(Looper.getMainLooper()).post(() -> assignStealthToActiveLayout(ContextHelper.getActivity())); - } else - assignStealthToActiveLayout(ContextHelper.getActivity()); - } - } - ); - - if (!Saving.hasLoadedHooks) { - /** - * =========================================================================== - * Force Stories to contain their matched MetaData - * =========================================================================== - */ - hookMethod( - STORY_METADATA_BUILDER, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Object storyMetadata = param.getResult(); - callHook(STORY_METADATA_INSERT_OBJECT, storyMetadata, "STORY_REPLY_SNAP", param.args[0]); - } - } - ); - } - - /** - * =========================================================================== - * Story displayed hook - * =========================================================================== - */ - hookMethod( - STORY_DISPLAYED, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Object displayState = getObjectField(STORY_ADVANCER_DISPLAY_STATE, param.thisObject); - if (displayState == null || !displayState.toString().equals("FULLY_DISPLAYED")) - return; - - Object snapMetaData = getObjectField(STORY_ADVANCER_METADATA, param.thisObject); - - Object storySnap = callHook(STORY_METADATA_GET_OBJECT, snapMetaData, "STORY_REPLY_SNAP"); - - if (storySnap == null) { - Timber.d("StorySnap null: Probably not a normal story"); - return; - } - - Timber.d("Story snap displayed... Binding stealth to active layout"); - - if (Looper.myLooper() != Looper.getMainLooper()) { - new Handler(Looper.getMainLooper()).post(() -> assignStealthToActiveLayout(ContextHelper.getActivity())); - } else - assignStealthToActiveLayout(ContextHelper.getActivity()); - } - } - ); - } - - /** - * =========================================================================== - * Snap status updater - * =========================================================================== - */ - try { - Class statusEnumClass = HookResolver.resolveHookClass(SNAP_STATUS); - Class storySnapClass = HookResolver.resolveHookClass(STORY_SNAP); - - Object unviewedEnum = Enum.valueOf(statusEnumClass, "UNVIEWED_AND_LOADED"); - Object receievedEnum = Enum.valueOf(statusEnumClass, "RECEIVED_AND_VIEWED"); - Object viewedEnum = Enum.valueOf(statusEnumClass, "VIEWED_AND_REPLAY_AVAILABLE"); - - hookMethod( - SET_SNAP_STATUS, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - if (param.thisObject.getClass().equals(storySnapClass)) { - return; - } - - String snapId = callHook(GET_SNAP_ID, param.thisObject); - - Enum statusEnum = (Enum) param.args[0]; - - if (statusEnum.equals(receievedEnum) || statusEnum.equals(viewedEnum)) { - if (handleStealthCheck(snapId)) { - param.args[0] = unviewedEnum; - } - } - } - } - ); - } catch (HookNotFoundException | IllegalArgumentException e) { - Timber.e("Hook not found" + e); - moduleLoadState.fail(); - } - - /** - * =========================================================================== - * Story status updater - * =========================================================================== - */ - hookMethod( - MARK_STORY_VIEWED, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - String snapId = callHook(GET_SNAP_ID, param.args[1]); - - if (handleStealthCheck(snapId) && !(boolean) getPref(STEALTH_MARK_STORY_VIEWED)) - param.setResult(null); - } - } - ); - - /** - * =========================================================================== - * Received snap update payload provider - * =========================================================================== - */ - hookMethod( - GET_RECEIVED_SNAP_PAYLOAD, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Object snapPayloadHolder = getObjectField(RECEIVED_SNAP_PAYLOAD_HOLDER, param.thisObject); - Map snapMap = getObjectField(RECEIVED_SNAP_PAYLOAD_MAP, snapPayloadHolder); - - for (String shouldntStealth : stealthySnapSet) { - snapMap.remove(shouldntStealth); - } - - Timber.d("EntrySize: " + snapMap.size()); - } - } - ); - - /** - * =========================================================================== - * Story snap update payload provider - * =========================================================================== - */ - hookMethod( - GET_STORY_SNAP_PAYLOAD, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - List storyUpdateList = getObjectField(STORY_UPDATE_METADATA_LIST, param.thisObject); - - int storyUpdateListSize = storyUpdateList.size(); - - Iterator storyIterator = storyUpdateList.iterator(); - - while (storyIterator.hasNext()) { - Object storyMetaHolder = storyIterator.next(); - Object storyMetaData = getObjectField(STORY_UPDATE_METADATA, storyMetaHolder); - String storyId = getObjectField(STORY_UPDATE_METADATA_ID, storyMetaData); - - if (stealthySnapSet.contains(storyId)) - storyIterator.remove(); - } - - stealthySnapSet.clear(); - - Timber.d("Stripped %s stories from update list", (storyUpdateListSize - storyUpdateList.size())); - } - } - ); - - /** - * =========================================================================== - * General network manager hook - * =========================================================================== - */ - hookMethod( - NETWORK_EXECUTE_SYNC, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - String url = (String) callMethod(param.thisObject, "getUrl"); - Timber.d("ExecAsyncUrl: " + url); - - if (!((boolean) getPref(DEFAULT_CHAT_STEALTH) || (boolean) getPref(BLOCK_OUTGOING_TYPING_NOTIFICATION))) - return; - - if (url.endsWith("chat_typing")) { - param.setResult(null); - } - } - } - ); - - /** - * =========================================================================== - * Chat network update hook - * =========================================================================== - */ - hookMethod( - DISPATCH_CHAT_UPDATE, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Timber.d("Chat event"); - Timber.d("Param1: " + param.args[0]); - Timber.d("Param2: " + param.args[1]); - - if (getPref(DEFAULT_CHAT_STEALTH)) { - Timber.d("Bypassed"); - param.setResult(null); - } - } - } - ); - - /** - * =========================================================================== - * Chat Message hasBeenRead hook - * =========================================================================== - */ - hookMethod( - MARK_DIRECT_CHAT_VIEWED_PRESENT, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Timber.d("Marking as read (Present while received): " + param.args[0]); - - if (getPref(DEFAULT_CHAT_STEALTH)) - param.setResult(false); - } - } - ); - - hookMethod( - MARK_DIRECT_CHAT_VIEWED_UNPRESENT, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Timber.d("Marking as read (Not present while received): " + param.args[1]); - - if (getPref(DEFAULT_CHAT_STEALTH)) - param.setResult(false); - } - } - ); - - hookMethod( - MARK_GROUP_CHAT_VIEWED, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Timber.d("KAL Dun got called: " + param.args[0]); - - if (getPref(DEFAULT_CHAT_STEALTH)) - param.setResult(null); - } - } - ); - - /** - * =========================================================================== - * Chat Header Button hook - * =========================================================================== - */ - - if (getPref(SHOW_CHAT_STEALTH_BUTTON)) { - hookAllConstructors( - CHAT_V10_BUILDER, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - View topPanel = getObjectField(CHAT_TOP_PANEL_VIEW, param.thisObject); - RelativeLayout headerTitle = getView(topPanel, getId(ContextHelper.getActivity(), "chat_header_title")); - - boolean isCheetah = getView(headerTitle, cheetahHeaderId) != null; - - int headerId = isCheetah ? - cheetahHeaderId : oldHeaderId; - - headerTitle.addView(viewProvider.getStealthChatButton(ContextHelper.getActivity(), headerId, getModuleContext(ContextHelper.getActivity()), isCheetah)); - } - } - ); - } - - /** - * =========================================================================== - * Profile Navigation Buttons hook - * =========================================================================== - */ - hookConstructor( - CREATE_CHEETAH_PROFILE_SETTINGS_VIEW, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - LinearLayout snapcodeContainer = (LinearLayout) param.args[0]; - - snapcodeContainer.addView(detach(cheetahStealthContainer)); - } - } - ); - } - - - @Override - public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { - cheetahHeaderId = getId(snapActivity, "chat_name_and_story_container"); - oldHeaderId = getId(snapActivity, "chat_friends_name"); - cheetahStealthContainer = viewProvider.getProfileContainer(snapActivity, getModuleContext(snapActivity)); - stealthContainer = viewProvider.getProfileContainer(snapActivity, getModuleContext(snapActivity)); - } - - private void assignStealthToActiveLayout(Activity snapActivity) { - Iterator activeLayoutIterator = activeLayouts.iterator(); - - while (activeLayoutIterator.hasNext()) { - FrameLayout activeLayout = activeLayoutIterator.next(); - - Timber.d("Testing layout: " + activeLayout); - Timber.d("WindowVis: %s", activeLayout.getWindowVisibility()); - - if (activeLayout.getWindowVisibility() == View.GONE) { - Timber.d("Active layout is dead... removing from list"); - activeLayoutIterator.remove(); - } else { - if (activeLayout.findViewById(getIdFromString("stealth_layout")) != null) { - Timber.i("Active layout already has stealth layout... skipping"); - continue; - } - - activeLayout.addView(viewProvider.getStealthSnapLayout(snapActivity, getModuleContext(snapActivity))); - } - } - } - - private boolean handleStealthCheck(String snapId) { - Timber.d("BypassActive: %s", bypassNextStealthView); - - if (bypassNextStealthView) { - Timber.d("Not using stealth for snap"); - bypassNextStealthView = !(boolean) getPref(DEFAULT_SNAP_STEALTH); - stealthBypassSet.add(snapId); - stealthySnapSet.remove(snapId); - return false; - } - - if (stealthBypassSet.contains(snapId)) { - Timber.d("Snap has already been marked as NON STEALTH"); - return false; - } - - stealthySnapSet.add(snapId); - bypassNextStealthView = !(boolean) getPref(DEFAULT_SNAP_STEALTH); - return true; - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.app.Activity; +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.ModulePack.Fragments.KotlinViews.StealthViewProvider; +import com.ljmu.andre.snaptools.ModulePack.Fragments.StealthViewingFragment; +import com.ljmu.andre.snaptools.Utils.ContextHelper; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.CHAT_V10_BUILDER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.SNAP_STATUS; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.STORY_SNAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CONSTRUCTOR_OPERA_PAGE_VIEW; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.CREATE_CHEETAH_PROFILE_SETTINGS_VIEW; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.DISPATCH_CHAT_UPDATE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_RECEIVED_SNAP_PAYLOAD; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_SNAP_ID; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.GET_STORY_SNAP_PAYLOAD; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.MARK_DIRECT_CHAT_VIEWED_PRESENT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.MARK_DIRECT_CHAT_VIEWED_UNPRESENT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.MARK_GROUP_CHAT_VIEWED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.MARK_STORY_VIEWED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.NETWORK_EXECUTE_SYNC; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.OPENED_SNAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SET_SNAP_STATUS; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_DISPLAYED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_BUILDER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_GET_OBJECT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_INSERT_OBJECT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.CHAT_TOP_PANEL_VIEW; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.RECEIVED_SNAP_PAYLOAD_HOLDER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.RECEIVED_SNAP_PAYLOAD_MAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_ADVANCER_DISPLAY_STATE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_ADVANCER_METADATA; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_UPDATE_METADATA; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_UPDATE_METADATA_ID; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_UPDATE_METADATA_LIST; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.*; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ViewFactory.detach; +import static com.ljmu.andre.snaptools.Utils.ContextHelper.getModuleContext; +import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getId; +import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getIdFromString; +import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getView; +import static de.robv.android.xposed.XposedHelpers.callMethod; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class StealthViewing extends ModuleHelper { + private static final int MAX_STEALTH_BYPASS_SIZE = 50; + public static boolean bypassNextStealthView; + private List activeLayouts = new ArrayList<>(); + private Set stealthySnapSet = Collections.newSetFromMap(new LinkedHashMap() { + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > 100; + } + }); + + private Set stealthBypassSet = Collections.newSetFromMap(new LinkedHashMap() { + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > MAX_STEALTH_BYPASS_SIZE; + } + }); + private StealthViewProvider viewProvider = new StealthViewProvider(); + + private int cheetahHeaderId, oldHeaderId; + private ViewGroup cheetahStealthContainer, stealthContainer; + + public StealthViewing(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + @Override + public FragmentHelper[] getUIFragments() { + return new FragmentHelper[]{ + new StealthViewingFragment() + }; + } + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + bypassNextStealthView = !(boolean) getPref(DEFAULT_SNAP_STEALTH); + + if (getPref(SHOW_SNAP_STEALTH_BUTTON)) { + hookConstructor( + CONSTRUCTOR_OPERA_PAGE_VIEW, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Timber.d("Opera view created.... Assigning active view"); + activeLayouts.add((FrameLayout) param.thisObject); + } + } + ); + + hookMethod( + OPENED_SNAP, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Timber.d("Direct snap displayed... Binding stealth to active layout"); + + if (Looper.myLooper() != Looper.getMainLooper()) { + new Handler(Looper.getMainLooper()).post(() -> assignStealthToActiveLayout(ContextHelper.getActivity())); + } else + assignStealthToActiveLayout(ContextHelper.getActivity()); + } + } + ); + + if (!Saving.hasLoadedHooks) { + /** + * =========================================================================== + * Force Stories to contain their matched MetaData + * =========================================================================== + */ + hookMethod( + STORY_METADATA_BUILDER, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Object storyMetadata = param.getResult(); + callHook(STORY_METADATA_INSERT_OBJECT, storyMetadata, "STORY_REPLY_SNAP", param.args[0]); + } + } + ); + } + + /** + * =========================================================================== + * Story displayed hook + * =========================================================================== + */ + hookMethod( + STORY_DISPLAYED, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Object displayState = getObjectField(STORY_ADVANCER_DISPLAY_STATE, param.thisObject); + if (displayState == null || !displayState.toString().equals("FULLY_DISPLAYED")) + return; + + Object snapMetaData = getObjectField(STORY_ADVANCER_METADATA, param.thisObject); + + Object storySnap = callHook(STORY_METADATA_GET_OBJECT, snapMetaData, "STORY_REPLY_SNAP"); + + if (storySnap == null) { + Timber.d("StorySnap null: Probably not a normal story"); + return; + } + + Timber.d("Story snap displayed... Binding stealth to active layout"); + + if (Looper.myLooper() != Looper.getMainLooper()) { + new Handler(Looper.getMainLooper()).post(() -> assignStealthToActiveLayout(ContextHelper.getActivity())); + } else + assignStealthToActiveLayout(ContextHelper.getActivity()); + } + } + ); + } + + /** + * =========================================================================== + * Snap status updater + * =========================================================================== + */ + try { + Class statusEnumClass = HookResolver.resolveHookClass(SNAP_STATUS); + Class storySnapClass = HookResolver.resolveHookClass(STORY_SNAP); + + Object unviewedEnum = Enum.valueOf(statusEnumClass, "UNVIEWED_AND_LOADED"); + Object receievedEnum = Enum.valueOf(statusEnumClass, "RECEIVED_AND_VIEWED"); + Object viewedEnum = Enum.valueOf(statusEnumClass, "VIEWED_AND_REPLAY_AVAILABLE"); + + hookMethod( + SET_SNAP_STATUS, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + if (param.thisObject.getClass().equals(storySnapClass)) { + return; + } + + String snapId = callHook(GET_SNAP_ID, param.thisObject); + + Enum statusEnum = (Enum) param.args[0]; + + if (statusEnum.equals(receievedEnum) || statusEnum.equals(viewedEnum)) { + if (handleStealthCheck(snapId)) { + param.args[0] = unviewedEnum; + } + } + } + } + ); + } catch (HookNotFoundException | IllegalArgumentException e) { + Timber.e(e); + moduleLoadState.fail(); + } + + /** + * =========================================================================== + * Story status updater + * =========================================================================== + */ + hookMethod( + MARK_STORY_VIEWED, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + String snapId = callHook(GET_SNAP_ID, param.args[1]); + + if (handleStealthCheck(snapId) && !(boolean) getPref(STEALTH_MARK_STORY_VIEWED)) + param.setResult(null); + } + } + ); + + /** + * =========================================================================== + * Received snap update payload provider + * =========================================================================== + */ + hookMethod( + GET_RECEIVED_SNAP_PAYLOAD, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Object snapPayloadHolder = getObjectField(RECEIVED_SNAP_PAYLOAD_HOLDER, param.thisObject); + Map snapMap = getObjectField(RECEIVED_SNAP_PAYLOAD_MAP, snapPayloadHolder); + + for (String shouldntStealth : stealthySnapSet) { + snapMap.remove(shouldntStealth); + } + + Timber.d("EntrySize: " + snapMap.size()); + } + } + ); + + /** + * =========================================================================== + * Story snap update payload provider + * =========================================================================== + */ + hookMethod( + GET_STORY_SNAP_PAYLOAD, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + List storyUpdateList = getObjectField(STORY_UPDATE_METADATA_LIST, param.thisObject); + + int storyUpdateListSize = storyUpdateList.size(); + + Iterator storyIterator = storyUpdateList.iterator(); + + while (storyIterator.hasNext()) { + Object storyMetaHolder = storyIterator.next(); + Object storyMetaData = getObjectField(STORY_UPDATE_METADATA, storyMetaHolder); + String storyId = getObjectField(STORY_UPDATE_METADATA_ID, storyMetaData); + + if (stealthySnapSet.contains(storyId)) + storyIterator.remove(); + } + + stealthySnapSet.clear(); + + Timber.d("Stripped %s stories from update list", (storyUpdateListSize - storyUpdateList.size())); + } + } + ); + + /** + * =========================================================================== + * General network manager hook + * =========================================================================== + */ + hookMethod( + NETWORK_EXECUTE_SYNC, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + String url = (String) callMethod(param.thisObject, "getUrl"); + Timber.d("ExecAsyncUrl: " + url); + + if (!((boolean) getPref(DEFAULT_CHAT_STEALTH) || (boolean) getPref(BLOCK_OUTGOING_TYPING_NOTIFICATION))) + return; + + if (url.endsWith("chat_typing")) { + param.setResult(null); + } + } + } + ); + + /** + * =========================================================================== + * Chat network update hook + * =========================================================================== + */ + hookMethod( + DISPATCH_CHAT_UPDATE, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Timber.d("Chat event"); + Timber.d("Param1: " + param.args[0]); + Timber.d("Param2: " + param.args[1]); + + if (getPref(DEFAULT_CHAT_STEALTH)) { + Timber.d("Bypassed"); + param.setResult(null); + } + } + } + ); + + /** + * =========================================================================== + * Chat Message hasBeenRead hook + * =========================================================================== + */ + hookMethod( + MARK_DIRECT_CHAT_VIEWED_PRESENT, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Timber.d("Marking as read (Present while received): " + param.args[0]); + + if (getPref(DEFAULT_CHAT_STEALTH)) + param.setResult(false); + } + } + ); + + hookMethod( + MARK_DIRECT_CHAT_VIEWED_UNPRESENT, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Timber.d("Marking as read (Not present while received): " + param.args[1]); + + if (getPref(DEFAULT_CHAT_STEALTH)) + param.setResult(false); + } + } + ); + + hookMethod( + MARK_GROUP_CHAT_VIEWED, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Timber.d("KAL Dun got called: " + param.args[0]); + + if (getPref(DEFAULT_CHAT_STEALTH)) + param.setResult(null); + } + } + ); + + /** + * =========================================================================== + * Chat Header Button hook + * =========================================================================== + */ + + if (getPref(SHOW_CHAT_STEALTH_BUTTON)) { + hookAllConstructors( + CHAT_V10_BUILDER, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + View topPanel = getObjectField(CHAT_TOP_PANEL_VIEW, param.thisObject); + RelativeLayout headerTitle = getView(topPanel, getId(ContextHelper.getActivity(), "chat_header_title")); + + boolean isCheetah = getView(headerTitle, cheetahHeaderId) != null; + + int headerId = isCheetah ? + cheetahHeaderId : oldHeaderId; + + headerTitle.addView(viewProvider.getStealthChatButton(ContextHelper.getActivity(), headerId, getModuleContext(ContextHelper.getActivity()), isCheetah)); + } + } + ); + } + + /** + * =========================================================================== + * Profile Navigation Buttons hook + * =========================================================================== + */ + hookConstructor( + CREATE_CHEETAH_PROFILE_SETTINGS_VIEW, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + LinearLayout snapcodeContainer = (LinearLayout) param.args[0]; + + snapcodeContainer.addView(detach(cheetahStealthContainer)); + } + } + ); + } + + + @Override + public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { + cheetahHeaderId = getId(snapActivity, "chat_name_and_story_container"); + oldHeaderId = getId(snapActivity, "chat_friends_name"); + cheetahStealthContainer = viewProvider.getProfileContainer(snapActivity, getModuleContext(snapActivity)); + stealthContainer = viewProvider.getProfileContainer(snapActivity, getModuleContext(snapActivity)); + } + + private void assignStealthToActiveLayout(Activity snapActivity) { + Iterator activeLayoutIterator = activeLayouts.iterator(); + + while (activeLayoutIterator.hasNext()) { + FrameLayout activeLayout = activeLayoutIterator.next(); + + Timber.d("Testing layout: " + activeLayout); + Timber.d("WindowVis: %s", activeLayout.getWindowVisibility()); + + if (activeLayout.getWindowVisibility() == View.GONE) { + Timber.d("Active layout is dead... removing from list"); + activeLayoutIterator.remove(); + } else { + if (activeLayout.findViewById(getIdFromString("stealth_layout")) != null) { + Timber.i("Active layout already has stealth layout... skipping"); + continue; + } + + activeLayout.addView(viewProvider.getStealthSnapLayout(snapActivity, getModuleContext(snapActivity))); + } + } + } + + private boolean handleStealthCheck(String snapId) { + Timber.d("BypassActive: %s", bypassNextStealthView); + + if (bypassNextStealthView) { + Timber.d("Not using stealth for snap"); + bypassNextStealthView = !(boolean) getPref(DEFAULT_SNAP_STEALTH); + stealthBypassSet.add(snapId); + stealthySnapSet.remove(snapId); + return false; + } + + if (stealthBypassSet.contains(snapId)) { + Timber.d("Snap has already been marked as NON STEALTH"); + return false; + } + + stealthySnapSet.add(snapId); + bypassNextStealthView = !(boolean) getPref(DEFAULT_SNAP_STEALTH); + return true; + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/StoryBlocker.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/StoryBlocker.java index 6dceaf2..d8cc5ce 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/StoryBlocker.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/StoryBlocker.java @@ -1,277 +1,277 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.app.Activity; -import android.content.Context; -import android.os.Bundle; -import androidx.core.content.ContextCompat; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.RelativeLayout; -import android.widget.RelativeLayout.LayoutParams; - -import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.ModulePack.Fragments.StoryBlockingSettingsFragment; -import com.ljmu.andre.snaptools.ModulePack.Notifications.SafeToastAdapter; -import com.ljmu.andre.snaptools.Utils.AnimationUtils; -import com.ljmu.andre.snaptools.Utils.ContextHelper; -import com.ljmu.andre.snaptools.Utils.PreferenceHelpers; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import de.robv.android.xposed.XC_MethodReplacement; -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.STORY_FRIEND_RECENT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.STORY_FRIEND_VIEWED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.STORY_SPONSORED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.FRIEND_PROFILE_POPUP_CREATED; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.FRIEND_STORY_TILE_USERNAME; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LOAD_INITIAL_STORIES; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LOAD_NEW_STORY; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LOAD_STORIES; -//import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LOAD_STORY_SNAP_ADVERT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_COLLECTION_MAP; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.BLOCKED_STORIES; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_ADVERTS_BLOCKED; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_DISCOVER_BLOCKED; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_SHOW_BUTTON; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ViewFactory.detach; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ViewFactory.dp; -import static com.ljmu.andre.snaptools.Utils.ContextHelper.getModuleContext; -import static com.ljmu.andre.snaptools.Utils.PreferenceHelpers.collectionContains; -import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getColor; -import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getDrawable; -import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getView; -import static de.robv.android.xposed.XposedHelpers.callMethod; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class StoryBlocker extends ModuleHelper { - - private Button blockerButton; - - public StoryBlocker(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - @Override - public FragmentHelper[] getUIFragments() { - return new FragmentHelper[]{new StoryBlockingSettingsFragment()}; - } - - // =========================================================================== - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - boolean blockDiscovery = getPref(STORY_BLOCKER_DISCOVER_BLOCKED); -/* - if (getPref(STORY_BLOCKER_ADVERTS_BLOCKED)) { - hookMethod( - LOAD_STORY_SNAP_ADVERT, - XC_MethodReplacement.DO_NOTHING - ); - } -*/ - if (getPref(STORY_BLOCKER_SHOW_BUTTON)) { - - hookMethod( - FRIEND_PROFILE_POPUP_CREATED, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Bundle arguments = (Bundle) callMethod(param.thisObject, "getArguments"); - String username = arguments.getString("FRIEND_MINI_PROFILE_USERNAME"); - - if (username == null) { - Timber.e(new Throwable("Empty StoryTile Username")); - return; - } - - username = username.toLowerCase(); - - boolean isUserBlocked = collectionContains(BLOCKED_STORIES, username); - - RelativeLayout relativeView = getView((View) param.args[0], "mini_profile_view"); - - relativeView.addView(detach(blockerButton)); - - updateBlockerButtonState(ContextHelper.getModuleContext(snapContext), blockerButton, isUserBlocked); - - String finalUsername = username; - blockerButton.setOnClickListener(v -> { - boolean isUserBlocked1 = collectionContains(BLOCKED_STORIES, finalUsername); - - if (isUserBlocked1) { - PreferenceHelpers.removeFromCollection(BLOCKED_STORIES, finalUsername); - } else { - PreferenceHelpers.addToCollection(BLOCKED_STORIES, finalUsername); - } - - updateBlockerButtonState(ContextHelper.getModuleContext(snapContext), blockerButton, !isUserBlocked1); - - SafeToastAdapter.showDefaultToast( - ContextHelper.getActivity(), - "Restart Snapchat for the changes to take affect" - ); - }); - - AnimationUtils.expand(blockerButton, 4); - } - } - ); - } - -// if (blockDiscovery) { -// ST_MethodHook hooker = new ST_MethodHook() { -// @Override protected void after(MethodHookParam param) throws Throwable { -// if (!(boolean) XposedHelpers.callMethod(param.thisObject, STORY_DATA_IS_SUBSCRIBED.getVarName())) -// param.setThrowable(new NullPointerException()); -// } -// }; -// -// hookAllConstructors( -// STORY_DATA_DISCOVER, -// hooker -// ); -// hookAllConstructors( -// STORY_DATA_DYNAMIC, -// hooker -// ); -// hookAllConstructors( -// STORY_DATA_MAP, -// hooker -// ); -// hookAllConstructors( -// STORY_DATA_PROMOTED, -// hooker -// ); -// hookAllConstructors( -// STORY_DATA_MOMENT, -// hooker -// ); -// } - - hookMethod( - LOAD_INITIAL_STORIES, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - Map map = (Map) param.args[3]; - Map map2 = (Map) param.args[4]; - - HashSet blockedStories = getPref(BLOCKED_STORIES); - - for (String blockedUser : blockedStories) { - map.remove(blockedUser); - map2.remove(blockedUser); - } - } - } - ); - - hookMethod( - LOAD_NEW_STORY, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - Map map = getObjectField(STORY_COLLECTION_MAP, param.thisObject); - - if (map.isEmpty()) - return; - - HashSet blockedStories = getPref(BLOCKED_STORIES); - - for (String blockedUser : blockedStories) { - map.remove(blockedUser); - } - } - } - ); - - try { - Class sponsoredStoryClass = HookResolver.resolveHookClass(STORY_SPONSORED); - Class recentStoryClass = HookResolver.resolveHookClass(STORY_FRIEND_RECENT); - Class friendStoryClass = HookResolver.resolveHookClass(STORY_FRIEND_VIEWED); - - hookMethod( - LOAD_STORIES, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - try { - List originalList = (List) param.args[0]; - List iterativeList = new ArrayList<>(originalList); - - for (Object storyItemObject : iterativeList) { - Class storyItemClass = storyItemObject.getClass(); - - Timber.d("StoryItem: " + storyItemClass); - - if (blockDiscovery && storyItemClass.equals(sponsoredStoryClass)) { - originalList.remove(storyItemObject); - } else if (storyItemClass.equals(friendStoryClass) || storyItemClass.equals(recentStoryClass)) { - try { - String username = callHook(FRIEND_STORY_TILE_USERNAME, storyItemObject); - if (username != null && !username.isEmpty() && collectionContains(BLOCKED_STORIES, username.toLowerCase())) - originalList.remove(storyItemObject); - } catch (Throwable t) { - Timber.e(t); - } - } - } - } catch (UnsupportedOperationException ignored) { - - } - } - } - ); - } catch (HookNotFoundException e) { - Timber.e(e, "Failed loading story blockers"); - moduleLoadState.fail(); - } - } - - private void updateBlockerButtonState(Context modContext, Button button, boolean isUserBlocked) { - if (isUserBlocked) { - button.setBackgroundResource(getDrawable(modContext, "neutral_button")); - button.setTextColor(ContextCompat.getColor(modContext, getColor(modContext, "primaryLight"))); - button.setText("Unblock Stories"); - } else { - button.setBackgroundResource(getDrawable(modContext, "error_button")); - button.setTextColor(ContextCompat.getColor(modContext, getColor(modContext, "errorLight"))); - button.setText("Block Stories"); - } - - AnimationUtils.scaleUp(button); - } - - @Override - public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { - if (getPref(STORY_BLOCKER_SHOW_BUTTON)) { - Context modContext = getModuleContext(snapActivity); - int horizontalPadding = dp(20, snapActivity); - int verticalPadding = dp(7, snapActivity); - - blockerButton = new Button(modContext); - blockerButton.setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding); - - RelativeLayout.LayoutParams buttonparams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - buttonparams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); - buttonparams.addRule(RelativeLayout.CENTER_HORIZONTAL); - buttonparams.bottomMargin = dp(20, snapActivity); - blockerButton.setLayoutParams(buttonparams); - } - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.app.Activity; +import android.content.Context; +import android.os.Bundle; +import androidx.core.content.ContextCompat; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.RelativeLayout.LayoutParams; + +import com.ljmu.andre.snaptools.Exceptions.HookNotFoundException; +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.ModulePack.Fragments.StoryBlockingSettingsFragment; +import com.ljmu.andre.snaptools.ModulePack.Notifications.SafeToastAdapter; +import com.ljmu.andre.snaptools.Utils.AnimationUtils; +import com.ljmu.andre.snaptools.Utils.ContextHelper; +import com.ljmu.andre.snaptools.Utils.PreferenceHelpers; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import de.robv.android.xposed.XC_MethodReplacement; +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.STORY_FRIEND_RECENT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.STORY_FRIEND_VIEWED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.STORY_SPONSORED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.FRIEND_PROFILE_POPUP_CREATED; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.FRIEND_STORY_TILE_USERNAME; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LOAD_INITIAL_STORIES; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LOAD_NEW_STORY; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LOAD_STORIES; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.LOAD_STORY_SNAP_ADVERT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.STORY_COLLECTION_MAP; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.BLOCKED_STORIES; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_ADVERTS_BLOCKED; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_DISCOVER_BLOCKED; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.STORY_BLOCKER_SHOW_BUTTON; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ViewFactory.detach; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ViewFactory.dp; +import static com.ljmu.andre.snaptools.Utils.ContextHelper.getModuleContext; +import static com.ljmu.andre.snaptools.Utils.PreferenceHelpers.collectionContains; +import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getColor; +import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getDrawable; +import static com.ljmu.andre.snaptools.Utils.ResourceUtils.getView; +import static de.robv.android.xposed.XposedHelpers.callMethod; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class StoryBlocker extends ModuleHelper { + + private Button blockerButton; + + public StoryBlocker(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + @Override + public FragmentHelper[] getUIFragments() { + return new FragmentHelper[]{new StoryBlockingSettingsFragment()}; + } + + // =========================================================================== + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + boolean blockDiscovery = getPref(STORY_BLOCKER_DISCOVER_BLOCKED); + + if (getPref(STORY_BLOCKER_ADVERTS_BLOCKED)) { + hookMethod( + LOAD_STORY_SNAP_ADVERT, + XC_MethodReplacement.DO_NOTHING + ); + } + + if (getPref(STORY_BLOCKER_SHOW_BUTTON)) { + + hookMethod( + FRIEND_PROFILE_POPUP_CREATED, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Bundle arguments = (Bundle) callMethod(param.thisObject, "getArguments"); + String username = arguments.getString("FRIEND_MINI_PROFILE_USERNAME"); + + if (username == null) { + Timber.e(new Throwable("Empty StoryTile Username")); + return; + } + + username = username.toLowerCase(); + + boolean isUserBlocked = collectionContains(BLOCKED_STORIES, username); + + RelativeLayout relativeView = getView((View) param.args[0], "mini_profile_view"); + + relativeView.addView(detach(blockerButton)); + + updateBlockerButtonState(ContextHelper.getModuleContext(snapContext), blockerButton, isUserBlocked); + + String finalUsername = username; + blockerButton.setOnClickListener(v -> { + boolean isUserBlocked1 = collectionContains(BLOCKED_STORIES, finalUsername); + + if (isUserBlocked1) { + PreferenceHelpers.removeFromCollection(BLOCKED_STORIES, finalUsername); + } else { + PreferenceHelpers.addToCollection(BLOCKED_STORIES, finalUsername); + } + + updateBlockerButtonState(ContextHelper.getModuleContext(snapContext), blockerButton, !isUserBlocked1); + + SafeToastAdapter.showDefaultToast( + ContextHelper.getActivity(), + "Restart Snapchat for the changes to take affect" + ); + }); + + AnimationUtils.expand(blockerButton, 4); + } + } + ); + } + +// if (blockDiscovery) { +// ST_MethodHook hooker = new ST_MethodHook() { +// @Override protected void after(MethodHookParam param) throws Throwable { +// if (!(boolean) XposedHelpers.callMethod(param.thisObject, STORY_DATA_IS_SUBSCRIBED.getVarName())) +// param.setThrowable(new NullPointerException()); +// } +// }; +// +// hookAllConstructors( +// STORY_DATA_DISCOVER, +// hooker +// ); +// hookAllConstructors( +// STORY_DATA_DYNAMIC, +// hooker +// ); +// hookAllConstructors( +// STORY_DATA_MAP, +// hooker +// ); +// hookAllConstructors( +// STORY_DATA_PROMOTED, +// hooker +// ); +// hookAllConstructors( +// STORY_DATA_MOMENT, +// hooker +// ); +// } + + hookMethod( + LOAD_INITIAL_STORIES, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + Map map = (Map) param.args[3]; + Map map2 = (Map) param.args[4]; + + HashSet blockedStories = getPref(BLOCKED_STORIES); + + for (String blockedUser : blockedStories) { + map.remove(blockedUser); + map2.remove(blockedUser); + } + } + } + ); + + hookMethod( + LOAD_NEW_STORY, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + Map map = getObjectField(STORY_COLLECTION_MAP, param.thisObject); + + if (map.isEmpty()) + return; + + HashSet blockedStories = getPref(BLOCKED_STORIES); + + for (String blockedUser : blockedStories) { + map.remove(blockedUser); + } + } + } + ); + + try { + Class sponsoredStoryClass = HookResolver.resolveHookClass(STORY_SPONSORED); + Class recentStoryClass = HookResolver.resolveHookClass(STORY_FRIEND_RECENT); + Class friendStoryClass = HookResolver.resolveHookClass(STORY_FRIEND_VIEWED); + + hookMethod( + LOAD_STORIES, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + try { + List originalList = (List) param.args[0]; + List iterativeList = new ArrayList<>(originalList); + + for (Object storyItemObject : iterativeList) { + Class storyItemClass = storyItemObject.getClass(); + + Timber.d("StoryItem: " + storyItemClass); + + if (blockDiscovery && storyItemClass.equals(sponsoredStoryClass)) { + originalList.remove(storyItemObject); + } else if (storyItemClass.equals(friendStoryClass) || storyItemClass.equals(recentStoryClass)) { + try { + String username = callHook(FRIEND_STORY_TILE_USERNAME, storyItemObject); + if (username != null && !username.isEmpty() && collectionContains(BLOCKED_STORIES, username.toLowerCase())) + originalList.remove(storyItemObject); + } catch (Throwable t) { + Timber.e(t); + } + } + } + } catch (UnsupportedOperationException ignored) { + + } + } + } + ); + } catch (HookNotFoundException e) { + Timber.e(e, "Failed loading story blockers"); + moduleLoadState.fail(); + } + } + + private void updateBlockerButtonState(Context modContext, Button button, boolean isUserBlocked) { + if (isUserBlocked) { + button.setBackgroundResource(getDrawable(modContext, "neutral_button")); + button.setTextColor(ContextCompat.getColor(modContext, getColor(modContext, "primaryLight"))); + button.setText("Unblock Stories"); + } else { + button.setBackgroundResource(getDrawable(modContext, "error_button")); + button.setTextColor(ContextCompat.getColor(modContext, getColor(modContext, "errorLight"))); + button.setText("Block Stories"); + } + + AnimationUtils.scaleUp(button); + } + + @Override + public void prepareActivity(ClassLoader snapClassLoader, Activity snapActivity) { + if (getPref(STORY_BLOCKER_SHOW_BUTTON)) { + Context modContext = getModuleContext(snapActivity); + int horizontalPadding = dp(20, snapActivity); + int verticalPadding = dp(7, snapActivity); + + blockerButton = new Button(modContext); + blockerButton.setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding); + + RelativeLayout.LayoutParams buttonparams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + buttonparams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); + buttonparams.addRule(RelativeLayout.CENTER_HORIZONTAL); + buttonparams.bottomMargin = dp(20, snapActivity); + blockerButton.setLayoutParams(buttonparams); + } + } +} diff --git a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/UnlimitedViewing.java b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/UnlimitedViewing.java index 46bea9d..bb25bd6 100644 --- a/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/UnlimitedViewing.java +++ b/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/UnlimitedViewing.java @@ -1,134 +1,134 @@ -package com.ljmu.andre.snaptools.ModulePack; - -import android.content.Context; - -import com.ljmu.andre.snaptools.Fragments.FragmentHelper; -import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; - -import java.util.concurrent.TimeUnit; - -import timber.log.Timber; - -import static com.ljmu.andre.GsonPreferences.Preferences.getPref; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.ENUM_SNAP_ADVANCE_MODES; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.RECEIVED_SNAP; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_COUNTDOWN_POSTER; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_GET_MEDIA_TYPE; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_INSERT_OBJECT; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.TEXTURE_VIDVIEW_SETLOOPING; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.TEXTURE_VIDVIEW_START; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.MCANONICALDISPLAYNAME; -import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.NO_AUTO_ADVANCE; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.UNLIMITED_VIEWING_IMAGES; -import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.UNLIMITED_VIEWING_VIDEOS; -import static de.robv.android.xposed.XposedHelpers.getStaticObjectField; - -/** - * This class was created by Andre R M (SID: 701439) - * It and its contents are free to use by all - */ - -public class UnlimitedViewing extends ModuleHelper { - public UnlimitedViewing(String name, boolean canBeDisabled) { - super(name, canBeDisabled); - } - - // =========================================================================== - - @Override - public FragmentHelper[] getUIFragments() { - return null; - } - - // =========================================================================== - - @Override - public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { - boolean unlimitedViewingImages = getPref(UNLIMITED_VIEWING_IMAGES); - boolean unlimitedViewingVideos = getPref(UNLIMITED_VIEWING_VIDEOS); - - hookMethod( - TEXTURE_VIDVIEW_START, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - callHook(TEXTURE_VIDVIEW_SETLOOPING, param.thisObject, true); - } - }); - - - hookMethod( - SNAP_COUNTDOWN_POSTER, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - param.args[0] = TimeUnit.DAYS.toMillis(1); - } - }); - - try { - Class enumClass = HookResolver.resolveHookClass(ENUM_SNAP_ADVANCE_MODES); - Object NO_AUTO_ADVANCE_ENUM = getStaticObjectField(enumClass, NO_AUTO_ADVANCE.getVarName()); - String durationKey = "total_duration_sec"; - String autoAdvanceKey = "auto_advance_mode"; - - hookMethod( - STORY_METADATA_INSERT_OBJECT, - new ST_MethodHook() { - @Override - protected void before(MethodHookParam param) throws Throwable { - String key = (String) param.args[0]; - - if (key.equals(durationKey)) - param.args[1] = TimeUnit.DAYS.toSeconds(1); - else if (key.equals(autoAdvanceKey)) - param.args[1] = NO_AUTO_ADVANCE_ENUM; - } - }); - - } catch (Throwable e) { - Timber.e(e, "Couldn't find AdvanceMode Enum"); - moduleLoadState.fail(); - } - - hookAllConstructors( - RECEIVED_SNAP, - new ST_MethodHook() { - @Override - protected void after(MethodHookParam param) throws Throwable { - boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, param.thisObject); - - if (isVideo && !unlimitedViewingVideos) - return; - - if (!isVideo && !unlimitedViewingImages) - return; - - setObjectField( - MCANONICALDISPLAYNAME, - param.thisObject, - TimeUnit.DAYS.toSeconds(1) - ); - } - } - ); - - - /*hookAllConstructors( - GALLERY_SNAP, - new ST_MethodHook() { - @Override protected void after(MethodHookParam param) throws Throwable { - setObjectField( - GALLERY_STORY_DURATION, - param.thisObject, - TimeUnit.DAYS.toSeconds(1) - ); - } - }); - - hookMethod( - GALLERY_SNAP_GET_DURATION, - XC_MethodReplacement.returnConstant(TimeUnit.DAYS.toSeconds(1)) - );*/ - } -} +package com.ljmu.andre.snaptools.ModulePack; + +import android.content.Context; + +import com.ljmu.andre.snaptools.Fragments.FragmentHelper; +import com.ljmu.andre.snaptools.Utils.XposedUtils.ST_MethodHook; + +import java.util.concurrent.TimeUnit; + +import timber.log.Timber; + +import static com.ljmu.andre.GsonPreferences.Preferences.getPref; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.ENUM_SNAP_ADVANCE_MODES; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookClassDef.RECEIVED_SNAP; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_COUNTDOWN_POSTER; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.SNAP_GET_MEDIA_TYPE; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.STORY_METADATA_INSERT_OBJECT; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.TEXTURE_VIDVIEW_SETLOOPING; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookDef.TEXTURE_VIDVIEW_START; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.MCANONICALDISPLAYNAME; +import static com.ljmu.andre.snaptools.ModulePack.HookDefinitions.HookVariableDef.NO_AUTO_ADVANCE; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.UNLIMITED_VIEWING_IMAGES; +import static com.ljmu.andre.snaptools.ModulePack.Utils.ModulePreferenceDef.UNLIMITED_VIEWING_VIDEOS; +import static de.robv.android.xposed.XposedHelpers.getStaticObjectField; + +/** + * This class was created by Andre R M (SID: 701439) + * It and its contents are free to use by all + */ + +public class UnlimitedViewing extends ModuleHelper { + public UnlimitedViewing(String name, boolean canBeDisabled) { + super(name, canBeDisabled); + } + + // =========================================================================== + + @Override + public FragmentHelper[] getUIFragments() { + return null; + } + + // =========================================================================== + + @Override + public void loadHooks(ClassLoader snapClassLoader, Context snapContext) { + boolean unlimitedViewingImages = getPref(UNLIMITED_VIEWING_IMAGES); + boolean unlimitedViewingVideos = getPref(UNLIMITED_VIEWING_VIDEOS); + + hookMethod( + TEXTURE_VIDVIEW_START, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + callHook(TEXTURE_VIDVIEW_SETLOOPING, param.thisObject, true); + } + }); + + + hookMethod( + SNAP_COUNTDOWN_POSTER, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + param.args[0] = TimeUnit.DAYS.toMillis(1); + } + }); + + try { + Class enumClass = HookResolver.resolveHookClass(ENUM_SNAP_ADVANCE_MODES); + Object NO_AUTO_ADVANCE_ENUM = getStaticObjectField(enumClass, NO_AUTO_ADVANCE.getVarName()); + String durationKey = "total_duration_sec"; + String autoAdvanceKey = "auto_advance_mode"; + + hookMethod( + STORY_METADATA_INSERT_OBJECT, + new ST_MethodHook() { + @Override + protected void before(MethodHookParam param) throws Throwable { + String key = (String) param.args[0]; + + if (key.equals(durationKey)) + param.args[1] = TimeUnit.DAYS.toSeconds(1); + else if (key.equals(autoAdvanceKey)) + param.args[1] = NO_AUTO_ADVANCE_ENUM; + } + }); + + } catch (Throwable e) { + Timber.e(e, "Couldn't find AdvanceMode Enum"); + moduleLoadState.fail(); + } + + hookAllConstructors( + RECEIVED_SNAP, + new ST_MethodHook() { + @Override + protected void after(MethodHookParam param) throws Throwable { + boolean isVideo = callHook(SNAP_GET_MEDIA_TYPE, param.thisObject); + + if (isVideo && !unlimitedViewingVideos) + return; + + if (!isVideo && !unlimitedViewingImages) + return; + + setObjectField( + MCANONICALDISPLAYNAME, + param.thisObject, + TimeUnit.DAYS.toSeconds(1) + ); + } + } + ); + + + /*hookAllConstructors( + GALLERY_SNAP, + new ST_MethodHook() { + @Override protected void after(MethodHookParam param) throws Throwable { + setObjectField( + GALLERY_STORY_DURATION, + param.thisObject, + TimeUnit.DAYS.toSeconds(1) + ); + } + }); + + hookMethod( + GALLERY_SNAP_GET_DURATION, + XC_MethodReplacement.returnConstant(TimeUnit.DAYS.toSeconds(1)) + );*/ + } +} From 389049c7864aa70e0e8148d8ae9aa015214a5379 Mon Sep 17 00:00:00 2001 From: azenyx <53049056+azenyx@users.noreply.github.com> Date: Thu, 6 May 2021 14:41:50 +0100 Subject: [PATCH 5/5] Update README.md --- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5892db7..7fe3da7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,54 @@ # SnapTools -Snaptools for Snapchat 10.48.5.0 Beta +A fork of [Jaqxues'](https://github.com/jaqxues/) SnapTools repository. +This repository contains the source for 10.52.0.0 Beta and 10.48.5.0 Beta. +You can download the APK [here](https://github.com/azenyx/SnapTools_DataProvider/blob/master/Packs/Files/STModulePack_1.0.0.5_Premium_10.52.0.0_Beta.jar) --If for some reason you would like to donate direct your donations to Jaqxues as it wouldnt be possible without him --https://www.paypal.me/jaqxues +Check out the [SnapTools Website](https://snaptools.io) for a brief rundown of the project! + +I will be going through the project and adding additional javadocs as the project deserves a more professional format. If there is any specific code or file that you wish for me to clear up, please feel free to [Open An Issue](https://github.com/Andrerm124/SnapTools_OpenSource/issues/new) thread and I'll do my best to provide information on the topic, however be sure to check out the Points Of Interest section below for the more important systems in the app. + +It should be noted that this source is not intended to be built directly into a directly functional APK, it will require adjustments as certain required files have been redacted due to containing private information (Such as [google_services.json](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/app/google-services.json), [RedactedClasses](https://github.com/Andrerm124/SnapTools_OpenSource/tree/master/app/src/main/java/com/ljmu/andre/snaptools/RedactedClasses), and the certificates located in the [Debug](https://github.com/Andrerm124/SnapTools_OpenSource/tree/master/app/src/debug/assets) and [Release](https://github.com/Andrerm124/SnapTools_OpenSource/tree/master/app/src/release/assets) Assets folders) + +# SnapTools Media +[![Shtuff](https://img.youtube.com/vi/mIkM8KTjoWs/0.jpg)](https://www.youtube.com/watch?v=mIkM8KTjoWs) + +A user created promotional video by [John Luke](https://www.youtube.com/channel/UCVQavYHPmuzDu5eELNC3oWg) + +# Points of Interest +### Framework/ModulePack System +[HookManager](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/app/src/main/java/com/ljmu/andre/snaptools/HookManager.java) + +The entry point for Xposed based code. +*Todo: Add more comments.* + +[FrameworkManager](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/app/src/main/java/com/ljmu/andre/snaptools/Framework/FrameworkManager.java) + +Responsible for managing the loading and injecting of ModulePacks. + +[ModulePack](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/app/src/main/java/com/ljmu/andre/snaptools/Framework/ModulePack.java) + +The interface between the framework and the dynamically loaded ModulePackImpl code. + +[ModulePackImpl](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/ModulePackImpl.java) + +An implementation of ModulePack with the loading and injection systems in place to manage the internal hooking code. + +[HookResolver](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/app/src/pack/java/com/ljmu/andre/snaptools/ModulePack/HookResolver.java) + +Responsible for efficiently generating and caching references to Hooks and HookClasses. + +### General +[MainActivity](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/app/src/main/java/com/ljmu/andre/snaptools/MainActivity.java) + +The majority of the application initialisation and EventBus subscriptions. + +### Custom IntelliJ Plugins + +The following are some support plugins that I created with the intent of automating or making workflow easier. If people are interested I will make separate repositories for these plugins. + +- [StringEncryptorPlugin](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/StringEncryptorPlugin.jar) - A plugin that provides an **Encrypt Strings** function in the right click menu (And can also be bound to a key). This function will automatically replace string literals with the **decryptString(...)** function (Or reverse an already encrypted string), however the encryption key has been hardcoded into the plugin as it was only intended for personal use. If this library is sought after, let me know and I'll fix it up! +- [ApkVersionPlugin](https://github.com/Andrerm124/SnapTools_OpenSource/blob/master/ApkVersionPlugin.jar) - A plugin that scans for **@FrameworkVersion(versionInt)** annotations on methods and displays an error to the developer when there are no conditional checks for when the build version of the app is higher than the build version of the method being called. Again, this has hardcoded values as I never anticipated making the plugin public source. If this is something that interests you, let me know and I'll do what I can! +- [MappingMerger](https://github.com/Andrerm124/SnapTools_OpenSource/tree/master/app/mapping_merger) - As proguard doesn't offer the ability to maintain static and incremental obfuscation, I had to create my own scripts to automatically merge the previously generated proguard file with the **pre-proguard mappings** file (The file that tells proguard what to name each function) and have the ability to re-include any lost mappings from previous builds as proguard strips out unused mappings that we may need for alternate builds. An implementation (Although crude) can be seen [HERE](https://github.com/Andrerm124/SnapTools_OpenSource/blob/cfa45c5adec117f2b57977688450e909f29211ca/app/build.gradle#L187) +### Parting Words + +Finally I would like to take a short moment to say that I have enjoyed every moment of this project thoroughly, even though at times it can be extremely stressful. The community, the friends I've made, and the things I've learnt from this venture has been truly exceptional and hopefully it has been as enjoyable for those that got to experience it as it was for me - Jaqxues

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 z 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 From c4200fe2fb51d155d4b567fd02b101aff0c55995 Mon Sep 17 00:00:00 2001 From: azenyx <53049056+azenyx@users.noreply.github.com> Date: Thu, 6 May 2021 14:33:56 +0100 Subject: [PATCH 3/5] Delete STModulePack_1.1.0.2_Premium_10.82.5.0_unsigned.jar --- ...Pack_1.1.0.2_Premium_10.82.5.0_unsigned.jar | Bin 341926 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 STModulePack_1.1.0.2_Premium_10.82.5.0_unsigned.jar diff --git a/STModulePack_1.1.0.2_Premium_10.82.5.0_unsigned.jar b/STModulePack_1.1.0.2_Premium_10.82.5.0_unsigned.jar deleted file mode 100644 index 23593449dabdae06124e2bc9a4ec53e27c4024e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341926 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