From 5961dd1b17ee4cfa383b54c1e1f794ab71f3e146 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Tue, 28 Mar 2023 14:47:03 +0200 Subject: [PATCH] Add extension (#1447) --- src/all/googledriveindex/AndroidManifest.xml | 2 + src/all/googledriveindex/build.gradle | 13 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3277 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1794 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4477 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8246 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12092 bytes .../googledriveindex/res/web_hi_res_512.png | Bin 0 -> 62731 bytes .../all/googledriveindex/DataModel.kt | 38 ++ .../all/googledriveindex/GoogleDriveIndex.kt | 497 ++++++++++++++++++ 10 files changed, 550 insertions(+) create mode 100644 src/all/googledriveindex/AndroidManifest.xml create mode 100644 src/all/googledriveindex/build.gradle create mode 100644 src/all/googledriveindex/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/web_hi_res_512.png create mode 100644 src/all/googledriveindex/src/eu/kanade/tachiyomi/animeextension/all/googledriveindex/DataModel.kt create mode 100644 src/all/googledriveindex/src/eu/kanade/tachiyomi/animeextension/all/googledriveindex/GoogleDriveIndex.kt diff --git a/src/all/googledriveindex/AndroidManifest.xml b/src/all/googledriveindex/AndroidManifest.xml new file mode 100644 index 000000000..acb4de356 --- /dev/null +++ b/src/all/googledriveindex/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/all/googledriveindex/build.gradle b/src/all/googledriveindex/build.gradle new file mode 100644 index 000000000..0d766023b --- /dev/null +++ b/src/all/googledriveindex/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'GoogleDriveIndex' + pkgNameSuffix = 'all.googledriveindex' + extClass = '.GoogleDriveIndex' + extVersionCode = 1 + libVersion = '13' +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/googledriveindex/res/mipmap-hdpi/ic_launcher.png b/src/all/googledriveindex/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9be5d6d84828078ac39157b25e3bf5879aca58 GIT binary patch literal 3277 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 LNkvXXu0mjfeYZ6|}*{u;a8K39^Y z)Oew1<0^{M?DzY3R#a3hD=#naFk^{Cz}nWJQ=9}M8<-#*4Y&Nkh`ukvCnD1VH87f8(OH;I^AfZ$@mH}B(z%coTk zlzvqbl0SqGb6YSejZK<@1-SOP%y|beYK=ywA1&qt4xT@TrAIysgXbUuA&f>Rc8_m` zl_h4wb-4Bg_sV@07;p39f>FY<} zlJ_4xUb7k<#3ku)0fl($@(5z8I3yWzxJ3o|hT9%VqH)D2E1D4zfO266q$_&_0w(aRBRdfK8%^vIU>8;h@jpT&83_4=IyUYpe(~lGY#I zw-TNpO-fv8J-S!0aq>LO7&SSf_PJ1Ls)clZW7rBN@al6+`-Pus))3k?Tj0H8RoHT} zI@}d$-^|42%fKrm%V4!9)0A%!lB%F=m3#><>LgbDsWROfdIn>n2?d3?`_2im zA#kyy8B?lWgE!=lYycWKr(rr=_9DnhX(|Dug|Qi=xYBtZ;@Om6+bkh$TbP95E;%*? zSTD>9n@)yfAnZvBQZD5qt8p4xekdHSbVwGmfKVRsQ^Q;6Wn-I7N6iaW_W$f82`@~c zMUSanvkS3)JYAi5plUfT`dYemD+jE&?Uz|_$l0{aO@f?|2&*Gevy|Wx=4-=ixP|m* zQxikjzQ~D0d(RSkKm-_o-KV}o*-<_ZXafv8dl%B1?}NqRf+SN#X^~({bke`(Mxyq) zz%1iLnS5!njN*xrv)F(MglME`)o*@8g?U;Cb@9Tn?5MUTeYd7KBlb0~!%uMq6R9LJu zD1ny9eVFS=bPfV#Hjih1N_W@%fkMxDcRbOAfxuBq6?jU1|s{4k9hMk0I5xvwZWafw|A|Wp? zZ^W)$yH@4r=RZN8b^6Y2QNf7*Vfx(F?smItN=r*u)Ya9Ur5?1c5WPjpaZJXF8TO4V zg^uVq@}tMu*BfjNN*hb6>v%=?VK4QzDaqt4DYHYUjbn?fpS>}EXPc~iqqW;>{o7UT k=ScB*>=uD|Xk8rhUy3O@UOd}^M*si-07*qoM6N<$f~e6_P5=M^ literal 0 HcmV?d00001 diff --git a/src/all/googledriveindex/res/mipmap-xhdpi/ic_launcher.png b/src/all/googledriveindex/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..109d821a74ea722b9048f4707f44cd5dd1274539 GIT binary patch literal 4477 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 P00000NkvXXu0mjfjPWs4 literal 0 HcmV?d00001 diff --git a/src/all/googledriveindex/res/mipmap-xxhdpi/ic_launcher.png b/src/all/googledriveindex/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e92f661f0a59790dfdc87a416d1e206afed75bc5 GIT binary patch literal 8246 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 literal 0 HcmV?d00001 diff --git a/src/all/googledriveindex/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/googledriveindex/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..419343c22f9eb41538eb5e417ac72a6d31ac9fd3 GIT binary patch literal 12092 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� zJhbO|-S;mQW2D-i$i7@Jl`%$8b|3dFXxz+1o>JjY&qXlfqvvr56t^}MyV~c}ewkdk zR|a}gSY$bildKyIQy=oNPCjV>3zY)cmib%dqt(5GJ8h%R!CVWe%oq%ftey|;^kHZ( zU2a-%GnsOVB}2=ZwaqUT71!N%-%quXB`mYr&ckMPVW%k#)1ebHDMD@IMvMrug^kuf z0&*ir)xxr#LSe8QB~-cfxH8r@>%Dc>he?f;T;jN&aOpVcM{zVgW3JjG^z_O5xTinT zQ+aU=FtKe5+zWmbwOhj%j-o&8S)Y7v%%o@3P1PS8r*6yry&sTH;W<(Qy(~{bA6ca? zn#Lt^Iin@Gg-nP2*~|94$J9Kx^=r2(==8#~)J;-r>e;OTi#HEJ1xchu_Ml{Nw<)cr zpITo-y@TD|-8%Wxg%FKJwXtQ0^pUu30Z*AR#VtNuf0)fvlvCtd0W#p(K27N;c@<{D z`|xb3gUm})M-{|W;2w5yak+AK3^c~OaJ&LH{~?^VU;>^U%Y+bW*t8L=~z*4#asK% z&(X^SG4I~RFR@>mQ#%EMu5$tUWoY91d)6%rd12(GgqGls|Kn12&!uOp41uJ~%NqS8 z(O}|^D^_f=Lb>R}y$AlrPi=qY*bEsw&5U)-kw4lg0#^Vz)1zHRUVz;6K>95mN8FL! z_npw1ATw%3etm0Dih{H%ncn(9I2W7NsR`1EEtE z)pC0ITT4{RB@4XTr}^D$py$dg$$4o=Z$d?rd2@y z`)H_zWT-kBA)c7UxG(oL3H#52q!ugZ$yf*Dt1HMd2&<|f%YZ<=sgBIa2`83e#M%jt zc1ueUG9!gM=!9cqFM#iQ6WetvD3BNE_1CiB~KzX!-pv z_j-7`flk4;c;v)9S(^y+@<1i~>GykeP`v4mO(K_da>Mp4CH>n*wH!2B{+N63q(Cc- z??@L|6LpOrE6%CtXNC!^p#ruYrxH%*VbPiaG{3JgsQQA@^^-xtoiP;eRP!o;fTz`F zN&Qp=7J?PzT=sJ|;OJOA`H^uI2 z@hFLE22y4_qYt+cjYMU&i00*0A@ZH?ntI#TJtGVLT@DN%>?x~SmXW9s`<6SX5^I*! zl{A?+>LcojN7KI%&8{Z=g$x=39%}20R$T+ezV+7{n^1G!-c|*=?629ddbIanif62k z#L>u0Y-K#ugyH#8u0bX-GL8DFn2`Ty0oEiT=*eeo)=vjQN*f6>g6mZnHu1pAMfwIL zxT;Ia7Vf4xE}bH;AObXYCfY#pvUmH+j{`F=o80p|&ppfeU`}-@d05eVp}Otjq-IhS4ChjrQ-SA-!bB!dtq>3 zc$;h*b=bs9RzF_A{49Dr*4B6Nrf9xsqZIr+trNTqW?`4UDyM6&{^qQDty_M)$*Y3C zOMenQ@0jvlW}|N0^|$44Ta#)IPnCf_Y+i`rNV-P}?+1S_;9G&-P&|Dk z?5qq8A>`uBg{(jX#D^L{O`2S_d&b}h{NO#4J5C@5R$wVwrs%u4VAKu2w3mM_Z3o39 z@`YjjQEIn%oFbc92N~S)Hx9wOo^EV#U1Ula+c{OhrX^SG{pCTxqZyww7uVaNQAzW& zDrC(ht!#zxte{zK3Korxm8|*sW%C!DV9Wh`Txp;Ox10Kzi&(M^`H+j3Ti5b-diSnB zPSM->Ink?@{OGQl{4l|zMT*PxeL35(q$SCq}m6C~L^sT$s<~Y*49P#o!rgqpJPRZBPC&jQo&5PeU=4fi(3`qJHlD&#G zlH0~do^q;NVL)Hn=2%hED~y@56YP7b`WLv)9cPzy*Kuxc8)6?m{Om!nTQwQHg}-S~nSkSaA_<7Y zIPtPw|5O7m;rPQ-B@FjE2qX(j7tkw3yV3u$T2f-IazF8vW0Xai&dyNe%IlvDa#`$ zf4p11BiN9(n>s!Ge^0HlyA-z8Na`_Xi3Z66vn0M8^q;mIz1umYjvRszQ6jj5?OkQS z;S)EUOJ|kTXpGlG>2FQipjs*bOPeWInbQl$|8j|+6;+R=8>=32i9?fXZ=qGurpoQ? zV_zpw2q?#xMy8meq{cxqMN9b8Vh9a=TJlXyY{cK5C*?n{xTLsmtrkr%@^>GZ z!J7T-XE*Id$b$}ZajlEhU^@{DoJ>SD>@O>*8m4f?m08T{ANF*A{r=S4iK_?Y5wR<2 zMYNKRJa(7vmzx>&+}yA)U8u5Hf0|5%d`6me!UhD{rzZA1N`8LDhOm%EiK z>L5(h!6y7dbg}@1GIto9r9?{vsx(VFt|F^mo{Jic1Dme1&c;b#c_#xUl}JaWvmM>1 za>Ewen=vq}>V?gCel0n}R{=S=T@_+EFc@CGm|;!JaT5apXB9DlMXP}2haTKMeg$AI z3S-BQX_Ytp3Xc021>++%kf$9PhdX`_nO`=yTW_KqXwYnqnpL-Z3Y8dq-x>9AJcR_* z{n`n7vhUP)P|Jz|Ug31;HD8d!P&JpL>6IrnA;os+T-wO}kY?XYWn=S~oV{9@Hp6i0 zTk=E8H#=t~5uLx*gIXr9Wk<1HJ(8RA3hw)|Bbu}9qiT5kC}BIvpI2%s@&D0u7Jf~> z;Tj*KK{}*E6i`4!QfhQaN()F!NlNEHP`VY68YLkhAt^CZKw462bi?RT+s^wtpL70# zJ$vJMulv5Q>-!YJVhOCUpbp$y+<;k|l{pJ%e|Hip&`0SvH}SLMlSYPRwd?E6jeB-P zy;YQiKRVQ;INDHzS(u-}Ag;9OKZvp~zA;}S4;$ytP$U^)+a75*EBEFoO63{}Tx2Z) z2XL!x0fHNBRe-YkaO3r<8FmPdkZna18k8G;d6fU*S#5m@ws`}&{i){S%gC<^vq6YU z!oqvz-X^f|M)lRewcL{QJKXVkIWzEQrA{4SRzyw2m?kBNvG>1#mHrgVQ-B2>UE^UP z-w|h_-xC(A+}7~qo%-c>lD&VkEG9fm3Y(fm)qY|IJFNvRH{ony>?l(es_I$}43zFhGf7Q;T>q2&lB6!{S0 zZd_Q+nRs$faoULN!JLsR0s&PJ(7YBqXI7Ozd^lhawIk7;0Ufe;-eRx6N($^U7w=oV zC$6&mrRVL9z9SSWN;yybfaqN)g z8_#Ay^D|H1g*)B8v+g10;TtL?%!!#bc0*e){N0Qn^9E(^gNuJgS!E#Q+TSF=FnF}w z!+9YCztbQg_TvMYi+a@wRoIR5lT6()m4rPhh;~E7ESD4IkFFOu0Y3IMGEW7n&2@p| z;z{noiBS$~DO=T#i~1yCwfC`BK-9WVKiUXF5wc8hk}>ft)u!&hNY7=auWO7ZZ;vpI zcbEIqqKR^1KyD}he)6_m!5c5EzlP;s;`Kx9wfRL;PuL;hLSN$`YB&?W-o$Ia;1caa ztb&&r4WgmXRK2n+i2b-6E9yN$x~#}YkS+$Pd;YRP3L$?n7@@`r1A65Hl#UI5 z1@`nhmHN0L+kUvtGRF1S=5dHfybH9ICsA^vn#W#IQd=xwQ;O|!Px%yycM^1KJ+tT@ z*i~~^`8apmldfZ10`I$lJc~e>ng4V(ketPT3Q0hRR9=liyW@5@DS~dy-}g6ML?8<0 zM+GH}0LP0RRkF9-Sk=3~sUMJMKc;@}FbZBX*HSx7=eq7^y?jS<7QL5TBYE3L23^fX z-CQ?Y5rq{*aq%B-GDv(A6H|#j;s#WYx4wIQ?Nd!+Kb9qB_Kx*^5n&lcsebam24t!| zbs5dbmM4=rw~#aIpK6Y_hGz6KFg~nyeL!MOmaw~2ufrW!3tLOqIlSAp?i#GICG2Q*wg4g}+;yX8e z3K&ya6;f^;XtQ-VU`e7_v&8z<5alF3s5|<}f200qfC-pCyylw!wyCwA4AWS-@U1PPGQnz7?9l#S`GW0G_akF}mWsgxKn!x2LtnkhFagY4Q* zDe#O*E8YAVC*gD$3!(L@;ILf;LaZTaBN9LTnXD00-N@;q>8;b8OP~|_+o@XvIamh2z8TH>luMt>`LI@ z5m#;d4f@}d9eLRCm7D6)4|0j2do5vswZ0(rI?Y~U8}}P^NY{e-=H)T3A{k3VU7Kh2FCe#X6a00@8BT5Q&xj`uM#G+k)yQd6 zwcWAgF!=wt`84$I1c>lhom^Hq{{yVC-X}n=ul)Vj%N5kbAA_A`czE}xGA? z=5Hxb=7$-Bu8g9-o;r;0iN+D0GhKT@U;kKZw+?@_fopQfTTC3v*a+UJ@3gbbKLThP zawycRLZ;_2%l;b{H@&Qgf;~;T5-eJT%rcB)3|rjG{*dFG$v~&>r$T2aHT5Z~@Vn>K zz683pOT3@(((!UuTp~?83QL!KByPzy-|S5nvi~t-+^QTh!BBW3V%XG9T>gQ=77`A? z7pSa=>X$ZvKAqGcBEt50aa{}F&uPF+WUG#`FFvViLqTfjIzSSioKIWIN~yGOS+Ye1u7{}ajl zm*QSmPTFOtFJG9>>5$H>Q+{>Q4;j=0NuO&KQo@epWm|tC8SB_%XhV8HL;G5yH&&iBnhDqN40Vk@QqfU z{q~H;b`7(-?0Wt!C{$r`?iLZ=`_y@CdA;|`^mhn(aMxFY7iMpA^yn`e(|sz9fhLgr+1Ph!PD(3fcO`mr7HoxA9dVWTiJd;5@C?GJ7a z|H{Xw#d%Dxqlhz#E1)`3a}l47NrCDz;==I|*7f)}#((T@j0mn;ar7u)ugn*g@H>Cp zvq}8x`1jDx)f5A3j)b;qEp|+h9&{#uSH*T_jKAW{0Uva4b|sqX!>!gU^(8Osq=4 z9F9Sphq$IGP=*+L9Mkyclt0Rq!d~PI?#&n(760?JH#8Vu(F3H2Q+Nmwg>)CtH+~)d z-Z54)&?4A3qfc3T}`8s0CT zwN=J+d<*Q3a;beQ5ylgRK8eM$CSkp9DuiM7?3eea3+A*76%j>yxG>`u{Lge@`V=Lb z_NW%GVa8D&Cw597=+ySBPP^lP1Apk*aQ?5TRff{Ml6$I3=bk1U+N9=a%|gR575OF1 zQrx6bixJQoVa7!z9u=XMf<;F-))4?(N#c;g8Y->NtY7ozX7hl*RFs0JZ#4BzR6Wah zF^1>pLM(xpCw@ieyj2r3vYO&#?3nlKbS-5_wF7G-pvw0t{cjTt8)_;F5Df8)Hr0Tz~hh6zY77+Q|UGOh6a~ASJ2YN5afmsPY@}Se_@2 zo~OUk5*UO}Pqr;EjPyEl%LWx*9>JReODv;BRM*F3$B^~2GXnQ7Ob!*hDzLJ}p6zQd z?vH=1XevS6!f*-lgc~EA{o1qlBouzt({AHE~DaS=T;x`OB`M<`>_@9;9;F z)dZc5bY>?fQ4mu%Juv~OPJj)nO485T{2|!N`dr^m;H#rsw-6lGyly6vKpaR&jxJxj zLUf*)qaPkn5xLTU87ZNZL{&LkTat?-0$oO+9UsFp-^j1AxH1=_qNd!#iVhB*(a zbp^+{#9=CyfxoW}q8l<;N(p?vyTYUQdKSuYpf%K`#EFlN?G5`7QJbovH|ua2}W6*kf}Kjw$1b$ncIMP`=M`3|GnBr`)Nv|SqgRO z8jWuhr4kRn*-oxY9_WN52@Hp`z2BOuy$M3Fh$ffm9p#9^X^w)W+qpK9WSu2S(E^8- z3YMWW*WSOKGaVPMoHZA95`vx?;9XrHFOsS=CCT}vINJm#Fku#SuQ#~#<}z|^J`pL~w?$*lK(fx%yG5iZ~RCp)nR ztq~a8Tj+$r+fPTV%kOkB7(%;UuJIB>I2rek%V;l8m090UcdXB|yZ6|YPV0W=sUU+F zVO{5lEnNW#ycyq+l)c-IZ#fhiij+8BYFtEW%68ce8t8+5FarId4tUMF0dJJn>Psxu{~!+#@p=QNYz z^lX3N4?EqI^oL?d^fglPQzHd-f^YXa@~XG{0zhbj*}4ZxX?e*(I$;o zXj*{W#~DAAp?w7>q};}KWdA56j=Vi&l2J-i`{&$%gcUD!9EQIL1ul}hZUU5oN9Tzm zXr=#gh4|$3SOAZ}+esHf%Y^xdqM<1A?}^A)fWsFDu9#n?E?aIMrx6AKDr~aR=&OfR z##IELsz4r}9oSyrnBaXr_7Vm>sVA*%^!&ghL+>)XJBg7Ez7^kTR76c|42#q<=vFJG z#p6?2d_c)^X++7#IY+*EZmAz!YJ~Z|)S0E&A1C|_d!NMn!b`AN*tkpRovg(=O8@YP zv`kjNt5Ek4x2!1Np7oHQMc1duW=8f%crBg%r)1SrRNx)Yjm6DAThpP~273|g>ICf} zA|MB}ypde*LKq-H`*wdG*x@!t)vV9=XN!89XyF*d+vLW8y?>H-cRNmKGq0}74}mws=$Ck9E${#v zl0d<(Nz-K;4bFd%rV$-6@KAa4&CgGt;U0I)2h91^(zmSV<6q1qn^8!`TcSVP3|D!GmR|C*-2-3+Zq8r|Govg@_z72JBvv$JEFk79B?xdbk6dQOS# zTv?+PIbRo!kA8uROBG$WlUGAS%cmiWN0z98?eTpmw&k_hW6#$OOU6`(t@O5(JiS`xjCTmXdKtJ`rs35w^VN&0gd&8u21l8jsz6d8Ja_%xlP+8DF5Fl^I&R?i%Ghr zn;N)q>2f}kZ&geBckcG#a_hor^?rA}32QviZ~E+Lrs)A%8Z(nWtHmEU$U~Gw`Hr?< zr@^~aUZoS-MkEBr3GmaM3q^L;ebd;9+73-NIu}eZySOyBWaavG)?o0J!FXm>0s5J) zvk}$SJ62)wlgw)J-h#v2XS#K!ChXdjXjw3PXR!O+{m-)sY-Bp#8RJ&cC^)_gu{pV z`Ek!g8Y)Wclra{CD4UIb)z>Kv&-203SdD8in(Gn`3;AQaJ$4Rh(l<1*I_%KVD>Blz z4zK!{t3|>6=3?I>tI3!fL5JOgRJb?Jp2L#w-dF`#bwl%k{QP^oKQB!{Gu_ly?Py_l znTHgYfMT->CyRPx8@1am4*jU&F*i0k5n=FSq&Wy_pEcn8Ydn5-d2nj$*#p6^^-W@{ z5uA@t2&vk!?a%7YQ=#M*SQb}o6i<#a>~>w;kK#IrsK9gVw*0+ab{+YBMS!<)*i~%r zyl^UvS#!9Q*|nL3h8-8Nq=G$pt=KDHnJvd6fGj{8{k{J-2~A@v!({Kxr6zNA3O0yZ z(Eth_bm};igD#K%^i|985|lk%jp9L6#lu-_whn~msmsu5W|seA?|SxZmQl#weydACj(tlU?Csi5gi6wqN1&0`P<_tL4y!@yS-S)*|5G$TZrDI?|>8*)t z)dr}PjEtH*1WZ)*7b64b><>X#3;&v4N#Q(I^j|4C^Z6XsMvwR35|zZACeIp+BoEx* zmuOPNv*~`wr%QQA4LXy%d-Y}o_BY~ku>Eahb=l!y7ag;#*J%!&Ow?8Y8=LaME7#4j z_Jx7FHU)fj=(CBA^8>G)H%TGH@3H;&mg)i=>1R8s8ftIP4E~+HNrs%#meq9baAi4Y zU23Uum!*VYxp}4U(zzSbf7c%&E(iXkJ7{8^_UQixPy3RS_8Q6I%!JWc#8G}hc-aM& z@M>7Q0_jINW;s{YlpesBIhJ5t<^hjb@A0;CHsP_TJ#TBsdPxtuCbVX5gdM?W==rp| zH4i2tsY^ApJy#FG7#ZUpYY5TpKHry}h3(KVZS%yMil?EXe+bJ$Z<)&pu(WjaCN{f& z_cnRjiyzW08M}tN$|pljD_)XrXqIuoNXOv>3RV%LlqO-e`E9@0fEV-)LOCnGqjlT< z*TE5NT(bdSG)RzIQCDN-AmR8g?+y7P)#2 z+O0Pm!Qk&K6a-7hUvf(ua^e*Hk|7Eh`@KKs(E0CL=MCF$l+Xd1KS);%VFmN7+xj6k z8RVn~ihNo8hOet`$QaI^*$n?NhEnNY#=`EwD%V&WvGBpHcKmOT{gD_)l@3m8Bk1(SVW zYJm5pHP^MKb12q~_uF4+lh5zzhiya4P4YEhcjD*#k!XQpWAvP0c_^YknX~3QD|p)X z3#{fR!&_E1QLWrBGw-dBpLt%#wE2QReYCV{aN4*+Rro*dqQZGZ6i&xby>G$2jaN^6 zQyEK#lT4TD${VF_1-ZNv>|VwWoa4z5ox-}Epz4DN`|3qa);9YA=fI!gB|Vc@IZu4( zu5qv1NN$HFgtY@{L+&0|mnd{3R7hl##|DuNV;h15l|#cUZE*mElB|I4NyrMf!Q$WC zeJN?@`8q>;Bkb!Gh~m1|SvI9<_QIXNN8=yxd+>P=$+PAhCN-*@eKQCBRCD3~i$uG! znf=F=dWJ?a%Dn6^`3>~ZYn3+K74PIPPJsB*jI;GvO;=&=tT)*;Unt&Q4wC&fmIQ$H zoI1dB*;+95zG86Kx8f?u!ud{qT;tfum_xj{lzpC0>g!kL774B8JzrZQiAO73K#yKNv+L+z~)od(|Q z3tIj9-s7}` z?R6Yp-VqRvSnH0BegK_*xLx0gV}b)fGd(U~lvRP`SuJt`uU#X(I^yVYo*`r?kAr>B zgU+gDRaHw>oW|y;n5r~KTb>|2N%m<^RORW!zA$KATZM z!}=aL(?A)2?W+LW^c4G@;c{p&#hbcA=d8!Zj-||(v*zlG7)-?5I?o?}$SIMZm$V(a z%b3RQpX`4LF*rQ8c}y`0*}j5q&8SZHj|NP4``nSfd#WS{^nS@U2pu<)5mq2Zu**YcZ;XiZGv` z`fn0}XWtrSKqZAnHJNKPvHw%=2jpfH`s*~5MHnhh6yB_#;`egE+1Nm*!SkKXtg)E! z^|q#a>!RrkYp8N2HiMtB5F31{T<`OuyNrJQT_B_pysR=kC}c;-&s!?jT037Ldv4z_ zY1tMZ*hT4+&b2^9tZ$z!6#EF2bD8zT^Jy4$4mcz4<0ROUs}$c}-Uoz9x=t<+cM zvS5TRAzvJl7pr0Larrg%?h+XmrNw`WBBlYN4j$B%phwP?X!vKdOT4_CR56RAq5l}x zj32(1l)bNddEWwyKQA2mnOu{t-w9guU80rl?;;N~XL3or#Npuktjp@pJrC~P=?@&# z&zWb7=xdp@cIS;`dMb#VIlukq!HP}3+TNJX-f11f%B^7%Cymd71eC^HtH14CS>!NB zY{>29gw-&;eeqo(Z^HLIT>k(!($bN@jw+ zdG{OfHbjwtB+f)Vwd!^ppY_GWcKlk;5D^ttmQuOgU&){1yK3R?KYvRQoeQCs=rpk|U! zS8~{{h9?(v((nYmGWG0@N6%Z4aDA+A66+&bw4lFU{gbC*1rAOVQWGVQvdOh3W)kuQ z)1U_df2lw(lA*OJMg8uw5whrWaXohSZ}X&rvI56P8fCJ<%)Jza?8z*=SM{A@;j2l9 z+x>PgF&3Q3hRl*}r%5tpiUXFSu)e1lx|FH!P+XuTsFE;(l(tCTeT?08l z-;aCr>$K(m-yS3PH^F&WYfEZ!(ws&43n{_k`Qdx1y>z)=U`eaLV!d03_3`j`fpEm# z&|1&|;>tMhU{yc}C2m-poRWq?N(oC&np#lwh3~fBMs9g?q zxsUE?tbT=mGJ#59Q3G&3uHWLJVV3ulh?Cs7LfacN5vH%lQu1D8?+>e@w>-~Y@JQ!i z4jJ9e@ffi#stA6{hC}w^n-k{8Q8}O-7PTaJ^JZ^zN7XGlH1$Y%5~{Q`*!$>$A(uD9{y&-v|3v(2`k-ql!v=I=mC#@g(GgSROmMI<%c*wn>WtK} z@UUa{0~hpniZK?@1X!^jCW;7I6uSO1N;&B8TQEmSx$o_MxoiMY|L?6;T1RGj1{!|& zAjIp->LYBX&(B|rEXR}bq%nr=cZZFcEzN?!ZKMWnQYe8^Ct}bk+{mP9`vDc`uuHVg z0JC@JjdVT79^J`mUuPGv_S}|zIt;reLFhjm+t`4y2*dcf3S!!0Xa?l1i*w z)|%^YVZ>#(uFvPAAW~NkqxnmAG=rZ0ZnEj-Ud zb00@W*lK5YH&WF-f#50acd<6HHCtS(cFzlYJg)?ymG&)O)*pD@+2^o*c_$3;-sM!} zehb)>6k`*aJCtr$&ix$UXOinAlubjMSTYJq*i2cib%(!)f&bPAfsemh$>6C>kYbbz#X%yR)tnAS!cax1lKX0lnG2wc6t@qUAe#4={a=g>e+K4@kt+5Q2i4bc8|c7Ccd>oW zuZ#2g@6QA!{QK^acHaDDxTBFY_pZS|Y?8ejLwT&CBf08wlT_LsPI9gMe%`V&g}yj3 zne#Z0Licb-AQm?^0#nn;K;c37m!tqf4bdUGH%S9soimnvx`3r$v_Tfud&qU-FMV(te!vS|bGS*@J zSu!g!8H)n23twF3r(MM>cDN=SdZtaO8!R=f3apDrA{*l_-4-G1yYFM5yk|LjW&FeNfed!LvTYKIp5K~=ec|09 zIBm+KF^lJX`_R50(r`02IjJ4`Fyu7Hmsv!#YV<$TziIF@XIW zCbol@e>yi}AZmG~JWCN8=Zu1;?@d4XlK%cvCnaB4Q`&GWT!0TcnI?~D zu17q{HuRZyP}1TR+jLOFsCblhJkJ8d@8uPb5zk${WMRJJ&BLe1SXqDs0DfqJwxk7H z=`4B;@}E<)AZFd$UvkL_dPFi=I*7Jp&aU>0;>f&ZaOf7R2(1Pkf8ti_H) zdG$r)LSrGa>O3wsziveIF&mXn#YLDnm;+bu(rubSs1pJZtU=b{_!4+|=Qwv{0PA@E zKLb^xVkMcwtn@MI&3vNe1YQ(6fz5yiG>UrJgsbI#9c{FQ=`2>_{PuBm=R!5w`Q4N` z1B!96k%a|2cLptU50ky+aWCnwgtTwpN`Gh19A>tK7tLRyUR6C;{>GU@Z?bZb$-&+O zQOlfWLx#E^78ZL=ZC9B(|18wj4}JLO=0ll0Vk0v%^$ty*rKQW~05ZYR4xSpiFc zj*(EBryr&cRsNT^Co?=H^-E+gjB{(#W4#!PLdVjtgmooK1ag9}2c z*84*eYhBK4-t%jMO@=Z|9OcqH=&s(&;wp+#D0FYX>~mC6S{pxQncjLH#jA^Btrh$Y zZ3Y|K+?2(}>5lUBS$_7*Lv_W`!>0(a#lE~dmjOS_A&+qis=`7`N%o&FVU(=qy6TuT zj3e3D3|QH?k^l7oiXdby(S4#C}~eRt>%N><_{c-I|3D9`r*o6!mTFY1wTDRAq^;Hn)sl6+QoP3g$iBaO-KZ zeHhgKZWt*)t@RQk27I=uY$%K?`Kky)KW(sYRIgUowAfQp;ox6^D}zP;;=%RYPX;Pn z0S)NLTt8p#dOKioGcGXu_n{H+frfto!l8c@Ky#YP%T5WUTJH0yzM4hW9=;#0*1f+? zvoMs(jWw`b0t-`)1Z*!{dCKkq8!hc#Q|=1GTgyhJH+e%R$aeNdx& z)EP50J2{&dL{*hM4Sk@*Tmu$ygYr#tqh6Han|{Lo9cbEWyai0UjBEu6;0ctmC&Ln) zS$n3Rmy*tKZjAJ79fdc=;A9JO5khRd8NdHSV6xQPm=7s=^sEN$*e?7i+I9YVr1%&1 z{W*GHVU6u3`_onXv~N|JW~8iZZi90E!T=m7v2E_Hjb&5-ZM;$)%n4#bze(EM2rJYf zK9XUBdwAtu<~s)AP+WBDxe>Nf9#`gwYbr1UJn&9_iOZ7>ms+x|+r=-cNe=J3# zh?ktwsy0<#lK`qG%^ScuoLNy_p~Xx?D<{l8-;V`3>NlOnVqL|dDJs8HjvelJSp|U) zk3E;wXClWl@0CXBcSCYbRPe8H^HbA5C2US@`XS@Axh=kYZ!Qi<%XPXjf4dU(h4=j| zwZk35E!W>T8SqSFf@& z74TN-J3mC?+mG{k#R88xfx(MSB!HHT?D%=comHthiFTWVg=YHE{eZKL@Ff*bY8h#% zJ2UPWuFdAg&e&r3ho>C>byEMj3_zCXdu~*>{pA|ZoL6jEKopJ=0|C!~U|SdC&t7au z(ZPkewzW{^ktUwR$1+F4)K>HFFWB#=MQ=BeT>mWp^$uSmg$}S>k99eP3(`i(F(24i zaDh3vt;8~rxzZ~45yALCv$5wDJj#*U3?zT{1^bTuEmci`Z~83WYl08w!Q#~Lp264M zR2J#rSS_sDO#}@l4;%EKMFUe^#tRHIBcQm};jOaD7a@>tMkdicGt>7SI%0T7RSM>X z8VbV}YbcFf4vAE0F7C?QhtRXWIPaS{YO2Z-DsqXM*QLbEr@k)4oewywHG%CQ`Ed^5 zD2U1mUYU94c-uwjbngTs^R|1KL(0z7l#C4E~$p2H_4 zZ4Yr{Mt0<%zaBu8WY|~ZT;79X>2p~e`xuq>ElZ2=Hop9Kj?ME3J({)4^`M=ICi5aq zEQ*Z1(+O&r<2)l$X(lV=9K_MHSMntGjJZB*YfFPx>E^{Z=ZnQ`t>+x%w?jPvyD~ag zq=CDP+tKTmza`EvFVW+EKra-o&#IpOQo|$G+)gP0*10|~EwRBqTbHb2)r%)~PMV@b z+2HSM`V*QjyB43cv&}h5_Dn5dq`Gu*T+w4Qc;u;2ttAMM6$3SC5GdgRCVWg zgNQYgB~iwxXXI!}XeVMAZS5mA?pwH(%N^=RvOPfVd)MQnlATf2YftG30&xz@bhrkjW>>(2fBZbMfd8pa+2d_#os=IipMwI!Db>Eye+aP>R}M z&hQXcQD-%B;AgG)!u)&|o}RidcgB^TuM@>bN;H~Z2jS}xoT;aJz|%)g&ta0s#Lh|o zDMDVy9t{td<1}GPMq)03tT!fGJ@iI}>FS3`N?YvSlGYpBFQDN#3c<5Sdl24=&R=r&E}Pke`7SD&2u zY$H4yFj#m-iqve2bU7ypka1?K{-geh_(i!b<#roS%lp*-6m|6~vynD^y@taCbYo1F zd+e48O)mkdx%s>mx_l<}?7@BUm3u1=M>jZVt62fHYqOHu{;PU;p#27-jd~V3Vt*PZ zd_9L!Oz&mCG{AO}zEdB+J(F=Z{0$KaLt!!~1d80HQ8x1*1V8}|?BTzsLcb$U=)b3{ zmWvDwhR-o_9DbkiWzzhGU^lia?i4y6N@-lixfl#aAZ%|?rjpZM5-%u&agtfeYWD^| zo83ZXep-=K2HqLff{Ix{ns`yAD!Z<;(7fL%NSH0A)L_msC_2EGX~J@+l8aDM{!T2J z@HOs~*a!E#Mmj37vHEtESsbtx(={gL>yaS^l)fD;BzREv_IKltxU*jb(|#c-OhK45 zXUh2;PTh;Bn?H}Pm-{%OUanHGw8B|>{%dBO`>FBK3w@8nr&GF2(6Fng!0sTJKXT?0 zn`c7V6bn-Orxn~hrYvspgZzf^w^*l}1n7yW_H#&YWt>p?e)XseLxC~F9PK}WV#N0! z@@J;w^{%+BT>urHlSEkdAZp49>chmuQVeUq>Zy0OdOhWO8t{oobb}O2I|)In;qNTt`NMSv8>`fR1%xjHchkCG z%b;{OxDo@5RRJd|@KXMhzr!}6xIuNShD%pp(Iagk2G`e4?7@M%McW(<5OeOw1D4^M@J56wdY(Mbin zSYkgko&T7kWwa2MPo&&XFg2|~_7A21bgT8rrMvZpRzwl_Gzok<0J-bPzJ8;AifYwH z2`>n4Am57je(45378#vk*MGyh&!v|y{an~* zQy+nJ=k;z{F~)^0dP&~T&zcsNjr1sY9M-mp^U1{?9YN1-5{`9r?m{Hq_B85w*-{wB zcP`4Bw9zJkpPg+HS=^VFmR#)ODPnzWTz+x(q1->&_4~U3&%d^1`J@f0P<4%umri6$ z^lB))oN(d~c@YuHLt!B#oWO!On~RUhCT~|!<7d!7f*wrr-D4!Qwg!F^j2D}OtWeI+ zCi*~q+#vlosaJ5p&p+$|xbqoMhjqSV^LUyQRRHbVYBMW7xNam`S>#_nrxrQI;$ja&enEOMWWH(ML1&Z-(E~(QiB`hKVm8XUYkHop3m- z6X%e(DR;t1$$Z;>{D)BQyM^d^ta08c_nfq~HMI6@G3|W{>T>guYcsluCLNyod z2gTR>eoNHw6ez}=?_@h;SU{e6;7Z$@q<1|m0VNO6&r`+bWG9F+L6l@)96us{UEDv; zW48p2sL=fA4#s-XUK)SsqhZIHka%e@QTUCXLB(Lg=&!MAne)+u9o4mrDyfKv5(hfZ zF;!jW8|=Zu*T>^Bs2KX2!p=s8B`&!$?<;u0NnBGQofVsVvKE3SId6e!c$3fmvRW_9 zQ(r!=Lu>?oyPM9W_PqZVhg(Q-g?AJ+iXbrYgD&eF(nN(3gFGcXAOFQ5!kW-;KB`0A za?@)dB}nRn+|f==b2;H)_qqXCs zN$tpw-V~p5rc=X<`|<#-Ei-z`PLy=dZXr3L$TG&Vx9T!mjMQm>rYQ5o{k;oVHfRRf z)!vxjXbtO7wsN|8;!SkNYN7f7F3AH9VQ~r z$rx>f6I$hCWwPSK{_!`NWp5uh3hyCOhitwsy15~7z<4y(TWbUP&HFjpxM4T4c`7o+ z=J_wGG+b-76+Ba1?QaX<5mg@hS6Lv+a6Md^IEd%hk)6mY=LFUu=A_4As1tXapj&lIrvtk)9j3v@>5Ocobb6kRirn6#yya?qh1^t*hXD^U%p8TYTAqa@e z|BkfPL?2e-@5&nZ)uc|bDBguGba%yj%pn-={`HJS@GS0PLJ~p@y(B0vk`-6F+`HH4 zke}?ma9F`Z%QVSRDq4~08W@9o8=U<2QILlCb1;`f14EZbXN*h^r-u`Y&&u&o=9JrG z8tM)P%#isD7|cdLEK1|@O=1(8wFdydULEyGbu?6T5HUU~re!0X%FxK)F{4tvJM>Jh z(kvpEWOPz2;7G8{>(nK3uj{nxW$XLYh8 zsz!7L&EzPH|LJy%gZePH)2B=Jt7M(D3jX{joEqwgv(s1Ssn8ioO1c;}0cy1fBg>}C zr@7$->6 zuhJJPe87cQVbbXFuGIRJpD3*&FU=%xVGPU;hgeU);_(N!IW9!}Y*%9ZZ%(uwMYbgP zlY{%dQ-K4O<| zGHaNcU+vR1Bz5fDq|%eIg~o}Ro+zOnVbW(G3Y2tY4rf9CAkHfpn$6G~TzHHh=LEUraDWRAhVWpa0INC!wK-WI`JoOQS@!vjZl z8j#Hl$dwk>cDL_wG7Y3!NQFH{YRz&x52zQ4+b#{aw3zpw1iIS(YO5SR)m5Oo={fEm zHH7i^jxDlMsZTi7x4Bz&U{eS>FMYCCyMJPd8nxHBZD48a;U5)i&et<~x`#vWk+OV9 z@qACjFIoAESZfegf7YEl#IEVOA?R+I3gf8#xaIe~gj#Zj_#P>6SV+;c7vuUPB*{2U zuR(hGlqu$cSAqTuP^`?b0DtF~OeFNztAj?kE@j!O;ZxL1v-YDI9MPDT=ui1Y6){(g zntqp%_k}n`>$b-j)ebziAi{gMd{Ol>(|$xNuHm*snshIW{|{ga0j9 z&e@dr0C@1?eTooyoBSF%O>z;IGwoR| zO!#H6UMke_(pWy9B0bzjy$L_j)~NFW1)d9$^&Msb_xuyW;gE|^+YD;5Bu3t>Lb`|V zSj^~2EeZd$C#uA?*?ow2q>0A zfb^WD;BQw~?+DNm{S~fB+nvC8X7-m2Ij#Wma2}y+;rnMpZ_*54Z!eKtICA|u%;F#M z6AMJGX5(;X)*8C(7tRDzi9ua?3ft&v-~gMRj-K1=68M5W`Rw^=B&AT#Qi@APH=;M}wW3-I)Y%DLk9yuIE^A{CsD^YtquTF`M~7}*X{^Ezsr zsHRcvE$*8cJdk*My*38N{pR+74ol9nC3JwClkGUHF589JH$O#H(oA&ED!SMOzePn%Av0cr^O!9;<1~_xzTlxfO5kJp~JkufFQkDDVXLfO*Ej zVJJNQ`&WAp>S`=h_1;?iN&MNP=Sr3ZW#bM&pq$meMbe}n9}h>df_bc+hV-o*ht`KV z$F-t}LFCcEh5Hr05V~}S(^NE|F2ZVoUKAd7zzG-Kua@k zKv#vHq%&7&HG19im|yavbq97<_PG4`!>#P7rS)RP;h*_kQLx5%^9j4v&TsgqK5og7 zA6lhEKe7kFlL4$+7rh6t%YCL*21xeTYUJ(_7T*gm+M#UTrn@?O69d+0kl>}L3MB1x z@nTy(kAO$O*xP`!2G!tL()=);-tDQ3;6x<0*r7tO`oV7!GY($IqH2fP?Jou}UxbA&&vn7rN z$8U!1H4S}NK`G1V{Pi8@~J}C6HKKuP8d;a4+gW1 z?IylQ_6wYb5gFH)@Fp=O)(G1pJ7mGTMxr_VGlD%$@o+P`1f^q0gml(nJ~oDSiOsID zx2lIw7nggO%i-CsU8y6RdFWt^bO5_z%Gu7C^~p9o0);nx<{Az>{@(03sYMA!r)!cI z`My7)66tB-cV6`YzC^v!AQ$}3qA;0l>%#nLR{G}e_+b%0`&YhX1XGj4BnXr*sKOgGj?jK~hDeOH{f$2S|!Eg5)Rx2}x-fCEeYlyE_)|zQ5~w|ARf( zv**NpKIcB5%QU7Z&i6C0a*HX!$Pn4TleiXcxx6ThRHruDV;whR3o=WQmRmE7R@%(kzrLEq@~igCE8U=wY-pI`tzJ%P>Mh1hkffAe1Nh%q~##< z%nXH240+)5lCGV_$Wkq0}NGa|U{u^1A0x(p}KesI5@ zFkZm=sd~hQ6=f({>5x8GyA+t8U8W7ZZ`5p%mYbsKITfv9)x3K#X%dQa(u4y)rZBgT z1OFJid2Ph{8CTgnxHklnuQM+cft{pev1*(wcj(OS=Z$!Wb8KVU6v!(@QWgbYG3&^@ zyZg;RR#k^5h+I7H(nJ5211tdBxqUG@pLv6bRIQ8Gd4_L6k$4Ih=6BnIdfeaB0^9e> z=#1O5g~oXa6hNe4wlj9Rlv8HxU}4RN%MjIeN~XZRDPHlM-qF|}hvHa!^&O`jlT^-M zzgPiZxu4=iaSS^Rm=Ex9RH)|-xf(dw+5<#UE;6Fx4AfDI9d}Y5xB>jgmg3&C0(GuG zHG?0r0WJZS)Mkimoesw-RSVSc+s3Ey7(Xcq)MxfNB&tV4^^WkWYnj_?3?DRe;wYB1 zhx}(~cE480-Zmguw?PMSw~-`r2fu`*92!D@q{Bi2Bgz5#tyCEe2pV$CaBOv_V8Ut` z;&*aXtV*fR#NRk7@yA-Mnl4@D=N|uVlGwSc&ahTVgqq1xd%ZixvsZ)N<0pV+d$pxl zfJt?z@8Q_GET|cg3v>8Vr+1SA*7Vf^m}`X|{gWaVTN+r-kqvW^yQ-!TBo3 z3^nPe2lY$Anit#r3N?U6NfiQsW-i6rv=<>kfGj>{8JCF73@*T<7G`dG?s?ZWlhz@V zb8qfS>x>+utro{edE`^g-=hA=od#| zYp+IE05#Cw3`$Em-!P3B(-rj5##A;p60HZ)kT6W26Yz0jpwP-sUM;NZQ=dI9(nIz) zw`D2%U~bZqKk}%_!`vQ-K(hX>dH_^yNA`%@7L{^-N)oiaa8~Xw$7VOGC2tV@^e|rR zp8Iq*#$xYAXJZ5J#3#wEGxSQc24KEERCw1 zmNo%`QW#EQ>$>LgTo`+_jrek9uKU!!`(+}n5i78f(LcQOSc*3;`*;a z%tUoCd?WF~IzU2@R+;EDRUl4VLTENaMqk~i4?}HH6LyZMACsomAEJx4!}~vvX>%A~ zg13%B=$`C|;Jtfz1MgpcE&012QG6H$_Jm0%lz{llhPhmxOVykV%_;D{ZTsf%GbWLo zNzZmyG5pXaCKaV{2@)m#FdlQq^YL+M#*A`FEubNApt_9s1Lh&`(lgV0GnA(kmif5nPcrD zVq##wIkJ-gB3h@8~-6ja`-q{C)?}pyee@0k5D_4ZV-7-YuMVV!=`7DgGR4!64Ie&4LH!)DSdf7CMVy%}}f*w6P% zE*!!Omv0)SvMo|u$Y;?r^Nz%~{z7em3ZZc6mE~N!)`5MOQ<{O6sr12OF3@j*MMx0j z!!Co+I1S$9`eNaV!Q~U?eQUOsweSjLgk35Do4YNisL{)3x-qO%8@Sa`mXU*EpLiVW z3f0)ty0=w+O?34*>+DT0NuM8hPik{z_Q=KCA%yn$kL}lTWuqkQWV;0E<$DvAusjDB zJiNYoLmvVONMy>NGp3@q05Zj#=+9x7(HdlGQ!+X?m_EM_NRL#PDTv4VXmc|CzlT_k z_==(OKyNHq88b{QsDN3~rFz30>S@olrX;um^j>N6bHX*z!vIKP1fBKKbV9%=j5-X_ z+~}v!J+J^}M@7ONk(AfDCr_~)$nZnRcy!gbda0X&I;N@i*)x@sPr`3{x4_$r?TvL7Iw*el32g@+ z;Nt^xgh~p}`^~HBOR2q)d-G;HWtiTDB!b$rt4ex2*X?@fSI1?A+f^9B-5;yP0V&y2_%_p_CUr=z=QZX(8U_S z#^ExtCe-nmSjE`s{R*y8_#qK@OOlFkPiOt0RB7|M2HnbVvE1P>kPi(WGt9D>;x;r8OzI&0uQOSch; zfStcBmVHGtKUf@Q@Brv4w(|!pL_FZIQuygOgJ_@dI!;W0?Za=E@U(e7rI=tNywVG8 zbK8yhaQ3$6;fT>JMl8D$R&iwP%h|3R-qDElUOJ8-(d);}99CM>$ei{9ZUi=ZacP2*vr7DajuNiQO(x1Z36grRcb^gYEYQFw~dp%hJ4li8%Xa%h7 z*Lijs)&*4)C)k?LV*V(CL}pJxa&C25$;pifQPEc)P;7>s;*xd2DTa{GozV+ziYEs* zu>u&bnlP!j7I~}BFHtrjMe^p~hChoVPNw7VO$}$M4a;mEK(3U4F_cbAx6xhykPzND z54>C*7#wwFKZn8{Ma_|HY%|B$VCS03X5Z+V6Rn6euSk^|n+}l^{w2e8dtKWsF!Mq8 zh}J+tu@dZY5?p<+RkeG-m3IS*`_@`}Mrz0|O)|v@koZwx|7H;)4+B^ucUw<2@8XUo z$a9gvfYz}K)(YT*8Blcuf&~;Kvd~$1n^a4{K^@X11|xTwtyAbDO>u4xvoQKth)k3T ztw_4FiWWK2wIJn@8;-gsj7fP3@pgE%TT4upEisSK-yY4dzM(nk8-fV&IIQonwv$~Q zk1Y|CG|}t;OKRBvSqG@(82rEhuxjaJKo4M`C#ZlK@4VNU;%1nO0(@1TUmmP~g!N$^ zMZMy5nN?@^il;JkI*+BM!)&|OqPdCWXn$;eVYwlpex*F>b0f$sd`L0z0$ji%RF8&7 zk=>WzmxmO2hmvx}I3?5^k1D0z>B#OXkU6L9u#|V|kDmv@v@+}0XMdxfA@62V%|)np z#+S#+{tyZz#(MIuZHY}eVlrA(ye?YPZPae3uCW&Agu6~7&*grqX0-#6dxpjq9zW1a zcS{)`4#@!gVGyQ9>YSkS77NR`0N|V2Zk6%-EZO(2gRKkq^jZ_-NUX^CTonLr-}sPP zXnx=rk9pLcDfX2%$yhE{FiJanoV6LxC?$f;y7?S?(=rc@yNLYYym?$AE z;;*UQ(@N7H8j?ZbpAxrguDUxp8IABZjQ6z$M0zR(MOSXbWg=0Q27Rk#qu~>h->+3S zo`LZ=ojGmc*%cgD1ro=J?rZZ8T6fah0p2@c>*u7CG^asmt6pz@GQgJq1%*5_`J&9U zB1^WLbS=CsRcD&mEPq?RWw*H7D>QFel`3B(c=eXj{t?L;86SwxHc*YCF)-?~|&axFffFr>gna7lp9gY@bSR ze10?rSy6Ip@K4H7{fLa@X<%^ByJHAyM*=-Wi)V@M z@;CgDy$@|VpP2~I1W#?57xz{o_C;q6CZnG&i74=H<|W9qEPP&!`~5|}>;O!c!FDPC zXi3ox&3w^kdDx40x5ew-m3m#qdn6bOE2RN&^PP30E}!|pNT7h&C#zUutlA&{MG0## zo$kDJ%r5$)CgO*~BejD;W$k3MqKjuNz4JD$ZyY+YLwVG;VWJ5T?JNSvrLvIseVHc- zF8ZpOq5N=Es)GR#mih9ZDeMiF=T1P{d3-W5Y=JHN)u|>*rrQwxy2$p3^N9K0sQk0N zV}Cz*VqI?1hu~zEVfwa8W-7Ss!gufe>%32m&Y(#BVwfQfLk;zT@JqAZ?I2}Nycfw< z_Pu}9>&L#foGvt~4E9;y6z_ItYHv`O_1W%12n>)TYHoKNIKC`rF~F-Q`>E zKafkAan$*A(zN@V9HxUXvBN@9S=}<Ye)3_@Qp#=yy%fLE_xSyr@re?*=P?z zu+S2-->ttji2R9B*4Z8(WJj$3VfO+azb4!<-bg@jWz?4Om^}wNO{N2`z45X}!84P< z!*P_-uRs43HwpTjqjOym%JWh6aL6_D&pOY`wbnQfHq@C1S7lDgsWgB-Ey->Y>Z9T-M@8+4U$@mUqu{U#@%5ihGV zApv!3zKRKJ*>^MO(FJG|zc&Jm>m`~!R8-0{_84sY9c?L*e${f^WZ#A^ge6LfE^dB0 zZoe52^1@JhkT{ATy~46?K2i;rz>D{Y^UpX1solpk;GpNM)Y>$|&;7HRgYPgJE#!AG z<$E|jlgEd)v!FC@+<5bQPFl!&Di71#8X}L=_JY>+^NKUTENh=UMW^8{jQ*+@g5TdE zF>Obn_`u%N5+2HCuvNXy=q)IaGIhs#{i@|pB*?c@?5EJN`Az=}-IJexzk|Kb{Csx) zorY1=*3wd|?e_RuhTID(eKe*bnf_qdzN9Z*gg6-r%K%HcetMXf|Dbp4SYH+*tXvE0 z|2~hLWp1Z;Xxe7=IVZ8b**M}VJgx(OSh`|>luNnY=qzB+Jl9N!el>}T)70$j-zpr! z?f(K`^_3ILP5n1t*+lJg)S8IX@^&~b1xJT#N2@kpBs}Asw+lMA#avHgwwx4Xb&<>a z7)W4?&CxB#;pr3I0F=lYt+B#`*lQr`%=}1q^ta(uu6G((PrjchmYsA}D+x(T0+|B_ zh#Mc7nz4H2I01#T9q^BsX7|p_A(dvAn3}|4>!vrx(e^KpC~%5~m-d*SCjiPgPv9jaqE{*5~=v-ygKBIEJS z3CQ|D)wRpe{|#;jWhZ-z)ck8+5Yr;zv53sfKm~Wb{F9FT{R+hhvsuk~H7cUQUgJJma<(+c zH-_$#8j<*|_~+*9b0=*~tMDv-pBwW?Wg6*wgx)A0;P-u_=YvpI;JWd8{bppYN3wQt6Al;+3~nW9~}o?bg-8;RRu#!sDKJTRkX>b30GHY?|WOJe0GRnRNG3_wEaN7r9%w~;g*kwHGJMFdVeXs(F9h6E}1Y7V=Ag=HsD5`QuUIuIKiS2bydQh6#`ab8^9 zu6p1y;Y4GqZHcgDf3;_6UbpHr$a^2T^)99t(kjZoLR8$YzFz!UpcZQwpS~>luH_k+ z_)$6__(#aD>=y#~jn!G(AD5$*^0pvf^d$Ow`h0wYa`tt&c;~SVkp(XRIk&{{XxI`2 zE?>68$`Koa5lL&PSv3Eu0+9o_VW^kZU3XW+L3xqqN9G?New(rSNH+ZV4)$0T{Nn!- zF*SD4^7G+2$D6@R)Lu^THNA?&n%^%+zgOJ^2!}#&ztyA*-R0noOit2w__e-Pf=HzB)bEWH^QCvJRon(+@Hwg8n;VkJd8T4sG>@Y&OHt(tPRJI zENL|aFe{2BG&GYwmT=tl)A63+g-LcfeN*$h*7s|_M^$R;ioA3N{+|UvXd3u^55cG3 zvhUb1n>kt{rk*ofS-hyZFHg)qWYS0!f{Gp;ImNzJq`XmGx;X{e1oGCD~lmm!DQ_R z-bZ0!M?`PunQeEDwz!JGtMiiD@rsiBkdAYm-30Nk9NU$+glwcPMeY})Q-Ot_kJ{0*?^}eq! z!R#7ef(|qAfAnIRgr}WNLS&bU-aNv9x;|qufvNu?b(wk!Ter!Gxy~2ucf>!7x8$?f zd&vgBRie4J;&4;6ge+JHk^e5s)(15d-Px=XXJ}=1Xul8n*tkmx72%@W6xEZPrW zsrVRV`}N^Ld!JiY9KqphCNIOa0DD3+9+YSKmF>*!u4wX5p`pFPwRcVAqbbWi!6Vl!^~c+tpl9Hh zE4A>jvE16VBqpE)FgWL_c`fk^tR$)qUtFL5*HKYD&3%P)w!ifzepJN;ae=|T=0lHj zd6U8LL#Jky%gTwKTq9^J!A#I#&t0)UOS_VW!vnJ->)Ln!ig0f^aEk-*Wy6s zJm#x-M{WC+lY~g%_ez4D7WQbNhc61@&H=(9x#q87N*a?g#J04IsD3`^Wl?13R%c5T zS}k3VBp@se7oYoMzbQ~aOUUZ0XTsO@c|Sse zEx#(2cHCgBnEuUN9@>V`zq4B6gXBT;$7Vm#0k)j--e06FggY(S>?|##A2faU_b<;a z)CsL1aFGM3g$oYh)!kK=$8>k-YxJF_-V@KvZ*2c#=_KvHMy;8`5UO_)tF-ey5Sjt} zjxtz!oc~!;nsIxcP;R9?OgCug&BA$nKeMEFfF;FIJKSM*TJmU28a8msh8S|i^+y~! zf>$pg9$$OZ*V-Nz@ZR*BOaTboI7rth?pFGzjan^mlQG{e7yxtWd-=uJ9U(l6Kgusw zTr{$`m}e_Mhfl$RzdYjOr{FOLuLiZn8}jUYe|*nMdS3T*;kp!6(rsR@z+Z+#h}oWb zsY+b+^`w@$`l*@QPLa`ru`C9!egPhUY~CDvB_?qg+R$?mLDA$4S}JLtc%AVR2Ia%Z<=`%=CZXv!HD+l zEBzIatmltjEnoQ`_Nfn}9)I054B$QG|1Du>BU*83%(Eb}{<*42gWfrD+l9g2Y8T5M6VT{vLld z=BA=eJH7|xNixBaIa)@}u)1J5;}=%R|1OQa2gN(Kqz{LV?RY+0UbfXVv~RLV=Ktrf z0MAPx8?^GZI{jj@Z!H_AQ1G{1MIAYvm@z`=Nk>!40gec*LsO^hhN!lH$A|V$lbb#w#MSr~u4w z1xf4_1%YT6ZBvPqh{Ck*6xC)^E4CBwbjRj|TRaoNgtk|9JVsb0OkxMs6;>O|izS(N z*HNzmMcGn4`q=8s-^|0<&_HCLsqPt`=DmFb;$NN}hCG9IKrei3E`Zq#5gXryVa7M{ zlXOIcH$Je^^WdToW_xCc5pp86j>``GE)da0)eG0{1-Wf41w4MW*sQo+FCJhO>_k_D ztmn(_zx_;`%|&MXPr)MlTu)KTkKTzGC#R*`Ls4(5az}sS#$4#Zvq3=p6y<;Y+w)rc?~b=M|8vR4#|{< zK2PQ|Rol?jeaf5Hax zJ7M`c3jETA^q!|tB1qQzWYTey7)$VONB;&^=E?#_@Tal;z8p@U10l~I}&OI0nnVNqJbB3vm`6wxuDFtkqR>--Fdx&AK5CRFWhMnh4uwbBOnuyXL&a5p_VA8f@>&nD zJTU*_aj{qI7Pn=bg}v=uSD*`Oy{X)VJ6NvaJo9Ie#L^zP?yhd2r8fE4?vvU`<)*Es zKHY8CQ?=1n5qkG`#=sGD^f_B5E8JVBA7s;rexkOxZJho>|Iq4~6kb(t%+_@fiX3@f#`#Alc`Lt(@*Xa&ZPMkfcP(abz6xzbg3vr2+gm zUE87+)nx0Hg`D~r-`>U7t={Z4BQ=PC?qN5z+wG?qhK~?Zw3~l zR(Is47K_WB6_@-2#qaw+#Kki)njzPXRiKmDTHL5NyIz#kVrpWnW!i|h#`+RjTV>MKzA4ccd9f6N-Pf;n)t6NXK=T%DP=)1 zcZYt$8iY-Usz&0-*@{ST!B6lsQWAzroU&LVA|dnhPDAt$1SFm7ytu>5qtKaR=>I3b zL7t0qS3VWP96X22R#6Z)gg*)~vhFc(is0!Ted$wRaRYEYp)-83@IlX1VEM1&&zz6iOqPlOM*j2j?m4!U|5J(6$V*4qDf88R<06jlSnh?cIpO_&EG<+`sn81Sb5c z(-Q141q(H4_eXb39aW&os_Sxd#dGu}xYhs45&fZM0bE`!Jp>#AxV>j-347ET zd4$u@DE6C2OVlfOg-2mus9n&bMC*x9@y=$WXTwvd0qO#^seK1qx%0?>!(21Jw!0Dp zUnPYJFsK1&&ewZci-uCW6} z8>+R~+NmdcZiJq4)Ebm^K=na$$w!#i<5x?BV=&e1P90l?pGX9&<&MtOyP8^&W! zKtdx{6ZS#B>DU>|%>Cqp&jqTc3R+Vcfd}}U*uDFO&i!l|jMTmBZ0F5WQ0ID`_tI4% zRWG-wNS&QrgVYjJvyk#KeiyZQX}p#)G)5JkS$mKDB|xits0E*_{?Ux_M&`aHCiu>< zf#CPeDFW;4^y=@IM=Q(Fa!h!z8n)fToN02#`&$J;$y{7T;t)R_d0TYFUmim^=<&kY z$zJ?1b>E}+g<%gYmG&?rSoFRnXm-M6KE-&2inXbgjtXAN5k$?W7@+ppR|wK@uXQ<< z*6#ElTLRkmK00!h6KxFgiUD&8)S_Dj7H$ddMg*bg!>lxS`7GzcW!?%A^x+4;JvDB# zEe6>my~ZvKnIvI}yCCw@(M)DM^bo3N3#7T@|IDA$8}D(7vfbl3X%pP89ZY;nQ;9zL z@c4AR1%sBwlaR7AcqCc*nw**Y_?#%D=jK8Dwu~Ko5{gey7@MHP5`nF*9dfYKMl8Zz zJH0egk>RD}2*E3o!VU0l`NyX9@K$-=vB0*<{h+M2iEle^*vJOOG$gK<@z`Bof|7aS z2cshhSUIJ|M-L{T0lVkwuofOy$*1VbCU?j%L&-dtCg2z?(b9u~L?%TZpM_3CJdeVD zw?`Dh>DZR8!&>oRmIC&I{p@vw5pDO)C;VKX!J$APg-auLbDg5#LZoKsB4!B@EQ`~aS>Sk|ad)uhm`%Dn4U z9r$PipEI_imwr0jPqWM1qrJbXQ15;N(46lVtyewtYrmgiAo%zPQ8ij3tlE*J$1yZl z@JVlo$ykiq;d>HN)FpnU)ro--<<(hFRB>DVe&)umv=1v7|4U~77JnL?9}Wf~=tSQ# zIBmQQwkxN4Z{GZ^HI~K8z2w^!LcTvmmHy(p1kzC^fO+0;3PnzoSqD~KD@QyIGbIgr z)8gesS(CM$E^LhzdGF$ueDUA$SG|LaS5uD{masEtUMvW$4Msbf4}Qa1*T%RiQsB{1 zj12e@X1nfu2k!m}_V5@nV*2=Yy;7Z=yT!mGZVF`==$RDQJofo4YHMlqEX7tL`Kd10 zq2QbT48z}9-v07sB0>G2egy4$n z&=v6ET^0!>r7KW#5m0gA8~89CyKMIj7yAbV^pMeXRajIIJ+Ky=?Of%}iMU4!r;>Y< zpI_0`d@1nHMF?&*fqV~Y?_tu|Qd3ZJS5v3ynbBV`lE4T{BAEp#5-||c<0~9ATgDNxJiwK2GnH%SZnq;S6!!B=!4Ty?_86g! z36f^Lx^?Xy$ZZmK7$cEpX6U|CL*mP3#|TJeCcG(@QcN^0>%!aVNydw*s=!T&0Qe7S z%OO9FJM({q8Gtv~-+D0B>>$W{Xs2;IBE7u^!-LLjR_+I9)VoaEzE{uNnZ`z}w@#Xm z8)Rr_8SkD+Ud|B&-BqM5A%D6LT#fCX<_|nBAwqu!5##ls3|^CD*bqUY+2NDW6@A&nv5o5*=JQb+eskwTt0`H;NamrQ0q$Sa+7U?eW^)YrT7%|M z)*f~B0#$5Wvh=n!-Mr2(_K^e|(98bI?!58Lu!+l}yaMoMW(VdZ<|&}0)jnnD2*Smv z{#p1MBE;QBt@Px0ho2ywH^6Xl`les z6|E&#E&>ltcV?F3j6+P&8d`ricYAOcw%L<0#3ZCc#;>$SF!=IKeC03kXJzwup3o_# zUB})d=Wpl8Zf*dnc!G~_W0b-}JsB~GIAVp4{Y5Y^(j!%`L7)E}I>77pr=krLRYr&XDBYTw3I1Qb! zOB^nB^a?ZG$coE(cA(#WWJJD}kj|(O47I*&Nu6^sBeLBX<2}XNkNW5sQ#X~=^83Z< zLTW*t6ZW6?R>Bx7Y|jvq0f25~#Ja5DB6cw>Jm2xc&k@$ghOTV+-X(7DoP8;U^&Eym z!9&}$)KSXl6_uI~ylMUATg7RaK@#tr6<7#Gk52biEFXzTs2mwy_`RNF{_+_Pa=oGm z?K^$G0}(2`^wdG-Bg%H6yEcKZ5P%Zbi#`_~3i~Uw%i>piF&~c284xD3pbClK`TwqT zWIr53qVZ77FpA(*K=x^kiP9yNKziv;WvO4Y=}@-I>tv;0&e{uj6Tmc|_8xZrvzrX~ z;q1e9+de!`)*Wbtj6B0#lk@H^1PLw^Z>C-}EY1Dd_C*Jea9y6qfe`!k1sW(p+`IMz z*GZ@Fxh|c`u#ljIBgq+ookturmRci9Tx{Yhu=~j6#^lv-cdy)%x5=Edu3N$sc`wNf z40W5Zo!_GAn8T{=So=fh6$j>!PpDA%^MsS4jkJvh;G_LMR;LcmcMLjz@Rm-?97D^T zy6!WHO1VZXAJYt0O~Q8&^HNjW7mM7+&WXE=j_`fx;c1`}^4al;uX0+XDV~***$+o3 z$($fo`MdlsnU(KKz_qzCY*h zzKZCneO%D)c;D{Q9il1;^s-l#zpFh%BI+QCLvBm{r_|%Fsp?;FfOY_RlZ^CLB1OIg z@Qf?^(Hs1(Da1*bBZR$5Zxb?KnnxUBtHa9hEv*Vn%8HI6WSCa+Z+8Q@s-bOK??0COm z$ZNd_nprnq%Zhd8TnYfEUfS`s|D-DYQQdg#|NP28T-i>e)Bl|tr`|`{4LF(sQGk7T;B#u zU4{C67#_AJyj8bJ(j9tnnX_jqfJwx4rHDbjCi1g7I1cz~oL=;==ie8H`mgWS1FnY_ z`xoI#p&pg0vh;y(Ikn45j(?VR$Goi@sLRUN;7{Oh@gtI!U3Qy2y(!_L*BE-2y~c42 zjc!6_PW4%IKfF9!zijAatdG}QU@RN@Z!ud-Bcuxhbe>$B4L=quJc_uc#X2l-c5Ogru(u+Vbs2#~KxvBKc1+^N#U#E%Nx!{WWo@@8fXUjyHdrQI`a=Kta3*TSHlh{Ib!w$5v^JpN702wQK~uhkX5@1Hm7!Y0F&$(KG!R2dvMN(-feOnZFm z9G3EAW^Df~yro5Dsvbj#&&=Fr#e8O!=8Wgf4cFXrUI24BEq*V4eWAMknx>t~Nv?)D zLroyYu?u5{F5wwz73;>SvB3I&TDoj;E=!hTaA z1nc;BbY(VV%gAP{7A{ltjP|KgJo#;KS#NFnVyXwsUaQ=k+?j#b2W2OAfe- zYDiNt=2*wQy}q*gq6n)2$U{|Bwvmi$76s~PSqhsOd@nX%H=2Z0*0JjhMQ^ZUm8-cX zeGzQlX*oM^4xpr_qov+s!}$0^ftoPo4MQcREmUwYe+nj)fr=K=X}U0>g>=@+a5&Th z8tYm<4WgYpSHr@F@4-D|S%hk>2t!;8CM|)R#66(;4g2m513J3`^j@~{$G5?Nr(h8g7%xJecW;088ZV}ZDP~lda z_Jpg9+?&XaBUhZ3lP=~^u_DR8tH|Ed_yO%iSg9#p3emer-&2FvGp5oiMDHU_=vvh6 zo~QM7xq#^;nIN0`6``QwEFah zy|HUS<7^}o`~-@a0e!u{e0`iw5B|D5C!5&v?o zi!tbiZ}u!5>uVvXA`bjsm;7)H13)G>K%TYM$B1(#3=C9Ry;TrlQH8rXunhQaJ$*1 zRt|S)M<`U;!U7GstdC*PnSlkcMmv~IXBK(h3t9!7X~HBY_dTJjOR#9d1JcGlwV<$g zGG&{yckdz#LDTrYG<&{5=#vb+m7Z&O&u&%Y=#@!vvjCyH$;MccIKVjTPekc2%C50X zGU1rMeM53m$E^Eggeq!P{f`u;Vk;pYyHkvDe;NZj*{q1Mi_FfA8s(&<8TA1X#+a-} z)qmY4Ay$!ZEe(SE5QDFL5HIR2BF5*7D@+X0^%i%GN#|~m>)9)xNg5c&rMo*H;EjO= zm7;tzeO~HfJyPnQooo?HAM}aEJWLEtDj43qAeZt*Jl48QE3DXH}c*x@k5JgR{TUyi8s!jybs7wT+AU8vnja zue@w{m%p@EWFeRhSIny_aba&jj3`OwZBKh9fg0isk&hupSS z9_lra)W{1ibFCyyvh!*A-V84ZP0$f|wg6)_`dfP`8O!*e%?kv@<#FrDxsb0%-ivmARM&Y*q8p0bpx?E&Hqw1l`HWmeX+YCFeAcDATjjyQBFuy0w|9a*JE!!{E)XZ z77(Ih({7aF|Ijk!+IAzD6fymqq;wzj?0v#^Fgc~Gfd$R{?YFzB!CJe!eJTp2P_nY3 zfJD9sBKxv|cBU66d`*RL`AvwXJ;JkfhjsmOlB8Mxlm1)Yq9S-;Z?{Wc#t5EAjRLMPc9|B$Fn&E?N>`a- z*4sO8%C6cKnMOtvs=m3LvG+ABpxL-tY)b-3-&jVmAT>Nzl!pK~$floQfw4uX(HoA? z;0?m*454L@&nY(DwJ1XV?3gCwpgr6Wdwg%vIBqo=RGW@M41i@R$B4C2vm^h49iP5n z6TR|frhZly3a=HjdoX@p>v;Z4|CnMw?w0$r8Q;DA?J`fL*O8;$6a`4elTtGMySWOj zWKA0D6S*$$h|&rn83Rb*ZsYfrPqwJDW87j#+wZ`p@sH*Zf5D+|j$Q1eMz5_0YF zagxh1+#0#qY=o7HA0d;V_Y*L_X)9YTgabwX^6rekF~v^V39{9Exz6NWsN~K+8m^6d zrl`(ce&)0nMT*Kx^Tn!s_ywu}c{tDeZ9Wws)Yd{Nr=CPWsgKR0-sWR&Wx<#Ugx*fV zehYgZOch`bV3nk!45mI_c=sIX3EnCtti;C?nB3QGLi`umDLE0gvD_}tW=cEc!lEzD zY2UK^7^q0-?k*7eZk;V0YR+_Dd@smR!dG+fVfy<-kiF?Z>9%#ch@E3&ZL*aiuR4_} zaWop&)Sv%x*Fpuz_<0q{2e@sXGHN}u#?gG2k`m|_fo^4GzZ%i8h2A|}gF7Dqg@LSXZz+0Hwtdbg{z~sjBtReN?{K zN?MzBs~gX)oG^*WuI^(dFdH=Rl*On$3`?p~q4;_ThG(c*%hKE+ZRe6TG5OvDH6a0@KdYdY z@tdFC^yc&&z1vmGaVDS~ z1Mhs9gqxaH7&YTEG{3MSUtb$`Y|&XZ-)aiOCAc)Q)> zmp3y>WKFpvA)n9;8k2M$p$qB?`1sk~aLUe9>;OzPmlmJ%MRJ{pVvD z2N>^B8lwce6Z5p4diC0P$s#l$|7c1Vol^FmFHh3)Bg^8CzPdy2#3W>5IE9SvvKUIB zX2IHpr=gSf z4S0S#YDCJwD3l8S&a*q3lrLmwSUUCZLQvyg!&4&vOQ=^%^I2f(CIpwk@B=oIcb8c$ zEVSc@)FzS*pD^#mnvfmHZ*RZ5UIZ(c%Aly`ga3>R_0WOLO*uuySE5X!mjV1U8jj{S zv4vo``yjVo-+S9+J$z|~n+BmVjE;!kZ|}~~+$m%ITOS8T_9`i9bW72JUlGq~7m~uT zcbOKL=}Zvz(ywV`5Q_b_=hVeYS1KHl2&fXpZ}}5MuBqw#c_i@Xr4NrRL3FKNaMpu_ zQjUYt34%V@48ar5ccHcnrfUD*kENa6=zV+l9@X5ka&pbedV~= zdggUk-l2hDf08-l+*h7Cj(hwOX4$aRzbZbH#dyyCSiq+JA{Xvy@kC8D1Y^ysD$;U(Dj=EhY$g zrL)qdrE%c-(jH&62K^RqoO;+jQB6lvSCKM7t5z~ zBk76zUpn?}|6xF6y-u>|Z_U~Iy5!?>Mxldi5HUKkSU(ow5k4+q)6YHB))=Ujo2dMk zBFPdym*&xI2%k&X{BUGzrA?x-NrM*4_OW zIrbFM?o2wa0lLRIW5{zb!(<;=-yI5PGQ-mh1)A?|@?k1ZKfHi!)UL5``cnavleO!> zocrYjV55AXNQ(dB@m|0D0A$JCbBcs55UUsvvT5GTXO*jh?dtmEQ*FrdTV>*qt+mE3 z4Ec(zOcnUC!LQjkk09Od_ZU3AdI~|mZg3*M;sZPdyPxTQ_wMA9p!xnlqe2>qKv{T;ch-^tSeaR@mU|M@^|%r zM#VPACr2>p-QS{XPbGvA6mxd-%(65RC;JhnQ`jZ1P6z8=;qAqhza@BA*+A}7L_$;? z4UnJK8I4_58ljgjV2|uL$Gi7mX$i>u_fB%Re(FlP+IBlT3j9J@C|O6sU+UNSOHXqV z$CEVAiNLmFJ2iX6!xOy~HrS2$3!<1i*lM=@I{U8kS1tSFW@xFaz&i*YKxMr2_Yw4? z!5RVdVpj;(Qzc)6(MZ`;^AxW$g$lQn4W61uaZBMi)dZ%nLeYqIt@4hBBtH4lSfDKD zx5O%qjD9AcbeACBJ{4rhP0A|&7mP5h1IJRo(QT0#`+%eUz&_aS5ND@Y2zs*P+u$$A z4qjQ$5*hn9jc%^5j1{r|iriK$B^YA?evxqH?uB5|Q_>3i&Js}J^Wc#ca0A|S6=qZt zY74FpO6aGHjO2gw>@PJuefyd5IWp;@jpU@7&bQvGuVxtD+Uq}_=Q4QU;8Z;kcF&Gu zK}ePDEd%C)AJ``U;~L5-p+qMMp72_e&*%{2(8|46gAo6CBRx(2Ts-*FX^yTI8#oa< z)uq5+$V?b3&grrBw5Sj?|22C~mY6d>tBYgI>{xqfb7U5urIYuQMv1 zxg0&@!$by{e?$frK~vty)3q;;_8sm0UwdEq7ge~mJu`Htgmi<_pdd9vNw>7ph%`z{ z4In8>D%~I-j-)kEItBJ9Ghz#ZmUdytgX7jx221Z>FlG0aKnn%M5f8(PYf+WH}oj}Xb9P;=kOotb6 z_+j+4KAV_LrlQd!Tmt!o(zT6r57B0hMQUtD4a43HUWhBE_!4^ve5`0jodhbTQ@$J9 zk^6W_|ESJ>VVyV!8^<_cfBey)?*bOo#}+NdY#9iOPX1Bd=*7aG(mq_0Uv|zxa3c^24U`#;S98k-W|XBOCCx+ z=|$$5d6!lVC-8;{6dyOo%;)6vfs1;yM7l0#p@@3V`3@y^?){KOCC^T#H^ZJutGRgn zL}O5RxPj)$0pU1tyo#`&DN(h2Ni0acNg~)=;#I69CKY*H%F#fxc3mS9uxtwy+!w}S zp7Q@N)F9ug%Je;A?4n4@lZ{;jrc(Y&SDFZN)J1NRv5^A)YETDMRhksbVv6mdlzo^J z_$86S8xa{rHI-XKq>EUXeOLur=ia(HyK2@?b9{oO0;RjA2Te27f_7_pB`X7a%28dk5vls zLe*di_E55cSR-BLgiN_ z0ZUN9Cq6PK%%|=jhExvMSM5?3NL9{Zxl<6ro(lDaBJxNNuDw@l{ym~Roeh(AUu{~t zJFEkS*E8A0y%*H1*8VD=dtSwV6u%q}{$OB5{MlJbCvyCllrk?3LvBBHz8-vF7KCw} z>)7hD3by;m@DHaN6*2n^m9a&%LBiNYLdmX3u6GvKw+yPD!FQI@HQZl!+_Ln~ z{0iN3V3`KH->i{yf&lMdS_JSg06^a1v&3!mXq9K1VfTpP=d(gFyvC|o+7@!7@4pRg z_e9&uzs3mUHl7KihsTXe%3jig+UWsS#PykXyT&Z9y+;pn=PuAq-;`!nLg(V0+1g`6 z?hF^kb_(>@zc1&HGy}(=AGlQ5510F&oMw7Q=I8#>T2Mkq;Z7JWN!M<)ssD1ac|FEF z6wNcyt@9@5k2DX;tXXa@d?VopCk;>#xJHZ@=VvuVo0hIRCOR}pc*Ynh0-!+9ad$e=yyf1Hsf z{S*&b{veDG)ih^oa?Tb=@zU&vz5HHtT)h|BiXsoTDLe9~ewRua+HqlB(28jN`oQy~ z5}8_WSm^n!x>FwKi8n!6wjSNnUDpBEh1T^^gluf3U`XqdolM`w4QBA1gY7oJ_S`8; zw(I=^RIw4aw<1y?9qbvd{2c6ZoB1vxXzW-zM2T;sAL4LyH9k?VpJHbVm_OY~f~sNK z56NzV(mI^lmQNX1Di@(#hSzAZ$jblIbo?D3MkmpSD}1lBN} za4t3^8Sg6}F5f>4pG zq3Z(2n_~Tx{x=?aK4t5Vk=~gX8snIoy_9IxX;`(~;fIa|Js^%7DhTBwj_3mepI>y@vuiSaaL9i!TtutdX zdq_o;aT1=#_&<=C9IM9S z6yVg`MW{!|KCr&vs{wST7VSafdodY5aqyl(95#!7dE63fv2SWFABd@UidBgW1eH-M z+xul+t;HZtjUr`1ZyRgF0irQ=%hJ3*V2%z3n1U~OhtEJ%H(LQcD-B?`z*H84A7}1c zLTB@<&CaSi#+bLpY6JLQzy7*VTk$L01y&&0jM=v}ZX~ip<6rA3_87=q~ zP5dvp$f)TP!PSplq1MNIlj^m9N#$m0`K^^1OJeVVtd8|iT$^!@wfPr)Kd1KP)G>M^ z9_>B{;_u$Q>(#LR!VmqUlZz1@7&1d((n^%M#=}my6w(I@!~KjoC*gZd3na zHAe1>^1hR2g(Gnts#F~36bA$IEh-BvfB+D!Ys<9DV5=0;QA=QiC( z>3J}}#(QLDd_=^tDU#7!k?82v8DfAkGUMo~F5`V-!12WAqE`_i;==nBz?lNS^c_O* zkK$A%P5geM?m7kZuc+uJ4Dn)BH@bH-Mk4(T0JzB#3`I6+PiO8Om8hn68VAb!{u`M8 zj3gP8a&4;XS086>WTYx+E~u#G*~0MU{t$vE1tAZ$TWfWwbpME2F@`PqnH%aw)h-mYq;8k`$J9 zCNqQK8#M4i)VBc}I(dmowg9v7`C>pax{(ZF0B<>TCp3eTH6|@$Biv>5*&cY&r*Rzf z%(Br*_WcT7GgyW=H^nh#A`k*~HI4PtDaX8~QWp5(lnNtN+$0n#J&6K2MuHe06U1*% zxa7JjpHZEb6i&l3nV9K-2B%+G0E z&r}EY{;WDt6r5?la|Faifw<__E2jwm!7=)HyblS*Y5eA7vA!^lmz~jGlwGaQ$od4V3AAK_QkGh zAUWrlM^c8VW>J^KWJgWtJwWAN0o!%{DwjB1swe1h^$Ugjk?g|}^P+XW?PG|cNMWJD zYs^;yl^)|u8zkp2tq8ae!HGb2$`Z=gDbn#LdBVwU%Fz2a z9WSnC^!yQYToAogdIWs9adGVjqJsydce}-g&GL!Sw(Ncxl@xu}#-@cPyf&Z3q#qjf zVJ_UM95nyB*%ObQXMQ0iA$2`7e~e&=-&U{6T9wJERu5ewb3@x`DtGhljg!Zs^>DLP zgNStXX1q!(Ig)|iJ@^snc2NlyO3K&R_1|qc9Xv(L zR&V;~qiyfHkOtr?Q3a20GHE>h*b&2)Du4csHvf!m+ErG({xy+SNF{}EKQrjrViRJW zmgjh=GNzcI(r(&1!=RglU{LW@TDgTt9=C84B2j)jI>V6v#Iq#@YOLb@nTM!*VyLGP zUHHg+{7v1;wzBNt9YR8^Bj~4y5lt~(1I#T(aQU=zrrx8OxLVLO6@Hh*U zbdHJ~%E`9zJuk*^N9x4B$A{dD+~3$^#7MAeXyl4NG8C{^JbvJ@XgHY2h=piD1x3Tp zyQJ*;Jg=T}bMQ~Y<}rh$oK{%k@*CdK%w}j|j{!abW5^B z-@_fs7$JkMu6jy9ekFf@S$W9z4j_+q?YI47XyOcJIUUOVo_9BN?~T<%S}ondb&eOr ztX6i+H;E0~)JmLb$e7F?|mlyC1h< zTX&-*Ep9~3Mi5W;3~6xv3{LSOK&^&o8cpfgg`FgfML&Ct!}+m^tRmn|q1yVT{Ls_i z^JLKINl15!=ZBB<^Ug$i-`mcD( zNP7!AzQp@1l9*~M-p?Ktn$JvWpp}Q`LK)RTe1rEa!K>CMZ|#Ph`+oLal|$4MaoIR7 zr&4$r`X_9@C%5qX4`U2NxA&*S96-aAlwkuJr@y%Q1$#l{bHB@v;w|~G77eQvLhk!k zzo#EUOb8lhKX92G*Bpm<%LwL28=Z&!X@K`(qP8MFaRo|oO4I~j%a`D)4x-4-VZS^+ zNH6gzwj+NbM5e*4WC^yf=zQQSN>q%fpL<1tbR5&4alMgHKvo>9>I4@7s{k7WWKe`y z7-wQ!u;RoZ*fwy5JGN>fP5*Z5=f+PV-*jnVCH!c;Ze5Y6C>;$oW{|`q!&VKTW&aRV zC+thw&{LW1Ld5PdQ7_fzVO0yqk(8+>o0CYt9HYeYdhaPugXfkkY8Jajkvmt{efp$F zaptW6uJ-AZR!bOsxOVd$8bO8KP@(K7UIwWTd##o)dmg#&Si~9Jg`d20LgnTu-3hR{ z3EH+nEuS#CH>#MZ{Zt8~1wxu9ZD-32?!t^qqtUK!Z6*FDe&wM1UhrNXlMd7JR9U+q z`&*!-p;Wy)wF=QOcYwp%juqvVIvSRS9(R*B zW2*nO?h5J1b80)J>cdcSY=r%mVQ(g|K}G95zpZyZ`-@9JBW@dNYj>>;SYv&~ZXLg2 zCPXIsUqtZveVgo8P`^8?$Vq~9cL+tv9<<-;TKGE1rz^b9A6_dihu&m2L%DsuSIUot zG$Maq$=5ER$NawlQiy3u?B%CiR3qL3^b-*y^u&N))xlDQ(W{#SH|sa2`x}40{Q3&z zf_GOy?vp9d&;dEQoWw$n%u)8QD$(~BzrJX_g$B$Xh;XP*4v!Fnu(R$h#sb0qvce(S+*1X9PT2# z3ZtkBVQeimxG;CuvZgZ_S0jvT!jL9Rh_>(22Hn8InRZ#27`{E0K9(%E8ojD-MSIHn z*e(S3F^>oxT*Ha;z8~D6z0yyUVFs=@Lenr}ntL@bn2Jp7W@(E+5y{ATJ@qgGV`l7% z?>(ZjD;XvJZb!UAMWdP1?b42~U+?`Q-czs@rX`W$&t*ARz=}1QeGA3|LReDIF2Vx( zidDH*JOAX1JR_LOxEM(=Fy7*s3{BN8GSIrH9O=L5F_dV7G=Fb>u&m;-)?d(Ip)wT-raLWh=_*Nr zo)y(+LT8^zpH5KWNbR;FOVHmpVoS|dQd1yEwY17k|7Y%T-*Z&*Hj}3N?E&>4QPQb4 zv9gUHjh?27EvkxNo*4=5t)J+^IJCg@pkRH>J^xA~x8j(|*S&lP$4s&4(cU#rx|2ck z!zlmsa`e^4gQ`xF|D34IohhB`zUBH@7n=*pte)l8yC3{@#^-rDx>+g<&^+1R9XIw3 z;n>wh5+5eT8%w%N^V=bYxwK>3T0FHs#Rib!ac;qetwMRE!7q_T2J|A#QPF_-psqGb z)uDv3ghBs8D9nG__o?N`g;>{-$Rn&tIdm@uN2e!6MZQi1P&*O(mDO$6M%Tf76~i0! z4K=d`E8pEx2s#Wd405Y-4yV>!^kt`BFC#ihbIbTjSa_+j*`6YI$X&SSmT$|wl z$VyrLrjiQj<$SgtYMYrZN5&sMKo9IrytAfkd~btdo+I}~Ymsqxt-DJwxR*1`r?&GZ{JZX z%^HHmT6i5gD}L3WLO6K*-;gaiFAezx$?eSQ0@rHn7CYIs!^Pkj766KoJ75EoVw#2Wh`Flsv zPUDX`ey)l1uwRLkw@IIN@Xb4PBve(TNzP<9sP6gOXz_5r6MeXAganhj^FQ8ntY4uB zT#YeOK|FHBfoV6&^5ynqErDy7XlO(-=8uB~!xD-czP-PokZz;z1R8+3-%MPFc z<686ek;NHW9u6M5g3g-Qqx#K^1ch2wXx^=xZ<85dRMZoSy0^z!B9Y03fi%Dxw2o#j zG2o237fBvn_8=jNwuthbrET{74ic_i#&*?QKkh!OmXI}?k|g;gV#6fSF4N-)cd@_%i{GJbB41a#Nlu##6b+7uP9TG}!H zB##sc=L~y{a^Q1CM@Kl0?BTmtJ(D+4R zIq#aJp3X z_MySZ+0z_pDEE`^WD!(<^V5sy2%}q{>b57^yG+ZcDh(4jeP%G;X?#&jY(grf9MU}Q zdgsGsa=U6TXug1flvhuLLsORBCG97cPClNFQ^B$wwnzB(QcipP1Z98^P&_GWu~1+&hYep%kc6@dutoKpbGRXWV^(sQoVJG#A zyU0|sRd_J<(hj7{Lw?K(rb%WHsbKBiQTJ-eahLMgMPqFpy8AE)g@@B9Yr@*t*}Aas z17;GusP+pA3OBbQnQH+e{6xK@EqWH5wwE~eb038+a@m5c;wfhTTFhomnRi!mI3exO z#>)j^Fos^0h|oD7Hpd31OMh)f=|?AHscFtlVcIyg9*HPlsk7II-27;Zr527hi!js_aOlCtx)>oJ zm#l>km)fslLSzruU5_uQ+&xr0Y|i0efkpK7D~{QV2P}4#J@PV)}Z&d{70(WfWgg8A7@m58zgC}q<%J6ytk%b zX%`2suS{am=EgV+DYY~j#Lqs)jU5r+IcB=e>O7Tc=_|!`AuTnLM>zJ=t(W#tV0<44 zhG9JUSPdhh7%7EG)36dySJB;=EO2~wP8ZORSv4;daT#EJ%x~4PCC?=YZ83m70!GG< z#@$w3g+tct=_BR_b!%f?Cv*7rl993^OOp;NYhKej5AA1LOqO7zBHPOlESX+<4@Ed8 zi}TR1GS{8cW8$TH;z7R)whp#Z;D*f~z1j2#=8E5VAps{6*<2BBSJNI8iLwvT#<&TQ zL<7u^X)Ry*=?{xlj0jA-AnvA6Gw|2qXm6C&DxdO z9uP4wh#z>f#iBibRIalJmK&5iQFqvbx&fp2Xi$8uC{V%8r$80Q;)E{1D=)En2@Lez z6$dvEFz9)8X%I8$7{Yq${%FxJ>(+wZP)fRb1SM}GoJO|(bl?Z?AQkvWE69QQd&vT> zw~T9?b(n-KdgP~2FYKd}%RV7%2><%84-GXsnp{rlKN818vt4*psXaE}9Qfcky0LVB9#EprkwGe+9peOgoJ) zl>G{`%$B66?Ur(t!jk%Nb!hQn*nK?&-CqpgNb(6#c15g)#MU;_wi7S>M$}#Z?q;3$ zZd0%lpr2hQBK&ZJ3Wj#Q9{FS&$3MxPKYRK}K8@!mif+6X91LCv@8ij8iG8$} z>}WJ!6!_lcRRH|*AYG#zno8Lj!MSqKiMc#pD--b_t}pRU$f$$8ZQ$adk-i9oN*D~U z8!y4C&6DuTyfD!Pk=$Ie_FOyH6{EM-$LSwn38cHXJ413pB>Or;EsTKBzAm!7-pqYk z)=O0_v)&K@)1&ckPv*Y7S+6BnE+go9k}rx=>w}u*28`*{cTD81CuKGgmyO)k?q@eZ zZ+(*=Jq&qK%=>%Z{Fz{XpmLv~&=!Yut`FjkOt1Uc8h$A*pbU8B<~52Rkpr|z`0K3{ z4q(4BfD#i;zO0C}j}(8~q?rVzziq`)a%?UYn5-?vw|lIV;O7RxLvmtqg_8_IR^PWm zQEa6V*{x1U`s#>bn(ieS9pTBodNXHGZK|8!0EKQq68q@XXcJDi+2oq5T7}QRLTgOrL}no63~dcT29Qy>Hku>pDe- z-x<|$B9t-u7AKxYaxVE>Gb$b$x0~yZqt|F{jAa>2g|#D;MKdso|0!P^yXW0}`1@YW z^CF2b)`#9qI7O*o#)AdH*Zc=kvbdaAT-J9_qcMI2F{YzL#BqC?X&5w68Zk)2lwbS~ z3b3Y9V12lTfQaI>4Tg71>3_5xUEJD;3f=7x2*%J!eCMg)TVYcB9WYW8VuQ8%t2&yScpK(rODI9~gkQ_6eDT4L+=ihf+b!M{{I` zx}`Ex4o;%XG8OY!5fW?5c$p(zHE*Gv$zsS`=uKjw>;xZnu90-IFS4vqj7eiTN!4&%MUe7BYgjv2J0fapgne}rkmx!AufYEi~$bjMx z!dw<`=m^oo!n`dVFMvP&Hm_n$OuN)8mwQ*m{-OxmUp6TGJl!I&Ryd$0_Kv|^&JSfn zC(?N{K>&VE2UenixWSZjWiP*`$F$0Lt+(|k5<)Oo+*} z7%dS1SLP>~V1B=~$MKFtxu<^wB;~*FQj>AGTt{jA6t6~Q4bcc5@z#31kHdO z7P`W$%EKc5v5IdGRTJYkgn>H@A?qnn;Wr;yo;w>{n#c@~tzIt>cfw=jae|e)SqR(3 zp+B&qyEMGR3h^gbpP^hK*VP5yQNAEk5i@~eBe, + ) { + @Serializable + data class FileObject( + val mimeType: String, + val id: String, + val name: String, + val modifiedTime: String? = null, + val size: String? = null, + ) + } +} + +@Serializable +data class LinkData( + val type: String, + val url: String, + val info: String? = null, +) + +@Serializable +data class IdUrl( + val id: String, + val url: String, + val referer: String, + val type: String, +) diff --git a/src/all/googledriveindex/src/eu/kanade/tachiyomi/animeextension/all/googledriveindex/GoogleDriveIndex.kt b/src/all/googledriveindex/src/eu/kanade/tachiyomi/animeextension/all/googledriveindex/GoogleDriveIndex.kt new file mode 100644 index 000000000..61a7a9ce2 --- /dev/null +++ b/src/all/googledriveindex/src/eu/kanade/tachiyomi/animeextension/all/googledriveindex/GoogleDriveIndex.kt @@ -0,0 +1,497 @@ +package eu.kanade.tachiyomi.animeextension.all.googledriveindex + +import android.app.Application +import android.content.SharedPreferences +import android.util.Base64 +import android.widget.Toast +import androidx.preference.EditTextPreference +import androidx.preference.PreferenceScreen +import androidx.preference.SwitchPreferenceCompat +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.Response +import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy + +class GoogleDriveIndex : ConfigurableAnimeSource, AnimeHttpSource() { + + override val name = "GoogleDriveIndex" + + override val baseUrl by lazy { + preferences.getString("domain_list", "")!!.split(",").first() + } + + override val lang = "all" + + private var pageToken: String? = "" + + override val supportsLatest = false + + private val json: Json by injectLazy() + + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + override val client: OkHttpClient = network.cloudflareClient + + // ============================== Popular =============================== + + override fun popularAnimeRequest(page: Int): Request { + if (baseUrl.isEmpty()) { + throw Exception("Enter drive path(s) in extension settings.") + } + + if (page == 1) pageToken = "" + val popHeaders = headers.newBuilder() + .add("Accept", "*/*") + .add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") + .add("Host", baseUrl.toHttpUrl().host) + .add("Origin", "https://${baseUrl.toHttpUrl().host}") + .add("Referer", baseUrl) + .add("X-Requested-With", "XMLHttpRequest") + .build() + + val popBody = "password=&page_token=$pageToken&page_index=${page - 1}".toRequestBody("application/x-www-form-urlencoded".toMediaType()) + + return POST(baseUrl, body = popBody, headers = popHeaders) + } + + override fun popularAnimeParse(response: Response): AnimesPage { + return parsePage(response, baseUrl) + } + + // =============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request = throw Exception("Not used") + + override fun latestUpdatesParse(response: Response): AnimesPage = throw Exception("Not used") + + // =============================== Search =============================== + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + if (baseUrl.isEmpty()) { + throw Exception("Enter drive path(s) in extension settings.") + } + + val filterList = if (filters.isEmpty()) getFilterList() else filters + val serverFilter = filterList.find { it is ServerFilter } as ServerFilter + val serverUrl = serverFilter.toUriPart() + + if (page == 1) pageToken = "" + val searchHeaders = headers.newBuilder() + .add("Accept", "*/*") + .add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") + .add("Host", serverUrl.toHttpUrl().host) + .add("Origin", "https://${serverUrl.toHttpUrl().host}") + .add("X-Requested-With", "XMLHttpRequest") + + return if (query.isBlank()) { + val popBody = "password=&page_token=$pageToken&page_index=${page - 1}".toRequestBody("application/x-www-form-urlencoded".toMediaType()) + POST( + serverUrl, + body = popBody, + headers = searchHeaders.add("Referer", serverUrl).build(), + ) + } else { + val cleanQuery = query.replace(" ", "+") + val searchUrl = "https://${serverUrl.toHttpUrl().host}/${serverUrl.toHttpUrl().pathSegments[0]}search" + + val popBody = "q=$cleanQuery&page_token=$pageToken&page_index=${page - 1}".toRequestBody("application/x-www-form-urlencoded".toMediaType()) + + POST( + searchUrl, + body = popBody, + headers = searchHeaders.add("Referer", "$searchUrl?q=$cleanQuery").build(), + ) + } + } + + override fun searchAnimeParse(response: Response): AnimesPage { + return parsePage(response, response.request.url.toString()) + } + + // ============================== FILTERS =============================== + + override fun getFilterList(): AnimeFilterList = AnimeFilterList( + AnimeFilter.Header("Text search will only search inside selected server"), + ServerFilter(getDomains()), + ) + + private class ServerFilter(domains: Array>) : UriPartFilter( + "Select server", + domains, + ) + + private fun getDomains(): Array> { + return preferences.getString("domain_list", "")!!.split(",").map { + Pair(it.substringAfter("https://"), it) + }.toTypedArray() + } + + private open class UriPartFilter(displayName: String, val vals: Array>) : + AnimeFilter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } + + // =========================== Anime Details ============================ + + override fun fetchAnimeDetails(anime: SAnime): Observable { + return Observable.just(anime) + } + + override fun animeDetailsParse(response: Response): SAnime = throw Exception("Not used") + + // ============================== Episodes ============================== + + override fun fetchEpisodeList(anime: SAnime): Observable> { + val episodeList = mutableListOf() + val parsed = json.decodeFromString(anime.url) + var counter = 1 + + val newParsed = if (parsed.type != "search") { + parsed + } else { + val idParsed = json.decodeFromString(parsed.url) + val id2pathHeaders = headers.newBuilder() + .add("Accept", "*/*") + .add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") + .add("Host", idParsed.url.toHttpUrl().host) + .add("Origin", "https://${idParsed.url.toHttpUrl().host}") + .add("Referer", idParsed.referer) + .add("X-Requested-With", "XMLHttpRequest") + .build() + + val postBody = "id=${idParsed.id}".toRequestBody("application/x-www-form-urlencoded".toMediaType()) + val slug = client.newCall( + POST(idParsed.url + "id2path", body = postBody, headers = id2pathHeaders), + ).execute().body.string() + + LinkData( + idParsed.type, + idParsed.url + slug, + parsed.info, + ) + } + + if (newParsed.type == "single") { + val episode = SEpisode.create() + val size = if (newParsed.info == null) { + "" + } else { + " - ${newParsed.info}" + } + episode.name = "${newParsed.url.toHttpUrl().pathSegments.last()}$size" + episode.url = newParsed.url + episode.episode_number = 1F + episodeList.add(episode) + } + + if (newParsed.type == "multi") { + val basePathCounter = newParsed.url.toHttpUrl().pathSize + + fun traverseDirectory(url: String) { + var newToken: String? = "" + var newPageIndex = 0 + + while (newToken != null) { + val popHeaders = headers.newBuilder() + .add("Accept", "*/*") + .add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") + .add("Host", url.toHttpUrl().host) + .add("Origin", "https://${url.toHttpUrl().host}") + .add("Referer", url) + .add("X-Requested-With", "XMLHttpRequest") + .build() + + val popBody = "password=&page_token=$newToken&page_index=$newPageIndex".toRequestBody("application/x-www-form-urlencoded".toMediaType()) + + val parsedBody = client.newCall( + POST(url, body = popBody, headers = popHeaders), + ).execute().body.string().decrypt() + val parsed = json.decodeFromString(parsedBody) + + parsed.data.files.forEach { item -> + if (item.mimeType.endsWith("folder")) { + if ( + preferences.getString("blacklist_folders", "")!!.split("/") + .any { it.equals(item.name, ignoreCase = true) } + ) { + return@forEach + } + + val newUrl = joinUrl(url, item.name).addSuffix("/") + traverseDirectory(newUrl) + } + if (item.mimeType.startsWith("video/")) { + val episode = SEpisode.create() + val epUrl = joinUrl(url, item.name) + val paths = epUrl.toHttpUrl().pathSegments + + // Get season stuff + val season = if (paths.size == basePathCounter) { + "" + } else { + paths[basePathCounter - 1] + } + val seasonInfoRegex = """(\([\s\w-]+\))(?: ?\[[\s\w-]+\])?${'$'}""".toRegex() + val seasonInfo = if (seasonInfoRegex.containsMatchIn(season)) { + "${seasonInfoRegex.find(season)!!.groups[1]!!.value} • " + } else { + "" + } + val seasonText = if (season.isBlank()) { + "" + } else { + "[${season.trimInfo()}] " + } + + // Get other info + val extraInfo = if (paths.size > basePathCounter) { + "/" + paths.subList(basePathCounter - 1, paths.size - 1).joinToString("/") { it.trimInfo() } + } else { + "" + } + val size = item.size?.toLongOrNull()?.let { formatFileSize(it) } + + episode.name = "$seasonText${item.name.trimInfo()}${if (size == null) "" else " - $size"}" + episode.url = epUrl + episode.scanlator = seasonInfo + extraInfo + episode.episode_number = counter.toFloat() + counter++ + + episodeList.add(episode) + } + } + + newToken = parsed.nextPageToken + newPageIndex += 1 + } + } + + traverseDirectory(newParsed.url) + } + + return Observable.just(episodeList.reversed()) + } + + override fun episodeListParse(response: Response): List = throw Exception("Not used") + + // ============================ Video Links ============================= + + override fun fetchVideoList(episode: SEpisode): Observable> { + val url = episode.url + + val doc = client.newCall( + GET("$url?a=view"), + ).execute().asJsoup() + + val script = doc.selectFirst("script:containsData(videodomain)")?.data() + ?: return Observable.just(listOf(Video(url, "Video", url))) + val domainUrl = script.substringAfter("\"videodomain\":\"").substringBefore("\"") + val videoUrl = if (domainUrl.isBlank()) { + url + } else { + domainUrl + url.toHttpUrl().encodedPath + } + + return Observable.just(listOf(Video(videoUrl, "Video", videoUrl))) + } + + // ============================= Utilities ============================== + + private fun joinUrl(path1: String, path2: String): String { + return path1.removeSuffix("/") + "/" + path2.removePrefix("/") + } + + private fun String.decrypt(): String { + return Base64.decode(this.reversed().substring(24, this.length - 20), Base64.DEFAULT).toString(Charsets.UTF_8) + } + + private fun String.addSuffix(suffix: String): String { + return if (this.endsWith(suffix)) { + this + } else { + this.plus(suffix) + } + } + + private fun String.trimInfo(): String { + var newString = this.replaceFirst("""^\[\w+\] ?""".toRegex(), "") + val regex = """( ?\[[\s\w-]+\]| ?\([\s\w-]+\))(\.mkv|\.mp4|\.avi)?${'$'}""".toRegex() + + while (regex.containsMatchIn(newString)) { + newString = regex.replace(newString) { matchResult -> + matchResult.groups[2]?.value ?: "" + } + } + + return newString.trim() + } + + private fun formatFileSize(bytes: Long): String { + return when { + bytes >= 1073741824 -> "%.2f GB".format(bytes / 1073741824.0) + bytes >= 1048576 -> "%.2f MB".format(bytes / 1048576.0) + bytes >= 1024 -> "%.2f KB".format(bytes / 1024.0) + bytes > 1 -> "$bytes bytes" + bytes == 1L -> "$bytes byte" + else -> "" + } + } + + private fun LinkData.toJsonString(): String { + return json.encodeToString(this) + } + + private fun IdUrl.toJsonString(): String { + return json.encodeToString(this) + } + + private fun parsePage(response: Response, url: String): AnimesPage { + val parsed = json.decodeFromString(response.body.string().decrypt()) + val animeList = mutableListOf() + val isSearch = url.endsWith(":search") + + parsed.data.files.forEach { item -> + if (item.mimeType.endsWith("folder")) { + val anime = SAnime.create() + anime.title = item.name.trimInfo() + + if (isSearch) { + anime.setUrlWithoutDomain( + LinkData( + "search", + IdUrl( + item.id, + url.substringBeforeLast("search"), + response.request.header("Referer")!!, + "multi", + ).toJsonString(), + ).toJsonString(), + ) + } else { + anime.setUrlWithoutDomain( + LinkData( + "multi", + joinUrl(url, item.name).addSuffix("/"), + ).toJsonString(), + ) + } + animeList.add(anime) + } + if ( + item.mimeType.startsWith("video/") && + !(preferences.getBoolean("ignore_non_folder", true) && isSearch) + ) { + val anime = SAnime.create() + anime.title = item.name.trimInfo() + + if (isSearch) { + anime.setUrlWithoutDomain( + LinkData( + "search", + IdUrl( + item.id, + url.substringBeforeLast("search"), + response.request.header("Referer")!!, + "single", + ).toJsonString(), + item.size?.toLongOrNull()?.let { formatFileSize(it) }, + ).toJsonString(), + ) + } else { + anime.setUrlWithoutDomain( + LinkData( + "single", + joinUrl(url, item.name), + item.size?.toLongOrNull()?.let { formatFileSize(it) }, + ).toJsonString(), + ) + } + animeList.add(anime) + } + } + + pageToken = parsed.nextPageToken + + return AnimesPage(animeList, parsed.nextPageToken != null) + } + + override fun setupPreferenceScreen(screen: PreferenceScreen) { + val domainListPref = EditTextPreference(screen.context).apply { + key = "domain_list" + title = "Enter drive paths to be shown in extension" + summary = """Enter drive paths to be shown in extension + |Enter as comma separated list + """.trimMargin() + this.setDefaultValue("") + dialogTitle = "Path list" + dialogMessage = "Separate paths with a comma" + + setOnPreferenceChangeListener { _, newValue -> + try { + val res = preferences.edit().putString("domain_list", newValue as String).commit() + Toast.makeText(screen.context, "Restart Aniyomi to apply changes", Toast.LENGTH_LONG).show() + res + } catch (e: java.lang.Exception) { + e.printStackTrace() + false + } + } + } + val blacklistFolders = EditTextPreference(screen.context).apply { + key = "blacklist_folders" + title = "Blacklist folder names" + summary = """Enter names of folders to skip over + |Enter as slash / separated list + """.trimMargin() + this.setDefaultValue("NC/Extras") + dialogTitle = "Blacklisted folders" + dialogMessage = "Separate folders with a slash (case insensitive)" + + setOnPreferenceChangeListener { _, newValue -> + try { + val res = preferences.edit().putString("blacklist_folders", newValue as String).commit() + Toast.makeText(screen.context, "Restart Aniyomi to apply changes", Toast.LENGTH_LONG).show() + res + } catch (e: java.lang.Exception) { + e.printStackTrace() + false + } + } + } + + val ignoreNonFolder = SwitchPreferenceCompat(screen.context).apply { + key = "ignore_non_folder" + title = "Only include folders on search" + setDefaultValue(true) + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putBoolean(key, newValue as Boolean).commit() + } + } + + screen.addPreference(domainListPref) + screen.addPreference(blacklistFolders) + screen.addPreference(ignoreNonFolder) + } +}