From 0a0251c9d7f10e154c3c7681f8bdde101b698e44 Mon Sep 17 00:00:00 2001 From: beerpsi <92439990+beerpiss@users.noreply.github.com> Date: Fri, 26 Jan 2024 11:39:39 +0700 Subject: [PATCH] Add Twicomi (#641) * Add Twicomi * isNsfw = true * ja.twicomi -> all.twicomi * extract the paginated chapter list into a method * fix 4am code * just don't hardcode the page limit --- src/all/twicomi/AndroidManifest.xml | 2 + src/all/twicomi/build.gradle | 8 + .../twicomi/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6137 bytes .../twicomi/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3189 bytes .../twicomi/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9421 bytes .../twicomi/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 17879 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 28391 bytes .../extension/all/twicomi/Twicomi.kt | 235 ++++++++++++++++++ .../extension/all/twicomi/TwicomiDto.kt | 114 +++++++++ 9 files changed, 359 insertions(+) create mode 100644 src/all/twicomi/AndroidManifest.xml create mode 100644 src/all/twicomi/build.gradle create mode 100644 src/all/twicomi/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/twicomi/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/twicomi/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/twicomi/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/twicomi/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/twicomi/src/eu/kanade/tachiyomi/extension/all/twicomi/Twicomi.kt create mode 100644 src/all/twicomi/src/eu/kanade/tachiyomi/extension/all/twicomi/TwicomiDto.kt diff --git a/src/all/twicomi/AndroidManifest.xml b/src/all/twicomi/AndroidManifest.xml new file mode 100644 index 000000000..8f29ab90e --- /dev/null +++ b/src/all/twicomi/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/src/all/twicomi/build.gradle b/src/all/twicomi/build.gradle new file mode 100644 index 000000000..1a3656fd5 --- /dev/null +++ b/src/all/twicomi/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = "Twicomi" + extClass = ".Twicomi" + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/twicomi/res/mipmap-hdpi/ic_launcher.png b/src/all/twicomi/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ac5ae55efc7e05043428c13d98ec318c5088c25c GIT binary patch literal 6137 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 LNkvXXu0mjf?C$E+ literal 0 HcmV?d00001 diff --git a/src/all/twicomi/res/mipmap-mdpi/ic_launcher.png b/src/all/twicomi/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..840e27a76ec81d3b3b20e47f5d5015f0520046e9 GIT binary patch literal 3189 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 TD@gC200000NkvXXu0mjfU&1V! literal 0 HcmV?d00001 diff --git a/src/all/twicomi/res/mipmap-xxhdpi/ic_launcher.png b/src/all/twicomi/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3296fe4ec95120f7279e2c3368dcdef9d850c7 GIT binary patch literal 17879 zcmV*eKvBPmP)f zh*`n_k|f80A?^9!?$h3RyjN8{J!6+k*Zk^N(^W6rd+v9?^PO|UTdJ9R%~@au7FcQq z=gyrvXMtu8Kyx6Nkp<=eG$ZrPojeDiISkCm0&@VGk@@CMo&(Sv24-Y|IRMSbd~+wy z0cZ{bGqS)OfM#UAxs&GrG>3s1S>SI0pufdEW@Lo_rzhX>x2V^WXxt@n&A){$?n?Jq zY~Wg)jh)x>SzmW?-s7&+$cwA4HCXchJ{Jp!X4<%I&?I<#E@U3OVx`Q?}2db#D6d-NT5+_B$MOD(lY6nHK5j=y`W-}l>~ zbJ`c1?lroOpU(aI>a;k@(PgL^T=%ND-Z}9;{r1~$KW_f~`DdMd_Sx6O-?zoP2GnTq zY#lWd042*{nq~IfbI)CFyY03kZoKivN5*@NC}nx6IEJ*-O z2i(Kzvh>nRH_I-&Y_q}&D>SRDvda8;e=Gj~u3!D?SEp4VN+3-eM2iBTJO^;RmwnKK z9`u+SZn)v~mt1nm*0q~-peerOzAxV%EDy+ z_Rhb=u?++Q7)uP*PRcB)M`-SpC6qo@A%x4-?N z>MSaVrVF6dJB4|+*kX&dR$X<~w_bVWl?Q}zI#kcGAnsopDauletq~m;tk_(A_0_1m z{N_0Ka$Yus^Yj1ifAh^Zm-F1$J@Wq=^4e>!ZPr?At3y_p$#T8d9<#a9gay{oc4ycsb>%t2!Eca9o$2s52 zy#cN3HOvi0S?`E)eI<@N{Gy94x-71dOf)TFy(j=Gnn%alW}9txiwb-x8h6c6E0M>k zAcJdo4aZ>o^uPY=zc$e;n*aUZ|7{-r@P{`~d)m{Q|M{Q)X}^Nx4C zqj|_f9@6Zy&pyp-U;El-?X}l#UiGS16`*)&v}6Dcde&KIHDCVnmz(E4_qpYK_i`U) zeCIpgId$%*KmF4$)mB?IPk;K;oBj9Szm(-AFL_C`&N}NfFMHX` z3J`ztlb=IqpLr`cU)LuYR>T{P4p|oqzCyAC!9h%fI|f z0n8Cc98m!DPyh5!&7c1Cr{?t2PcL?3KOLgZ)h^r77e?bu7N(NJFK`oRx=aI?v#n>OG4`q!JQf-N)# zFdTK%QO)`1pWl4!V;?KVd%+7{P?1Sq^ho&`*8pQ%jG1;uD|P-2Lu%FW~Y1^Pm6R9CzGtg-NhNxcDlyyrcylp81k=}m8XQ@JPb1IQcR z@P;PzMgi*m?|=X1```b5^S<}JuX*W9Us?bRD8S%5fP3p(-&%lnuY29AdGnj!+#GxC zvCT7|`OE?&b^GW?KiWj+ZNd#TU;EnECKw4D#V1>h3Ly2}Xrqlj7&duP{8x{{LJ6WJ z1|W_ffL4r3oD%M2$M&7F0xRf?Y7&lIp&yS2*qaKefMqt z^FRNy`ObH~)4b+-~H})g%N!I*MI$2X;`3o;~U@D9Dn@r1$`(Y1zSYZtv zgZl)K8-tOK43J`1z<eR7H3RJLe)qeZpZ@fx z+SS>_`(;8`(ao#|Gn>huQ~9*1Isn^T)?^SeeYWu z6C+?RTI<$e1r4GHD?6>_oCiGM0nP7!|N8>s;l&Km4JIprP4gk3E_b zPB@_e2cVVNy)hOR`q7VmQ~=I3ht4PfQtrbJJFIy@lxc?@cWidwefQ$Z-uAY)75lih z;{bu{`_dP`*c>0%13WGc`(mTVJmxXYzyJHcm*eS1E*pq-k}eSSd5Q1>*9QQ%jW)co zVxf^Evgx|85_w^tc&{AvcVP;;LD3f0;WDrS7ZR>-%D~vdH8cR)*I*iv@vzgo-u15H z=YfQK0fxQz-n)7Bv!7kSrDwZFl%+Hvh6rF64Ryc!-LEj-^P?97k59jEz4g|`;29ky z`=|o}`-@-vqLfitpYxpO6mSx{7hG^bVZ?LKJ-4_cY=>>QN{m6DJ^9H`ZXWv3hn9QM zUdn_iytu0`1|Tqt`hMjrUny?vzyJHco5w!(u~Pz>2tV<}6APod4!4MTl*2W-a~8)>LxQ2kESbk%;8OAO3Lj>Q}$IG#n!` zJn(Qg-~RTur`#fAGc@L5NP0`e=K6rig%HA+fm=|nd@-^{yfi?(W;7_!C@)RqJoN!A zy<44hjQ76xz0IMA9$MG{L(p12l?yXy+yp7{OydA05D?AYSS0gNA}Zy>pgPnB8*ES* zNLjf>;Nr?i0xX6Fv9eA9zyO3@fBfSgN44$W8Umm#S^yeZNKXeqnLNZmD`B9h z)Vw|bX+SU9MWb*-df=gl9ukq)Lz>qIK2iKglo_s z8UdhaDBry^LiMLa)J03gI8VvL=-~iBS1@|f9l<*Hyyra&m_%tBt_`5e0z8*rep$2a zcH5Wp9S1c`g1*r?V_^$SkuPp3qZhrC z8{BQT-Ab6;c40tsLp1ni0WQ}8Xn@O%bY`NjiQfp?<)e=3_lZw@qFm4aF$I?zgUb^g zC*CWBJqT>yvBRf6^{K)n$v#&Et6dc-fv#@N1kN^0O#ilig z{Eabv$LQ{_S3BN!wcw^XQb&E}GoLB0hG5pHGz^WDFD^#I>ImGNx&eXjyfh};5Y_?- z*TH01NKOdjvJrQwp1|dAYy~`$sX7L>1$s6o#4(v`vq_tU#tuN4U1k)gGm7$!@W2fmB!OC zQu`49>M!*mjMtF>7~7nA=9#7blCC-op!vjdqCUFO+kJ%gz(ZqklX79~Bo`*A=$ai7 z-)$Aeye{6e=fV=rz$0AcoA;0CXT_i?h#Aj$0H(JxkOr3X zPKqe>f;*z&s6~-h67-!2jvF>?8cQ7 z%or83%BM-P0uL|)zIxI|?BZN@%ORYajb;@Q5sgmXgoa|m~M?8EzDmh{;o9(7NQ$mPp?;|^`L1J?^$vGgQLFf=uSBeZ)_Q0l_J0-*%5RW?2AP(o?~>R4}_NbSpc0|#za^} zIIjb;9cE`2oocH%=QmN-U;gr!#olZIG~7EO?{6JAr^?i9J8KNo1t5cgq603dW# zN&cGgzY$Re-Gbtu7I_OH=li1Ek_*GWzYh=_jFzU*nXo&6DHj$e_yJ8h z(v4+3#s)x1D#~vNL@?pnu1O#2G&1KBu$W#)mRYB#bZBMJO==cM-*0GytC2#`qeV(}gXVF4!n!j0)GS4vM5A+4%A`Db@0>^m z)au;^V~)Q80jATqTora<7mUPin3DVFo{WdFm3t|#&IO#?1ie$74O zIvO0PyZ}e!#?7H*_nSW%n%083%@i8(!arXSth8#gdYmg;jR~X*x-!u+$6JPr>t{0QgI=*zEy^-vryFJrbB$ zn0_&>1hDpt(0tEe;Edv24>NP`?8U`7`w6Mj5XPhFBqvT{&EvYiOJVX3bRBMmYduy``4sm7r^PDGa|LHV%U(YQm@R}5XM+p9*8smGy*)?7faD!#J6!k zb`i*MW%6;x-hfgB$`iO(J!fdvG*I;5d1(yBM$b8TXb3~Jqw$2A@)hzF((ZbGx`-UW z#6Bu+^jdGqOs*)x@hO;dqB{fUcY_+b3s4LQumIF0j=Rno^qs~~uC83sDA(eKn~6|Iy}QnDDggo0@Sl@&#xZ^<#Ps|M>R4byiF!!sn|J4is! zl@d!k2E_+*oNL0gkjD?yp7gvG3GV0Pe z16jxPg(1h(B61jm)uMP1Flu)`3_y8JpEM94CwQD|IK;3E?TB4+?si@`&+|PNGS5nM zD(b@GB0@tMe)F9n4QT=2i9YK{Y%Bnj8VGx!P44Tqh$ya(o_=CbEZ@$53pI&3zz{|7 z(brvjO^DCcr>2%BKmZ97Nk|&?-a8_)^*7ugdeYj(j$I931Z~j%^2;yRth?TXPH4Zf z@h%UL(?z>*mZ4!x-F0Tt5t_kp$1(R$aLN^N63vwg**I$2KFvmvCGNI*a;3>bT zOC+|-&O0|d$9wBw@OFLE^$Y#YJ6bKY;tOMrlZ2)$KPKW11u&S6M-cW4L;!XyqOf#f z3Zo}*HK6J#9M-WO)aTk?v>+bW*K1e%{SY$ zx$>&3OUJ}IhLA9qt`+au8B7hIIxj1hQx)hIQ3N{u+~+=53}nPu z_^IHst$LZ>0az;NSQ%Q`EO9)c5DE|uo#H`p?4(w=o?`p)T;zw5zz!Ax)(JNcXSWN0w^x7J#}KD4euxoV-%gC z0I!b;xMRO)nXak$(ab_clf-l-Eh=PbmbQm+k2u6ZVWfrie};j|Br|2+xJ(QetB?8cczq zUgh~?I!T2!9z&p3%z}DV3K081#P!K3q4_oo)PB7N0U(PI4U+&i_95~y8P}A(u}|C7 zEQ=ku1lMbW#I?*zHpL`!G;JpAx`*pHSGvRCa~BKyU72&-jLobQ6NTw?IoV%MjlBgf zzEd|$gnf+J`CU7(!B_zZ5C}LE$haqk%$|sOxHy$LGeXm)W4+kD?!EJ!CVtgZ4P>lk zmxZ4BQelRa7a5%0lfsgLh*s$eKzE;ICKnb=lux7G8A8iO1gpaw6AVGS)PulzbZ(bp zGRYq!Lc3^k91kPvyj&ka&81;5wmv1Y*Alr01Ph7gxV@ZQk?*(%#n@;y79&vnk}}Pm=)lyJQyeeRCXA# zYe@Wd^W=sIU1iMudrbM|a_S+9`grA*EBnRIf7a~zfW1oRVq3uR(mAjfi6CU>rsadU zZ_$^|En_`)F037ep?SiN#>pKla_Z=)xsnXE+u%wDN&wX<`92rKr5be?q0}y{3qUnk z+t;fBEm_m__3txi%PeaTI%hA~%LeYIf9Wv6y2Q9qgtm~#CZ`}>aT z68+LmT$pjd%(Yczn;ixUaLmg>6gLro5ry%;1e^-%P4&=4FHMZ_L+!#w0Z@Xq4?w0$ zqzh{UwW~Ob3ZOpMn%^gYEDf@RsSiM@TT=Vw-beoClGr?_=;qEMB3#0p-XpH%f(Ytb z_syD!t^t&pRI5ad*|+$7;$ zXQIafK$r$?3gdx+QFaax$?r&ntunbfb)lX;IplC@^oSC4Y7lr_&&yO08mJ3E?nh5OAr}6f{*yDNc2VmB(9$$hT<_M& z^7R2oVv;^H^`*}}XSUvq#0w*&|80EUEi(KTJ8BOdM5ymA8k3uAkA;l|fCy$e9i!() zjv4b$fBZwq?`*!smSt6eLDgIbl_TlG62g$s>zk61jc~#F=S3cAmF5kx?57t%aXmuV zXxOc{O>FQv2tYSP^6t8L*No6^ERmkzX&8Wr*2nGhnC2H}{<_Se?%O?VnNaBfbjxJ< z`T%68MftX9O;XFUN)}?AbIv)txjt64?i>MvG>H&DH(1DB(b(6(s+pg%-DBs%078-w zP$aler)iftQ_cuI8Wm!S$l4nlj39vutE7nTa$$Y$VpI(@%pIl%>T_Xr6sF-u-F|LV z4U{%w17cZTC}%-ruu>nB(tyj7%#~*{vy)b;gO6EfpgIaO*BMZRmXe3SL>JLSK*MD) z06o#3vpft$g8(#0YXFdBnN9>VqDRpx;{qU26dSW&dk#{j6SzK6moZ2-=ON5D z5`5(J+sbXvP81eCc3u`j6oy%>xuO$P(sCP>Fc*m56=CcY1E(7Y3+05cKJnZY?)L#` zP~$5fX3Q|Y3qUy`zfWi6_lpBSU1h~UfS_>)MPXCro79f}t~DdK1UTGUF1zN^BzTPj zT90pC+1R+SHh^;7w`r9%FerYZqj9X?|NeKeal*FE_93oSPQ}{$6qYF&p^MgxTuXZr zRqew3pCC2Nd0Xs+)&~IB*f6Gn9CzIDWt2M;i5RGzNF+?kc}G_Z)lr3NCoONC6TOpzi#gSSF-oXCxf!?~0Yqt(uG~<%FoUUs@<8pL zUW@43g>?a_2J0XIWge)#B&ZFbLD$RQa(U4xE-dZVw_>EepJVG4BDR0ARZe?4N1QVr z8b~JElmWX-2;a@=HSL0cmJc!tj}7Rb90waUiO4Xc0I17NOcy|XuBJ{T<``XjD5DEN z!vuOglrfS9>UD74Ke#_To7pLcmQz}*a?KuqvJg2MFI1#~((mT@O^$f$ZRxV=-Z5-m z@+bfrC5#`&K!X~46aX0ut2NLtf$#Sv37}*w3{L|YjnAQsSqD%IRm@Aw=cbd^Y?~P6 z?>|S_Xj&=ONo|viQ@g5*L(~z|5_N+nVqF;5TPd#fx-ddJkytm>a<&%^UDTC{ZbxCG zBoa#|IvRTQ&|{g2?qZ;;W0IU5Nq+XriA}}pIX5*o7@b$ooI%hBAY$2w|7M#nJf*eG zGlpU=i7fqQn{8gE^5%;?DD$)6m6u%9JaV6Xo4fC@ zV;PkPstj3c_A&QI?*_KMsiG=-R^*m|@qO3$001BWNklAbSx9_?;g3dK`*25=g&L0**4~4XQtorSO;)2S7eU@6Yxc0tqm4t$A#4l zltUSI7t_lpR%FgEXcul0$QsfBE4GoL_8!G`)xuD?Dv~gbb2{e&C=ppt=a4NQw6l8~ znC@qmrCe9I}2)}hrC>zw%@;c^O=On68^rZU%c%~Oz2f%@_y-KsbUYC9`-UoPH zLosz2-v^+sYmTCUYPQXe!%eCOkcg}#ZRs0HTlp;jN~xg!m`73!)%wXrm+U|7&klb9?D;wg9SSxl%DCTvm-N?GGXZH&NygV19=jEEpN4VNeV^FTe zR0|EZezgfh7l3FTB7D%C?PMUX(Guo%BGG-gB%gGRds`ca^_5Xa^~r9S$8i^3_~$a5 zvBnzl+_TB&uSsxP(c+kvd!2m%<(z1nNXY|b*sf9x0#Iv3&rrE-;&-6xVe(iiPre%W7Q=Z%Re6n)oo{*?h-ZVJ%yT3rAF zo~0wReM`q2>%=kJ>0HMidrVBKf6|=*l%2(=dtMyVF}8^L;!96%W1N|OF3s=$zBX3- zUVY_N-7!^H3B<`|AdZ&@vh&$k0;pcrLj&b&Tr|%xkPXvN z?en{?m+QjX02&0Ib|TT@zyoz;4xtt|*w3}y$9KKG#^h)1r{E@Oj)@HJNpUzeMBXl0J4L}f&jtV>r6};>3c0$ zaC1pG+M9bp=pfM%(mfUQzOz}APoDwap)!MUg%3zZt_vgj{?dof+9vSPw0{r|Kz*QcRN?&H%wf_=3 zY20xA4FmT>R6Y@$xj&nl8qott05|mTs8~YtyFdIfhB77q)b%QJj^c-|p^Tb=1PD5z zpkvT}M~=DRg7ae=m~E%*n#`BUMNDK}yi9aG8b4XS*K!AaDY^-49T`rmjJm&xPZlyWJW7rgh3_XYK%u$Yu1}(=8V4!JTFDyOmz8Wb< zMB5o7HBh@6!!pq`)j(Zl%M5-_C>xt7tY#p+h(@q+xCA0VVHyG&^Y}D=lwcYbD(iW} z7>Th)4fm%Lg^hA-`@a6hIu`R;mrj4QU09!>&H-j&_9y@vW}B(|2;nCg*moI)jU|9G z3Nz3tj2C@nrZjUuTmZ4>H`(Yu5IO$*^X3(;)0c_Po+hE^$O){AWrbG(<12gTGc z_T-jxa{a_U)_;8tNIn{C>;MGaIValoycj4c9Q$A+ddU0A5Sk{-(@32SKDnawH?b+e zCLvmLi{CC+z+iul6$lm)$_V!vKIdY)zu}R-mwI@N<+TA0QzHf~DfVbgKr=VlFoVYN zc!At$Ht#W=-8pO|{^Ve=t~t@_0GQU-ogb@RJThF=s*IV4WY03`K4w6eiv=h-)S?aK zrwo_SK&?UK+0j73BvVnCN?;4~psfQl|3+BvJK)N})pQRvc)FOVY#b0h%w9r+UZV=( zvVx-wD-6G$G7ef9p*&?~fvxwVoVMaM!OisDz8%koWum#UVJ=J^T;C?=H$+~CFeZ?_ zeXmnmT4lySZnEHezXP5S9!m=2#|}W5iDpdO%oh4COJpWy-{p8sW=iX+9(CsR??pQ& zBiO9K1T&4)wZ3dRiNs+5Vw+l5`9H>yBsAy8)-Ac2Da~mG%DuuHn2Qcrw3!|6+uQuc zWoMs(QUjTDn_Kng!$opBLT)FQ?#=hPyDKVY>|}|)v7QM{*qk#f~)Z8O)i*ic@nZ|-#V zP`h|6x7?k#`E6hCs(1*>{2ODNy2Dcz>+acye+jM~-1{yQy?8L4jWvP#4(V?00Au8$a zYQ0hb84b5u2w@rPeAPWEd!#4x*qD6%Xz(tENu~o_^q>1M_pzP~GoWv@@kY@Q7nVm@ z*$JKo!KPV;GS``qjbjJBGBT5ic2AwkHppC|pPVXomTLA+b)eA6zSLWS>{#{~8 zdA)!kfrKHQZ+8wId~7C^5z%!%M8zy`CZg?1e~(xP&oyZz5rHX}p5P1Dk3#qT$iAAU)RA73AhA6SB|FLpm|OLY>-yTb2XN&f$hnhd7tUHt+qP^6s&6l z3UkRVbnMDOWyb&lHuSfSmkSkun|*Dbpo7{0C4cj``)C8ZiU82qWTFG@^U{Dhsoq$a zS%{_#cw&sg0#R;oz(_VasE0Bb1f}LOWB&t0f>GZi=m7fK#Z!eSO;?ek!N8rj9u6DwA?c>x4vT#ECOi6T{2kG^q^4MJ-A5| z+}*dm*Yl{r83dlTW^&KmZg)|^gZXkPv&|hm{KVK{y^p{^{}(@IB*vu?#ugZOEGVtx zh27cT%fPAq5^cF`MTXVF>M#}}x&}~gac4_?LNNC))C@Xrbqr(BSQ@3?s<#U~W!t;>Cu^OruH(w~b8&1vXSnycxX^8rGX?q@ zy=yx=b>hA~V?Lj8Umjo=dTOl!8TIUNrmIXm2V^3rrF=T4PH4Yq8=Ye(>?WYG%nIX+ z@+3RQ(uHLdX1V}C*j^T`nq&q{z9R}x_|`X@v(GuVOmGJnOKp7C^bH(m{P;)BR$FgV zh6=jGZ35_F02B>QpA2H1cGHNdE@ZIt7N9aD>W;Nha#=IEo3E-t1XDw&$PF<@_?WE(c^(n~e7x*kTm zBJ>j1WtOCcgSHVti8X)}9t!~j zx8nKcl42sRjIxZ<0}{cVk9hLC^x}`r8jc{(@OKb^2v<@$^Cx}GR9GN>%uN^; z$8ltBW|)(e1r|0R%^3(>i$T~yiz}7IbPW2XYYGZChG7IEtA=abJR)7!*O7Ba4mmkV zN_Jp7TklwzN??yg7+(WO!^$<74?`G>vW|}(H0&X`W9(KY%2GKIfF6N)gs;x|RXjYz z!oUqT+PHHHMFQdHk%MvErjbYTohYn}ftFt`1am}NcE}j?TCO};CAO*?k~wyq*C4^H zJj<7<70Wd97u-@hlYAHE@tm?um;&u3F=a${d%NghhFtny=f>dZmBAdl#SG6j6D7-G z658^+-~CSWu!lW-Y9%nh$oBi4)+8@X=NPMng>3+#Y8x!^x!6QvOBm^Ixd`Av>BO}h zkz*KCFUvvHLDMZvY$up8SQi6L=?LsI5IWV5!tepd{#BbyJ-F~rN7wpAeX{OY*kd2s zbDA>KzFYv^s92Yqauf5Mv13`^-Z9{t_jNtC&9sPg3AVRFIERhw7$*tpIcsARg(ZMg z1iNrYgraGk5{mu?9NU%%<1Klyhav-`;CxE4^K&1Y+Mjp1vD6K101euzw+kQB)iQk; zYhOqC4JCN&71uRvO`Oh?$;DALQJ+negIl6?M7&mDNS|1zrX$lmCX;#AS$m)8xaRDP z#s>iAWrcu&;S^HDWthPPCXtv2#EHNd2>SIFK*|gGjyyycYpO4o@1VL;|c5q zG2LRVSoGJ&glr{?3`Cf^9pcwHv0FV#JvyNo2}CsJ2HbjwTXhtqNIG&|p42FiNzvVY z)WKLVQ2Ku0fOd?7Q3yE`n?zq$tX^Z+ta$%2GSz;kkr+UQGb$XnZ~1EQDOX zq#new6}8(&N~7=PxIcxR*yO>nza+t1zjE3LEhYFkFF;|VcDr)`g%NrTZfj+-0e~zv zup`OccigF*V^c0mu1-7cw1pn~J$awmXCOvnMBB)U!i)raypXvkj4HXv5F!D+VxN8X zDMBx&V~WP=%(PxtR&W}_njCM^Q~lquUT2FRQi-;8~XWlHIb0Pfa`fa3{Y+W+W;Rb0<9ZH9ktYs5S zqaAnvHZ!3N$j4@7YHA=xC5!>U?hguR3Rz-YmXbJRFMB_paKZ^CM@CAh z4<_3H9X9U%;`qIkZY4+b7R>>=Ur(X?Kt z!O%8VLA@%SLK#b;b$OsNqFo8=t_0h)p$p1}=62`kc{$I$iPD^7?K|ZI)Ox05u5%x> z$dN0XAJ?-($HY{NiIpf_FLkt|#;U7M>{44Fmz@Gz*i}{pWz^m@4ffChv82=pKmnPj zLH;aUm~(xH&5c2FS30z0rnyIkGP<6X5oMem4O9b2!=imtGga{OpZ|RE({e(_$ABRB zcIMXjX_1E>wUml)zg_g6TT7aqo5D^O>j9ETi#W9H-J0=tt_IaO$yS+w^!L1Yf?r81 z^z3tZTRe%!M0Bf5&BNI`jII$i5Z$IxQp@=6(x89azdG)saUhmKuW<_jD~jQLik!VEQB-? zjg3SasFYtPxSb>Nkf*>*3}D&;BdRpeFm@f?WS&Fno)$<^U1zr2x+ELVxw*8L%gp04 z3bF|kkS}z8S)SFsF=y?fYE7o$4Q|pUeOkx&SVD)Zg9G2wEWRhCbu?37<=FPyZ@;2} z09~?DBx`w*^?2;(7#+@_DbXz(PDhaxa#UE1>sH_DH9G(bs+^aF$X!~ojEWF(#$EIP zy~hMI4eonB8ko{$0GeSAz0k@5pT?0e69emsjKZ)Q3CKhixr`SeG*%v?OeGC4xr?d4 zQ!8;TA{i`LrwvkXX?W%D17Hor`j|F5O7>w?nq|1H=hXu|r-T8BKf?p*QW#ji1Bg7-mx0Yjw2N2f zgIrrLOMo~Bqvh&X4P&ZF`)P<@h(@|S+=}tMK~pVUkA~t3R#|02sORqQGQ!D3db-a`SysqYHaM2TjF>~F4v+@E>XTsSuOH`i~h z>xd(cD95o6DWPM~KCWHX^)H-}pM3^moZLWx00s&!2s@xtwELd$%`2|3d^GO-=BUZX zg9D37IabdgoL$G?^pA#C*=&5Sj++slYGhMJcH3>&SX6i4attQ0K1xFZP-=~zhMQbx z{g~7r4UXD@FSp!FJ@t+NbXd39bC2Dd`|Q3)|C0lw(QV&nE0|q{(!q?Gw4-OTapZ75 z6N8!$+H0?7_W(!UM@~l6$>pXVIr-%8H9w3FcK8u5C``-6drUe8w=pJG#v)(-@|PQn zH!+Xdg+K!=ve1@PVPU%Ry8%2M;Y~3^)IIzryjRYS$2*J%fYObrkl_qWfmRvLJRyyS zc8NT+tfJf+fz4<>^*lym5JDWNunmK25Sq$L4579tM6P4IU?0(p`{;do9pKdhw(Ry1 z0He43UuaBYaD!glMh^N)FZ9hhPIkE?hDCJZWIarRbv;~9L@IBk(KS9+rq%MLQ}@~kw@0VkZP#6!m%QX9g~2=z9@87hH41N& z3w9LN)1&Ha4IQR$FM*13jSqnI06jz$B7D>%v58MiWUGCV)^ncooZ_QVulx{^D06DH zg2orRdP%C~1a!T~G!fB=ZR8kR$ekip&jMO*BOkrl)-1|kGjF;icNB39Fj=y!0W?~d z21@bneks`NQE|Eq;B79U{@jr|N}{@Mx-HSX|xxuJd4S30nF`hjU*tfGY&_mitoG@c@vLWMNfE&y#)j;)nV0 zLk>Bl7?VB#8baAbe1okRAph2jEg{AZL)~zyx@D81||2HQa^Y?|=W@%RbTRN|FtTb`5Qq1uI|* ze#k;c4Ju2^jnW;C1Fj;N?ROZT7!OE=#6X5^)D@_Jl$(8T%!hhZB=KAW%W&1)i3S7; z!w$5Y$8sMZE?AOP^hGRV2`&)3aP=<_P}r)NP}Y&k9@LQ%0dj-UT%FF~c&=Eg#I@7| zbGsH`C0hZ0D}2x9n;iz~0#NqEed9@mciU>q=F^}3Tr|S%(Sr_)o^xQy@feTc0!(fq z6m3{wnBpyADB-mVtEh&yzm14PdSJWo?Vpq3ju6*(8bYsPc&^L!Fu=KI{V9eqR%^Bi zdZ(Kh4jW)5lnz*W{T7>V)?6OUv+I5DS0Y3@Lt{B!`I13AIq150c*#9?-lc#=<8US1 z3OAL)-KyJ9d^8?v7gH!SHqnY0v zt(51WMo+{#D$h_TH4S7qg9hSG7y%;?e%L^g42b-$=le81gnj5F^lmx_0MZV^TVfGw z-FBOqdK1f&CE>UR(;YOBMwLVH+H=o6B5aS4Is~}yxlFEBgJZ{ZQ_3N-!!S9C9dmF~ zxu+3*u~XFN(g3770>ArUKgSZgl77Bd768@In3$+lb|A(?K*c6L*$s1JB**%W-PnQq z;&zR^vx#H4MViySbOu2RcI?PfZzrZYjcw}gay`wRn^{i)=@39?mE-P#5rfjVHX4o%W2S%clYZ5UL%93&#k08(F zBysJUMyxd+x2mjMkB*=ru#MgfDouP+b5^T$cT(IkK_rx=n5mg#2buITLyy-td2>Wnxxwm3lZd8Ad z7XvAn!gCdjszC`&t^p|M7m)>8m0rhCA~yb7&(h#P1W^1vV`>D35P8r@3@Oi{XNk`A zav?5_;&+XQ)g&Sf6Uc1S2s8r}^v=&*P_o>VoRs+>c%hObqv&h)`Y|J&0z}ivfhdrfKvdpL!}^ zu4ij(qFW@P=V2;;(?4=R+zv)ze9;Kj5$ymhy+bEpAw8RWVob?OsRlh=8AV2Vu?FQT zzy7taHhVqrL1kRe;H9Y~m=Zv+gvQsnT-FhDmHHCufH4`DHQ%GBgp0KXtxK#Bc z;<+4k0tgXhW{=ewFu5geSVsY34C95}02!z-pt`6paME7vELkZ)u$$`;@XTHm7B1mV zQCOQMxebgUx5I!M@1$T4BgZJ1w$R%c1icGq8C7=r!=agM4ggf5G3+FY`CQC15-J0y z2GhWDAI{a|BndT+M)f`LeE-x_!i~PKIWroLJ7V-q7Ak|xIR<;;6ZUW3ckH{H!-E;Q zEa2o0q#ZPbHlQi}8S8T0|uGsYoP#=p!GFNN~F;mrM6}8OR3CZ-*;0*U1Xl5!T4f zjtd(FKq;yjg{C0#b_@Y**ua<-BWiTLNsq@E+z_$I)n!fvW$T3u#Z6!$jYP20S3*`m zXlrnFn>_n}Ii0gE` za=9MxC8J^~=eWP)v8hK?J}uk}H-lBM46zP;203*y>>+B?f#kW=hbuP_Ei~u00q#X% zGxnpeWaVi@#{*wJUp2?(MqnRJv}L@nkN5m|+u$*tR?~DpYN*8!gZIn*>%n=PHNMv3 zt`zT813L%OCn2H+YAZNHhC zVr&k}VOSu;JX|w9LHK@l000GsNkl~m+zXQ~B;q_x<>u>y+Bfr+p% zsq=L*$L2sOTVW}YUgnaF)&phkFF8Oo*FRbRz0HyakQ)L~0%%153SINnDC|8)END55 zOXIGHO1T(1hJF!}8slM1EW=e{C%unr6Rj{PBLOJ|*7~Ay21o7m5W%X)YfyQsX+hE|MGbx9@>Ir);RV z&|LmVw8|dp%H4}}0Wh=69n&<1_U#~nFNWKDK^%BPyty!pwAfu(8$c_>7psIpc8|h; zGXC%HQPloI6=DEFSU8-!*Yoj)3NTPkZRHBE1F9B2V+3x4KH`EjYR;V&(P?nTmNmB2 z8jwu?NP&ta^ltYg?p<3$XlR3~vlZvQUW_9DPO!^XbV?wC|0Reje8Bwkd7#lkQ7#$~25T@t;KSL6P!vM4(0*Plv zJ--(R(m+;crUn{8dk=eNz{0oZ!Ytghr3ApN9PbUI07u8?BZif<@AsSwtg!$Fn7rhC za_e9e4GbDfFBh_EXru1Aak)>w`94>5DYMpKSyau4coaRhvyX3obaCe z0_LPKK=2#G)|(8JiR}S`oTrmhP4hh0)<{YFIUU2_Ik!5`Pax;_xqo$ik31$*0y*!f zE|;>Tux*zsf6IGjd0e-?<|2Y*&}mo3^^c7Eo*W0!Kit=XcynLgBfUnA!d%R;$wH}v zu+S=DtVc%0UmpJ-c{%5Z;pIq`Sk!AR>Ukp-YJ3mEELX+*n0S*Pm?zl>fUwUj zI#sRRm~ft$2BMV%&AY_sq0uON1enUUTT7~eW^&z`oI4#ujp?!6(;4ypaJ+vo37i|_ zQ}hKq({f*n3ZM+Xlj8l0c>g8dfWvJ8Pih~ot86bhYJsQY!fL<~)81TJG7&ZcCV%@LaPqk6-e=VE z&mGrqfdqli)HN6eSiBQBHF!oA&w1NLY1ljmIDiBbC6Iu}+jrgxpc;I0jlSe9P%}ts z8Xyv)dvjOb`L|A;pnTV3UU|&4 zz%$cEO%NqW(q+}It8Dl+**=THcK<({_HR?G+Jz+xCDYWO^>NcK*-RU?21f!ZL6c$s zOz$!6O3j_HkOfi{=VyYc7R%FSp1i~2YTP!ElHC^9_2)1#GYixpa-|uuPF zzpD5BeV98_Q&YEQ`rba%efo5`nu;tACM6~S0Kk!#`=If1?)cw<0e%@Z7Qdkb01$xu z2Z@g!28T=NDYl>D`B&cweMcqXq>~^}gLS}jk-5fy*r4>=-`5309bK^7BS3`{>J;ZG z($YX_E~Js<4^9kY7?1?*1CvEu`|`B@p>g%tT=V@^>tfg8xya7m-<^LIpG$w0xBdEL zbEwOURgU(Gt&6ashkNllq>Mujsly3JW6~~UsxSf!U7T>Z_;mtEU5rwbIs$=gf4kbp zZ_z;7;{j%0P_V!iN_fwbJ7m~K66i@*uh_^txJ4hZG7VoQc>Vt~fnpGl4aZiyFmaW6 z|KU<#!q?tmfvMC-@y<^%D2i;JQ{WXF0Z4}sbFNKx<=L5N_K!{iG(cU!z`tD^=c^+n z%=hp??^&NSSpMVOt(9}K#*X{tN{<~zWEWsQ;`mwJeqE0<_*VUwe1k&v`n~Uz?(_B% z6`Kl3uE5al%Rusi&-uu#fqmtNJs zqDG!SNH<<7yV^|@b0K+VSInK40A1!=iCT7_zgQKRNAt~C&gfXYE~0gqkS6mzsc(Ng zO#K_$0k95A5nxEM2NkPlpK-Kz;l3Av3SZwkkBPdEV6iu>f-wzktg;C&Uez97w;ik? z+BpVW$+i|9xpnns52@a?uUysD+s^2_FPS%PB`s{^C#VSXwgvu(?7`UX0yM?>dk#J$ z(M5O7vS- zSDqhNit;#SKZmOIy{d+Y2#C3e;Xqha)t~N{j{Wf3)+64EVcjO@pP^gxF7AszoyJmm zq?3Hs&S~(rJr!7wWo{obc|7(mw<&L}^KldPpWx%jKEE3sde)pfdtl#kZmB{EH>e0-n9eYO6P;|Sj@!fi_^X6)&<>`3v+aL7DEuj%MmZ-s*;Z^@wxM?Fup z3&SJOQy@^94^H_gpHA?*VnT*$i8*j7;XbY%FK5!g<}201L-yq28m>Du;yk(ip#U1R zvc4?c87RxY7BF~hQ`Tr+z5lC(KUvR7-uZSbIeEj*_dr+RZCQiy?elshhn=10kgjBg z(~()S{%6F~=lZ5k>Z9$?kH=g7edVb%V z9N*({+R+wupS0fRwsWV9W4)p4J9s(|&9(S(%ei@!fjITXmrEPyA9o4&*+we+mQ!iR zp~|k((hw zz)Qh42usEObqvKb6Mzw;7AfT+@ykd8Jk{-<-zQ0^u?NBE9%Q&$pKkiZNkN>uG0q$^ zYuYlqGx&dZ?2elNg|4kR| zVCDQ~Tg;dZ3JQlj`i{2^Q5O@L?9*-I*rgLpZDg~GCYWlZe;-{dH^0g=*$Kr4sP z@U)am=8i$SZQWde`19?UA@Rui89D4dv-UbTu2)ktn?!22zIDXb&RGL;R@z%zjK^es zQPcqLNaw_cA48^}@BN?4p)1c1W6!*FNb{mhH|yowQFl@%kCpr7*@snhacIPCdAr~FfT~{=bYr&t>2f=W_QB|UP^+!Vb61M?3;0em`|jg; z^U7n{ZN2|}ed;~6Q$O9v%R{S9su9;2J0eBlZT#7f|15?sq1nk}sav`E^YTJ|SJl~k z=+q9d^Q-#yR*#=Scw!Bn3k%CL4?F%(7Uw5n;w`t+<$lxuTCbN!EX2-JCqK`6AA7GX zh};gS+8w!;dy~{W&-y>kGFMrTlo&qlpEY0QzKSs+9`k=XPhWZ178rT4-rts!5DvB~ zucZS6t+o~GlG2EE|Cg1wY&%OV=e<8_wm<(aE0Qa8)Uctj;;HVReLHMHdQ0OnE-}K@ zNB#Gq&;LQT@k(eXL(|WBQUAy(dHa>BhotlV&mz)Wp)9(>uW#gPU6J;SvX7%3CK>gQ z=h@E>3swx4=)Hf ze|=&zBKzvG)`2_x-v26P)rD!+qIgCv+b#+?_?i#vbQvJ||9KxZTAZ(wwKvSYKv|ke ztY{tiXw3T~L6ZvNCC`h>0ULiwTz<1$qT-Xac{|+vui#~d%i1w zwys~UreU%JnH?30kt(A~ z0||dMYXn->a7LtP&f>OhbNW~ApRUt&(eEU66>@u49rqXafdIjJRZ46R=xIE4cPL@G7iGwhgxFM(H$Q(9~+Ecv8Z|~aB+Tr?3Wd* z(n}Ut^QF0}2uoz=32YBJ`%N2>C}At{f(OO^`F!pFEP#C=_7zdYcYoOK z?>wH|u1AcJ&D+F|4!nKfcs}Fk(Y1ZC^9WhnNyxS|hnMZya zt$v1Bwql>>`;~U+=GU;-pJR#^??BTO_~qAkv+Zr3Gu2t2;5*+LVk{-+(so3TJ-7U? z{r;KI>c-@qh!6;0Toj47l7|W8d31ni#znTdVp-ZtNiGz`+1uA6wkN;)8gmZaI`hGi zzgKV_mWbY$v;b7&baI&N08F#uj|MDHWz@i-vA~_>$`U34Y;%TH%uWNxk=l`Ix|X{T zcKk*5=6@P`{2u~RO3=htM0Y#D?#syA8TVLdajXLDzCKvpgCh7i%#qyGQsFBLrxp%h z4#ya9j$V$#1@uQ9HAub_oA>EHJ0NN(grJF;DG+|_|9p@22w!YLE$`rDsWllDyN?}7 zUQgrj*c(clF4{nkuvqQE4x{n1tUe!oPnI7%%;C|Ar9hQtQ*QM{80xG*4rI6zKJ6w- zPr+vG?UlQXoM3WwrZ#a?E-qD$%Fyz8K_-0^yV>ttEOKLSdG@n29V8|0n!!K(U*L{) z=d?_WM@eS5IQxEahqPQGwB_HN|BbKn!sQGHA}rZ^Uo-nlOSIn}`mc*;R!wc#3IO=|}sA6)oG+W+$v?pslIlyNEwm{wns zu8NGsufK@kNvy#Z)Z%+|$~5AfxIo@)bsY9|*r{QEP+$A)h&{VYha>j-i{sij&OYUm z#`-^O4Dr1fQPm1b#n2V*i8U3jp}}eU6(R!q7~EkQ7qETDk_~h%#kj+Yus|vV_>>tU zVkI?<5fQ+fVK}bX=BoLEZQZ-?{*urlH!kvLO?r%ILmuM6BHyFRgRAqStQqsZEZf2rHv2&wzTzo<_Nae%Ue(-f#t|&Z09Q z#@t-I09XM^KFDnT8xD=C-u)uPojf`%Ngec7_iR^Iys5!OGLQJC#Ac(T7^I@KijRRp z$Y1k6(A63x64B7Myj;WcZ#dDT{(_Y4%p!0EGRd+)x#qjnkl7v`zATwGnl6^I1Sh(o zjQGTi&oA!6ei1IP-a3g~03!_%k;W498?oYT9=Tn3;w_CYQJn#?L3WMqz22-)pq2~f zd;-aQ-a8R8;?Ne9Z*pasP&!aya9P5kWMfT2LdmO!S!%zn;W3x!9n6Zt&m&cfpzvzHlIU!h2;Zm~zlQcesvc zz%3{I$6eGl>vF)Pe?RGk^n<4!xS4o4{cT}NuynwyIBq0Ipzu**)y5K{4=y`j>p3@M z@EMV=)iKh3S!$mc5Yf?sq+HNE8O{5@-aj zK4TkAbHb}b>DxCTsMj>ry=F!^)CEB^aTsZ8GAshSR&ZZcotz|U5k?+B49P_k?(DIM z+=s>`biP#za$Gz~E^<7y3$jTnBVtA2A2vIVsDqXyl%1=3c;e;`h$J$6GET;FFMdJv zWS|-fFL30q-QyG~7p_7#gc@|pf^H&RFwXG|La{8@M<_g-Mp5UDXtb#%8*j6@dNK5l zM(#&`i#Gc263Rc`FO=l3NZV}Kp}#yF$5=bDhn zl7ZtoigTRAM8xTbQxdphtp<1kz&47X%yB*i9Ac|^!9P*J9Ars+f(*iwh$9K`iA@(;m6%Gn8!#@@SWLQm(W+ zd5+k0Zz|N#oox7o^8bS@4Fzov0n9}@)Ik07WI%H1!VK^f5=mO_v(+v`?O;U#{ljOe z#xX;TpcXJSM)eEZMo8D8M@aHw0xu^Zc8jo~W2sN6S;e1N5&fR`VUf?y9@rOP?sFOO zyNOr@1=VyY2$LDG^GE-=f^(8Kl*{RS7k>+%n0wRhF5&Fp*wZogTuMg(*JQ#XO9}oq zoe_2|?j_6o6F)gjFT+`feEuhwd%$@@2pb+IV`8|wl#>gAA;)8sO)0+9#ycoW5Ap7g zg8O(Xp$3D|^`=;ji0D56bp{uCC!m?J3nJx>gKB7>TKC(cOfQA%8R2^NPt=*gw4}&Hd??Q0EEkmW;2klYCD9@MD$R_Jp)V ztytj#&fY`%=P^xA18|rY2+T8U%CNEV)E7dgD|A#j&A&j5@1P7;=HJ{}M$8F%>@i52 zqb_`NFW>$IgjkYs?C9+&p9NhR^JXPUsNcP$lstD&v^@;{&x-6wJ??Kuz{A?ajK$bL zE6yeF^6a+nw%^M>LQI>C!^_RT0*nDa#|L-;AVf`HFfM9X4aysgc<5b?+?=Su*+KB& zmN`4^9Toh4xk5;@lx;wolEPFhS&#%51Wy=fi;X&UA>P%saq12F$5ab_n};(#C}fFm zI%+-aGEGc!7OuD$xi(m#hL4$oIZdPXUA~eco{TksS2YYrN!ezRO7I zV?5OtIy#6{FTex;Y^%0Kjkhn4=`JKFFId%k{x9Yq3zDBE)hIK1D4xj74w+{Uve`sB zqH>I<9tPug*JM1WG`$l3agBEh=mnE1b(e76R^Dr zbg5(KJ{LC)o7BtuHkfR}j0oVww99f($M0w2l#)=gR)_uxl}jDSxiQ8Vj6Kc;mq|&C zGjy^cm>k$C0$-)6llS+Gj}z{q|LjKn8E0ng-}FI8*Mm@^z{Cs&`R%R|Q3fns651lp zJMp`FKj@GVw2cuH5cI^&C}GR`ao`yJ)4-qR%?puK6VxJuQP+2&vDO9kgKqIeXo*oB zO923iwL{nkDnGw!C;_UhxNtW5oM)Kc zy%PmY^21YOFlgHO@FfsV8TGYMO-_Oevzr_VVk-Q7wwAh*^x7DI7oXjZIe`GiSRH?3 zN9ruWyxWIdTma;0V!s{Apm-&~(VSC?uT1lrFMa*U`u2HXuUZ^T!t@oki~ms?{bZSB zJY`pLWr**>&>!Nx@ZXuw?ytj^ctA=HCimrQlGD%VA31g>+-Cbqi{7$e;oSOAU#D_9 zO)>thm9HIVGx#Ck$kACHl^hH-o0UA5OdKTF*hBbMc}xJ`DT!53hBK<2O36xP*E~*B z;s?rf(7M2~WSSb)QZ@<~VDQu1|DaMxq|V_UO`b+E$sGx3TS)z#BYuRe=S8J*4nRpm z#eiT-%7lN;bOW~V^WHNa{a057Qe5@VUjS|u|L5M2z`=2e!{HPwJOBXvikEqy|M)6C zKtr)-NM5cXHi~)-c5C*V{Cg!y0+$*%x0J{hpwH7GgdZ_q7&y3hATQM)y*vPC>Zh5WN-p2f}aVv{^f!&278Vr!E-LLx6jDv*pwQbQCuw9PPgw`$X$m zu4%3%ZOMy2ZtD>IE+c??H}4KXK@NsOZvF+X6nH(00ymyyzJqRqmZ^y(Z{?!7QO{h( zcXB?pZKSG86?4oGx~H-+{v~TYK~rz?^HsNV<`T(@iannohtc7}_8tmVjjJvtLv2)& z3nD?LCyTNRrup5Zy$h$kf4riz}Z3L9)sb=_>|Ym{o|6Mu$h3jMLu9G zlss|#SM#gL#iwR^2VtSJA!z&*6|qDR#uD4RBiv62a!&F&>Zwo&3;Z}!mh0f3EUB-R z#mtgmQs00lypG<&&TyEHV=QxH7+>7N2)Y{oN=$uHTX=$)T$_k8W?oR}{(9P{c2z^x3bL z0#uj?Oq|9Osp9+~5nzO*Q7{sQ6Ai~eKyQEk1||MQ2+m1aWE>m8cAXRwF4pRq67g_-^>;o0zfBue(!Y@e7+z4@Y z8oBJJkM4X{pzC(swud%zt)mUwq#zm6m2P9cd=!r-#<<&!Bc{$#bLpq^SDkBA4Il}Q zkM0l_1aBTI6w!Q1E2n<|QAF9>TC3EX%g)6LBn;?-T= z93QqUQen7{ZUlsg#px6}A7uCq>!C(BSX$HOAxW{#5o=t;*K0au;TuDwY!YEgA8+4T zv7l|gE_AnfJNSH@)4hYfE60VEG8?Y+@pWYWDT?TxYGMoXe+YSx*Hp->H90yEODJ1~ z>e!+E(Wj5GJ>3)ly3Hu|U{3FFLo7eKKuD7DFRr5hi1#o4`v0Y-LTNjGbccTL=7h56 zyhjgoc!UOA%su`jR4OBxt(l%pMQ4LVT*mc`uA`@sA zJ4_yV+*lMAq_F@b8+ge(PZ6xxy8U-5VKz>|u(cYEdX~2yV)(Q^wauZv=>9DCH4RE- z4Df$ExE(p=YOgRM9$(u-a4UARD0?44T039$(P~9G4wcri>r=RLY$SXaweJca(VBPh5pYPbPZ;bL6sTwpFgJ4U6|e{}i*w?E_IFDg`pp%L z%&U(su$$1Bq0auC#uKhk@gN5eHFH6s(Mc|5rg{gHYPlujfr90#x97|A%A{uxL%Mbp z5y26gg+_UZ`&>Y(Zm{tW!nV5=}&jaS}!l{aUU)jaM>hA0Z*J8nEej6#m65E{FSfvpO+BPx_#RBE}8B zS#~|D{hTib`kmXkiwt9~90Bfjg#5JEj>@*GG37=T>?3l#vLw;bMmm(d&ewbn`RFL@ z+;T|{taC;uQN1^5_&ll%M4RqARI0)`;w{Q{&O(kfNLv6HGcZpgP6|_*8LV(n5e3?S z(V^<^E1>>H;h+{h&?V$@=6v870)5(?Sd#LJR+Nb)HkY`+Lj6p3hC47*gPtq)CXq0A zFIj@RASKePe2#o#+&i9Si}Za?MvF45lNWmL*9SQ9#i&_w>IcZ|#iaRnCh+jzlL(mX z7u}gR)k-a*m~TqnfKY1yM6sDb7w?gZHq{JtBLFI^CgdiBjX2qc_h-=k&k{1I6o2aL za}>2swi5Yjy>elq-5z*|dGeoklmh=x3n0M_@srJYQ1)ZR_$;Hp^Pi??=p>$Z-G3G) z{ipLkw*FR+Tv*PknU&%|5}oDl=Xa(hs_Qhr7$s0)6-mCwixt2#8fBQ(c2Vb;4S0Y< z$hMKjhLPc%TtQr)KccU;c=#o@7{3QIB`}6WgDL#8%-2N$!Elt|w>AuLX?u(e0D@>E z$^$ZcAP7u>=*;ny#d4n#@HKJb{+w%xIJk!hx%b^xzu_WE=4u1A`PJlfoRD#4f(X zT1>EX{IkxZV_;6pdL!1BcvgLUF$q}c)^nyD|NxQA0`RRi|w zDfkBkU`)xkFt(sXosQx?I9yn{1;{8%48rh$3X6HdOi|ch^|ZN9-TtOZC0ZOe#h~HX ziH+2d41!#~l1Ek5O7gugx2|iw_Eq@&q0#m}Q6lqIb#jYKwt1xT@#Ht}vC=ej@r$qV zbs1;ijTZR50adZbqH3(&XRS7Z5Zf49G6!a3?lgPf!*TO#i+|I z8BBD$FVpUqkDoGK-i)fLLq}SWUxD zo)`OyZS*$86x}I#gI1~Yqk#D|?_8%OB=GJ`2%`ib_y&RN5*R(&DC}0F!!mNwKY8lc z<+l4yHzt#WAbM3^6fJ)rYu+sIVi_#aViyVtHc6E6V zUm0wyTSj8Ezt#0!-kfoN9}neNP=_`K$0F?ZAIMQ%2MCOk3p@b%YdJYyfS z@VAZ%U`5$bLBbIp6Gq#?+Ce@dC+~nE2wEv_E^NN5*ruB#HYJ(d*l6Qu&nGn7nS5hc zvk?0}&fk)jg^eRRaCJ-mQO0acFFAvSQ|<53@4FBB1x4>10x$MkmAo3m?$~KMmBdW? ziTUqL>a?-pBva*9YPwCLumu1H?)8v7=bx{r2z(TbIA}AA2fMo6oPE@X&@g;Qe`j!G zSd>d9kWjY2Id)^`XH;1c{?KOnZ<&=6)o`;+hXtS9r~?V5U0D{3^Iyk_j!_+IpG~Pl za^?0d8L{T|+9Jg+YG3`)R3mBbHP(Y=)65voiAaZ`m~L2PbOQ!y0VodD8n{L&99)h+ zqcZ+^m~9<(U@vWXa>Chu{GM3Z2|owKP3o#FvvG850WBR~1p{6UutAd1l`+JtaTZxS zZ)h|anf@rZq75t1?5|hzf7vq1F|?kc(-1>1QDo_5X>YSEpETl`y#0^v+EiO-P1yA9 z$<^u|?b$$93Q>ITNSg~C=P%=BsrMdZiJu&5Ncf)$*`|)&PyI&oxat##w_LI6}oXKT)NRQ4oLe`LPfd)fDq|B01lQKVVG#iDH(9d&({V8gsJ{&fL&W4>wYnSUr7_K%o=d*KS&!66{bn;nOwee%Q8~*3nNuJ+CCi3f{66K}>^8p67 zfJQu37M6-2sVQoG61@GB{4}xsgdysBj9-xAc3UV+|E33InLI2r`QxGaETR%$H0oxs z7-J;7rA|Y#yGq{#5t`D)8GliN6ugeohE^+h;)2vj*@ZedtGzU6Kfj{1B0S!=9J-t> zxuLd?DN}BdB>139DUk@{`G6n<&W5oSf4?oj%koRx!!59^!wtwGIJ$j?> zJlkyhxelZRBHx*}t-0$urk(pn$`jEdn+-IzokRe;gRcL;=VPt+n+z#C3M;GsXyJ-6 zZZi~O*IxmMH6bg0bD@s6P_^bNkJoN2&$lW%;Ngu#K zLR`y zt>ZP#=jE%H%AGCn8pq?a$adC)KCvYNI5kVNWi=1(FyS07Bi*6tHY{Pp{+H3$sSy9(>d`XVvF|%lv)Kxky5x>TP*X}rTqP)=T{XJoQ z6CN%u7-rjR&@M6A7!(<3BryAH=D}4DY>fC(r|$n9c)=p48$Ss^bu5;BkHOy@PVeFg zr&E~YhdW9*WCOAHbQb{mk!I$h!ZkB8RKdXfjCf^KO5ykfNm_2jFK@Y}&iPxjsRXz>+O)g@ zNx{Gqnt6GGyGdjfi~@C*3ziL>YRBUOL>x}PxvnEC6BX)EpP_fPX$xSN^L!gQn$lH9 zJVSkgO1k0#pO}1&S}zJa^WXyH3sjov5>~gfqAH>pkJG8I;g4qXt?NgQ_NnLTMVaI( zgcigAdnqM8dG0qzfQ=jnTmV{z-WeLC(y`v2S6mT-Q-CYaTd|QHvHQj|jJZhqj^FXV zAKRU(-ucrS1GHqL+#>ff&+cGd#~rRZqBaZ)d!_4E9s2Rj6RJuQ;Gy+!K zNxGCX(2>Q$`?j=Hoj9zfS7%4M-^4Cad!gT&|6VBBQ+7tjb*~@d7o%`m*693(Qr4g3 ze@49);id_!?238MM;no<3F7Pqd`?o}#sBMlh{p#fkxU)4J9HOUxkYO#`4DlDcJQR` zrhdQ!Z<(Q`NBYd$sapBbjFGZe@8rn&f{}2C0whD$h|eMKFFY=Io|Mqx5BJy zoLHAEz|N+}Svb7_Nt!wL^nO3SS(EBc0t)e3Z#vSaO<(oZ2iCxIx^T3;^hMXdRVp3p zF^*t0upm1`)LMSHHYeqlk`VR%Y}35Y<*zA@2f0T`t1G(64lhJLmt4PIK#fvN0;Rsh914^gs{#vpIiK!~DiJ~fWnYkcT$yZ``4cUGf+Rwsy%Og&l!5__C`bcL$av6NV|dDI78gru z(SDZ86<;I<<&xz9A7p6}a95_2=LYVSf~vj8;x)Z$EP3Y(=KQcNbemjV-%GVM64>b$ zIwp9}uBeMTILJDTQUbly)l#1BR!3r|VRU%`BK7jyQF|wC3wui+L;4#aoiP5E_$rpf zqXje1U4R+B$RHpTYE22BJ6N1($ilF(2nf}y7BeTrf$On|1$}Uh)=K(av(e<1B-g=l zZU63jWin|!UxbaDsK7U4YzR8vUnFW*6-!$xEEKsv7Ab&#d!NoUF*-J%w5Z|uJvUak za14a4J{1L|wxL0e0YVL&U#KPcln#;>)MCau#dY)l}gV{5hgbg}U$BNF@E08cB4oIc1a*ga;i9uLd7 z+k!3CLNl$lpj|pjG;2s)K>Xn_vPqF;0StMxq}XUWC?`ve|2h3_?${B$YG82psgGPA ztm6%L@6EHyzWi;G?0u0ax#>CUW(u8Ka*c*28H1p1nu5*IqPw zogbs+Z6UUx{vN)!y_!nI-9N{vwXl<~2RuG-Eo$KjUC8t}korflhN$5vaFu^A%8PB% z5+(XgiCE7dr&>Fz_!|>1r@bKqHaZ?H3$OU3g=rFw{zZ?%pmwaQ0I241?|Vcv`|oY& zkj)r!|US>Tgwzm>W=5G08EB76ok5Xbp)yCExt8% z4>j6DD#e+_VP=sBa9h1cPX}?5W7F45E8T7tmTaJ`saIu{0;6(qBCP?wE{xgVt!N-P z$U+j==R0iVvBALF0lATi#0dKdpIX5qh2&*PJIYo7SGFAG zZPX^WkYdyN3o4lC_+=Z66*%&={r0+gV8fZ>_0#c)M>n2S6@f40g^4U21Kc58%E069 zOW)dGb+Lu)o&%!3V2>w)Upuvnm|Jnef8+eXt@n+n9BY-(_0?&@f#BcE+@t8A(n*_7 zx3_Rmewb5@EXr8qs*;TOZT;aFdf_Pk?Gs+SRFXvF`9&Aq-8R~TpLG5T+uIgd5w>+u z<*xTfF1>e_bejtCbc9rfJo8BY&cEyj<=Aw5Te=N&l0~Y9Ko^Z>+(NSIQ3=Q)vq-M{mN{u{lp9>B2 zzKq64g-Y!#py{+JB>;_+fPWD1ZRVzE&$xk3Zuq~?ykrE|U*4`W{TzD%O@s4mAXwG= zEFmqy|F*=uXU}@P?VcsL+CY20zJ$`{BlgJ#k{NDY@_jm#vg3B=x!~3;YBs47$3%ZN z@r5k5iRsYZTwu_*MP&3iynak&10f#-Te0H~PhF>+|iS9r1u zDJChk0HrC468PW@~8oC(e>e_1K88c3qzuCH}W4nIPk@1(IR53bVLvbkvUGkiNjD{Tf3=m=R|N-Ft%XRBeyZ zUF)8;3yH*5**^--vMEB`+g}~s!qG)N%&#LHBX*i-+`m*Qyg$~nP77UDWIbJU92zNc+ya$7On}L5w0+Nx7Z>YM;Z#Nh+XuGo}tH zL@eU}tnzOY>GP;k`H#!cb+u$DKN&X00MO;4Y*{H_bsLH;wBNg z;`*Mt5*dgqQk1zy?v)^&qmm~wjE^~0^f337&o#4&yF|$~c6bgyyfHCXVq*R!P2Q%3 zn^}PWgM>&mzzOREalf6>uF9i=boONXn!@`C?%^$ADR9N#ar3$5M)J-E=R0hp?`IY( z2iD_s5+~ob)V-rHJ?$>Ei+SPdSjNnwAVd+H$}uja_0ud$0mMA-rux&&9C8Y}&rQ5V zc4<(}x152VV)IUo-r1Y}_Yh#)xaIP4!N3Tiq>fyqX|<8x?52PvNt^)cT1U~fsvR;` z-q$N;m*&1Z=-UBtEA>y?1cpKUOXH-ljl@iC36W!3)0>txaADKqes zXZ?m~%R(D4o>xqcJ@F(?=HLXu!?CH$i!ymvnEF|C^&@UiYGV=|+=@&cbvPSvGNvl) zaNq*I^=_nwfzPQl!S`~WlB=x^3E9$L`%U5@Ug`)%AEv?K%;fvsC}mF-&5<7kscpOX zpz$ISW6xhvBjdBRvnrx+@7n3l96B6_2`vZqluH+)O2)U06X_^)aJ{IGCZhubA!WwMzkfR2PzNwh%Jxnw! zw>_ZrzV5E9Sse>&f-Aud7Biyw{rCK&J3KS*Hdy$|{$47rH!X?jraYHwGu$IYv&8b) ze6P7r`g#)7O)HK_b%UlH)sw3V0-yQMw((-$lxMh4^o%&2ehan%|9-Azp8IR^o8+@^ zS`|4NsA0u@BV5#`57+NHMnB`;((>tOZRJgmhrFv7;6_kr(>@iAvi6-qjr-me;3cfI ztz?G15BE+bowUIx|gg9bK7(xYI6m2lXmsE z_FaE3TDgs?ds8OM396IIcW+t# z_2EvU%YLg>P#cUy7s;ITyozkFYa+M(4ixM)DM5P7jn|>WG}_#18lW$-w=|nX&k%m? z8}a%<0hyM-cTNVEzqFQ&L}4~9%tL_5)?5ki!&MpbKHs>*N=89qRELT4?0VLsht?Fe1qi~`?Ib>!uM)55N z7hnS&;sJnCu<}2V7s43Ixy5XRr(6d$*p?MWd_{gJ##h)RKi1>qqN0>o+Y!b`n6O`` z9STKC#?BX@-IWxER$)*-W>Hkton9A6C!h!&zjT4YJWbKi^Iow{M8@P4=JvV52Rj4JNY^WXz0r1Pw`~5upg%c zom{s+@^K67^i+e6go{bP8~4vYY$vyWcRu<&({$w-_wcy5o6s?T9ve1=(nw~%7hm~* z>oUJAKB;+SC8LRL&Mhk}+PTNGzr|Z3w+77D*niW02$U<`4$N22syV8rZ@;wnZ%)P5 zoh(K8KW$Z>y%IO2>vSmk4=fHGa}_F z-*`Lp+N;_h5$yH(RLsjM@aQWVqc`UHUv%X{>+v}L%Br7Ti}$o8)fs>E{DtFNT&C)D z)%S2CJJMR;Za5cNGxnk(Xcv7HC^#8y4gDN6?|Qg%3W>k(Zgmp-vt30Ra_o^Fibc0YBX#mr*b7Sllq84m)efn^{K&|-rE*nnx8pef^n7{e|+8k z2i6CaGdWaOc#-(NeItNHoY~MR0v|O~Zm0!hq3!~$isKN)PV0-p@h4UEn%`ERbL8YZ zvg&*%(qw=6q*gW@H zV9o_{NT8wK%%#^+dB{6%q4}c$weXi*zL7zIGYAl9W;oJ9w&r!nO z7u&`%1i}9m^`-^T_Wj9{!V|4gGYpTjtzRgcqX($dGg1J%LEWxzH$Bo}tz}h_k6a94`2zSW8vdmu+oxf9?)tq5LrXRWIsaZMV22 z+}lFHPz8$nnA!iOB5Q#tdhcwRM4GS9)UH-Co)*sJG{(MjYeq2(#pGT%k_x2U1PsX|Bxfj&3p)VFHmD!pf(^KlI;^+ z%(JVurP7LdGqUL%SZxdFwO~511wr~~ySrp(A~0u5H@NCWoHChR4MfS}h_7<7IG}Sh zx*A?>ojCLAwlRq-JQ(1UhaGW$CyT)5KqEv*)t7JYIIA8rKhjHIM*-56PO%YU*_;@a zIe|C{s2bRvQc3m{Qv;;F8kwnFzj$c$fevDCv?F*y<_@|1NQT{XRc+bI`h<4CDW40d{O$3xq{=Q|JwZ z9^wD!mYK8te-rXX%K)&yeN%t_Uxy+iYfW>~)?THqzNdn!NExR7z!zV{%zxW2UF@I| z@g5aCGO&X!kxes`*yfEz+#ZMlFqBo9i({m}>upk8)A%#2!wx&FtQ*O#5hu<7BDfv7 zJM9(Q=XC=lpX2=G4~RBPN1ojCH7IX}80*b2}HF#!l4o^R?$1a_zis8V#x` zb$Q~6Czef*0gLfLt>-}(9h8Fsq?M2EZte4wgF_GpJGA= z)~};xg(1H$W7?3mu~|)bYdzE;OJO|<>~cYa_(}rs7l;L zH)f+uj-~iX<+{$DjbXJtQd!~|pu^MH$XAe!Ue?Ipmr`!GDdkyv8W}yC-AZ-(Y%YLT ze(Yl(TZ}=nLt6l%@s#3aJkp}#zD$8nJOv_5%8BdSZ{~jYyI-L}&;V)^UT%#i@D)_~ z%^+oFf{>1jM}?Xq_uCFT>`;Pcvx)WgiqIpe!w?U^0C)fka{k&eu{2K6EG_&;EJMr` zt>)^0}+r>?(oJpzH#QUwSYzuBE!gaze5c{ zf!`{tqHHVA(6#InLq?IT^*!N)6H1DccL0DAAlpP%NnF4yF%+3XTWB&4dNJ_^zzt?f z(@Ze5A!HH0V3#X23&=1`mpk4LYDb29yhA+i_wd+)P!S#DkrnZTnR?-P4ieP-)JHzl zJm_J&l(c1EAm_Z|0m1;*3Kx7{WGyl`-iNT1e~lRMODRnC$kV>_R*SwF*h_;dB&Y84 z4yrm=i%irdk?QPwo3fscON z<4R4{xRR3e7{>BL?|W~vV{8*??X*{WHaPz`CKkFMfBbPJ-FoDaN0s|C0^^GYQ~JI4 z-g|P>prc{{X#M6lzqtqilFJ@Qi+Zdm3S@9m9PaSgV~=UR{KYRd=Laf7D#C&IiGYOP z9-NYTiWkmE97;ha8ZwZdi&6tsy_#qnO_;_ zIdX0w4UQK&GctZhg-2kFVg)o*tmvh2Q{n8v$VJ^I2Rq&{VU z%mfNd<@=Z5Uzg-kbp-o*u?KlCaK>G%v_5kk31I*^BF0rEq16D z6HMepSla+}!~n<%<9)I?hsSo>vI5eW8%D1GQ9(mcA;?b{_`GaUZlF~o|Dp_1%|+7# z%*6m^tHiTa}p=H7g+ULX-IwUsmk|Jd^S$svn^1``l zY+R7r$Cc;m0p_Cki>l0heHnFq^7DHA>tA2eow@RE$o2XtUzZV(sVokFb1w;v^x(B2 z0JcoUx=)sRFak-5Z$;9>)8c(Ukqctl9v}@sU`h~>o;x<_#TcN45(pU~9hMC;Papsz zRLEeK7*Y`G>Tw+dpdM%_f-#=+BC~Yc+pb&Uk)a0Qk)i@gsl=hmuT3k&c|+FX)`}*m zF4Vw2Is;!)ooZXJnLa0Zy@UZY-fzGCn%#EW?FNNw*MvMTyy(KRvDj?3VVv0*D}vN< zFJmf?FP_^xJi2_p)OPOTC%`ph4BnFNEoKX~rGOZHj)0Qw^6@xnTrK(j5^5QV&;T4)w_qrw?Uad-V$V=aB zak$covFGL$SC$km&BA?q1(K^pMzDZ{245 zn1iViy>4p_65>3{4AFNB543g62J`eezFGc4FBphSpx|5(>;V}QyES6l0Cdl5R1V@D1?-|0r7zUR<(0jBkhsD5+MH zNio7h(Z6^*ZxdIuK=N|0X>T*+UUeMgUiy<0hcay@l6H=~e9ESl5o$p>r?#N9QSj7+ zS)Ux0lrI;l)zwxFPd?qpQJ|C8<9R*ZM!p}trhgHNygCnIaTP3Y5au1Js^&ADXMK1L<)F zFhl`IA@p3%o$Wd8OppK32y!*U?)h5EOOkqy%J$UX4@oS{95Z#{UMH2u`^%$??RW&V zh8Ny__ub1lYd0`NnQV=2rr175H;Wh`g&=U{o-MR^;uD`(xV-NmzLicCUrN;8p%8*Q zbbM~1ozDqN#f2m?NCcU&MIVB78Bv=84V?%Zg?znQ(K=v0lwW3te8f$vNX1Y|d-`Oe zIazblH+eXlzSXk!Is55e5Z`#)(#3p`>=Yn0-VEWOgAST0hn~nZXt=f;ZI6!Qp*Rpg z;KTJPfglK*Wj+4!k8j@k*0+|-PX@m-KHl6VMTZDHiP!*|s9rR?*;ec!9-+$vj9X_r zZt!QT#I7}8=kT7mvf0zmeeQFm>N2xqeUpZDpC~1Y%1e61BN{F0<@Ys#Y6NH|qoF3GW5$I$o1y0Ey@ffI>3>v%D5PP(DJ} zc@rSgo%XoDdvL>*!zFGSRO#~g4Ly>{VK9`RU~i=SL5ofbRM{w~z-{9C?ZB=cxY_`e zLaY@Apzdh+E6O{j*VPVHXvfJA8Q7t9Jw5XhW;^rIgwbyC^i zR5;5rWr*&)(degg*4~JGk1nh5ZrR)~iqe+1xmdjF*`|XGSX2^)?I-e^wlCVUjm*nC zq!=h-xugXe*MyLNaq20}6<1x|91|HKXyTll+#y`SG2~7KbiVBht@~XsVu&stn!C;A z!14g9LD!4L=oiLQR{A(|A}gh|ApPp=uASMyYn<^U>cK&PP>Sd(&@3nj}fEAjn zrl0=ed|X+UN1mTd>ugT~!)YNu6`gkt5b1lR41X2%`((1^)>{|jszD<^yEkN}-06jX z6#IF)kM+X&;t6;abXRZ=*)x-;y}$nDX=U+?1@i!n!pjD!{6&=+(ug%0lVt!pO;{+7 zO_u~|IxNM-;-x&z3L8*H;duFfbwgr+U3cBJWP}8J&`18*F=B}}vQTg+n~yT8(b@gn zm-k8IPQ7zAL#%pRB&onXyu zT3v+m=A>A=Sgs58p^e2DUe2pg$eaWZ)E6`KA!y(4lz|sae#{8lfn(n_{H}lcOj&Y+ zu~A-YHbHRSJI^r=>b8uJbfuS!49_c2)ee+NCWjH;D|UToQ_Pez;{jyW94mwW>}Nka zv+&+^fff)%n;!Czhm=`j*}#dN2ulMG{DSO&kcLWFK6aR2@H zZ=MhjwDTL(x3rG&sA=Ky+en(|m8AeREs|e02-|b%742A*TB0G!+I7sCXP#LUm{Bjv zYp5rg%RLfAAilJ!Y#SpGci`vf4|)W!pg79HJ4;{tYYZsA8GN2Km#X>>wXp_7#>X0u zq(uo*UyY|-iV>wkv$m+C4@)-%3d_Aw37^jAem`=*5MD3~X$X~zG-d7>yT?Hp98lKB zLEyzo`^u!y0j+z7TS6QxQje=U7{GfPb(l^45 z>gaQx^PGYTvIbnO9RtuIXaj)=mAm9B{pFr>Pa(%sAep8N61iKnLr@KcE(=8SFpF`t zsTQ{DT^WIyc%pBQq1s?dsljw9cPeIj8+}3-au)>3lirKM81x}eu`F~b-jW48q*ZW3 z4QOiR-4)TNRc2(-We6F#11O~xjMicrW64{~*IV3VZLe$M?ttuJ4|~|uI_o$t=X+31 z@mgl?XrXUVi&c$m*1nPHdjA+wP^``5cCE*(?v-u;t_3@3Cdc zmgQ?y$%NmQR{v#_7>)Wc*&pM~%P<-fWD~m{pltvKg#vS*6r1v^^-vt;d9Y^vq&IO+G{`m` zPyywE7z6>~%^J%f-8uO4N?}9-Yo!bZp78KZfwH)Q;xirw<>iUxXP$9pvq1!pSpuAh z33&~Edox>#X^pWIhJ`q-MQyma|rF%Hv+E zt+r~ctzEk}9h>Kpp(oC4w8`z z9N2y7OJ9zJ#(pLJnO@JMa>W3Cm(=h*9l#D=_qx~3WaY-Br6(^4HV~)}j&AD<%1)Un zt&}KbhVmwM2*rR(8OjKtky^ z?J#J$C40@mhh|%}SNe{UWPMU9c^UvWFDRD*snIr-^!nHlx@^Bcpwe>YoasU{=j3w) zP``GKRND}e-#gE`48bZYTFc#iP5HID*`PooZH|-T34fw%R{=27nV%2*E6B!yCx%P-N?a1yhVd9+(it z2Hc`x$%7#>D+H}fkf|LKIH5<%B=Al_noU&=e(qlEyG+g1h)mg?2dxVphUdXIV@ zLC`COn+XN^f8)s5D6H>!IO%H%4IEw@C@_u>*Z|mzB90IwLw!5I34+lbDO9?_(|G7N zPk;eTW z1wZLYPb!L?l*us$L?CP+847`Cx-pd?)1~Gbyae9qRTxv!mpp!o+h5g5De9D`!S_xD zsxwWQ0iqlx;-m^^V*p)V$TiW7Of9;e<0u?M(=UPQko)9}t+)($=!5pVJ`|Qja12zo zW&6ut{_>*0?nCChy1$gzcmgBd&ba1sOleX|%`>Az<^qfv1s7DC6cxAe{>JWOANyEo z!$g)sbQu648X!~ngd|Xc6!^Y10s>mOW!qsu28#d0hz~XnnqwfKKBM3zC=g|3DBLR7 z>^h802Ii2UOw$5cMRmm;ZYlXkkFv$Jf|&J&>7xW zEMUBNbQH+%Qox>Z#!K-6dxw`mfs|{gX5|g?(YaZgo>Xn3C{ULHPzwB#BIuL>!|hqU z{~@_$aF9bhuO2g~a0d6WLue4JH^3QwbUdF=9B=SH@xZ1 z<#&O#Y!2_7)b7I{{%}cmN;QiK0Finvlm*2xSKwvtz=W1DV-RE`uW!M-gvP3Iym_Jj zh**F@^2z|s{ZLZ6QX6(<1WR`eFv*TmkR$`)Ty#RvheH|& z=t2oyLso`|Nca7r4}GX)eHagyOnLB6-`8lEaROSyXvHF0C@;_Dd-Fcpnh6Zo zr60x*VBKsCASas8ApD+^qBJrK)&O`eELTZ*1VG?~2Q|ZivXB3?6|i%Oz+i=Du8WW=xXeKuL;?M`s4B9*jKBz1&~W$wN^r$6L5l z8vvRH>9n_=1@0Q)RBmm^C69TW`!NjH&a|Pv2tXMCbfw4)nv8fd3d#%koE4hDfui%m zsEhM>JH`&V$&cK%8}joE;w%PcOx#;t6W%YdCrjr6B>}9q?6~8OWz57`JiN&>ePaN; zh2sGbI_v)W>N`47Cm1?pG?^YiM`QsA#LEDS0k}&_DUE0b(e$`uAcRRRJlu>i<$@w6 zxwvTbMgZnIgqSW}U}m5NU8!HS;hxl(N8k+opEp+aH8<~XFRmYSTSq~1?bPX z#RwGJXIVK0!^8Uy#pRLZ{eh2mp-+sIJjp~mM{xhNg~>92x-*2vMRRYs`di=nw)lVT z5(Jx6K@ntExNZt;KncpAqZb6oXnZyUjM6}N2ISg43($CjTy&$(NZjH21Z)PAqDo6r zmRh+<7!ooJ149Axl^GODpV=1ywV+*^k6X`&+vQFb`VO(BZJk3Ia~pU@G7|^Hak3$` z5i)p4PKm@RuBA^nJEPB7V*kjpJSt>DF`c6ws3C==s5~4x;$Gw>PI4Wy@8~4Z$?|2H z8tX97CNd^_hDCN1SKo~r1gH4g#4DppvU8ALKN$_GDKm#2@eq;@jKgOJYAhHT&!1~R z+>?BIo`bM-8$bxGb4OEyo3pG2OCI^kK(cRz(n2w*Mb>}#;omGMgrh?SXvJk4EU^HW z|FS@$9|Xctc-)%6R41BGa9-~BPXT@&lRRGtM7Ol?(zxI20u`SS*I_{QL=gj`HG;M28vBMRx-Xot-Q zD5K+fS=+#i8P*EVLScPxk5>ILH=_?|3Pd(HK&JY)M{KPwrTVj=K7!cX<&O-ZJAThN ze6JpfXaDr4KUKWBrJ2Bs9Q-v~&#)L2&uG$2YE+yz75HB_ivRn5at+|0!Pxc9d*1!7 z=GZ{uLqq7R#%^P`z3pwvK;e$Ky8JP3Kp?USW_}HzXUI}=$J+0nl1QIA9&!^hMHP6- zKtQ-%L!m$OiH|o&{^-Ze+A$!ICm+~Nv3LS6=}bn014GH5{^*Cztzyu(y5}}Up`fPw zapBT+j89v{8W#HSZg;!erp;Hv;P!m(^9l_>Wf+tonXw4$vwD^C8pkyNMLKhj^=VSK$`X~;3 zWIQxnF`VNlK7{6J(M8D!Pmy7$6k5Et{k^tp_73FV{OE!sE5Iv zO8u=-21NagR2<}?oRkUTpa>?;xLlJeQjxwByk*)AKgOfEUj|_kM*vM3C@*DU42%sD zLOX^vMR~3bG+u5d%_!?aVH}Uw8$>gt`lQ`vQSW{4dqsJ3%pM1VGI+EIA~Ryhn$OG? zJl2^VR4KDW`mMhLO~#XfJYDPq8Iuke(VR=QK>CTSz&$H^%$FN!wlI|Df`JmtCP z{JF$eyc=4kUt~^c$rIS*Y`pfGz@nf)MNrHz$(78K-T)`y0lXLikkM}AfLh7y$Rwej zD5311HsvF3>BETHpSCSbwgIFO0O%5Br2HrVBqK<|mEpis1<1a~ zDP<|Rc2o$`LQ!c`lte(dPZ-Q&gNE=RvQW?wWssXDdnP{(hOim?!KneGq1SZ0reWI(t801k>tL_t&|xTB=v1jrAW(V?$|kTYQ}i*HKnZdmdxOIOa-xmF7)%4`I~foe6)VtWU2xtEZYiSyW+b>d zFU9NNzZ6c}1+=-e&~GO87_@e4W3G}r;)w4BD6Cj$kiIJ<O;sx|y!XxFqOc?-VkS!r784)G9f;>SccWyv3Ad>}Q6of@_xKheZ5zP`q zHpfC(@qmdo#^go$O}%sVl*zzTT!Fabas?R#hh$JQpGhFo!dtjD)DxI$GezLO-HXCH zkHSLQOy}jK6J<~l2~njJ8H#H_UK&EFmkb$n1E3*KIh5+WvbJCU0Z(` zA*CmK;DX!hPa2VX=`)Z3FaVHoKMT*ss!l;go0q+!JtrPDC>8$1i~>qO6nNtQ)xU%B{+s`Uam{QWiK*K zD!u1>+#Q8Oo3urrycqybggWpLN{$)Jp|Q{Yy75c|a|{ekFv+V>1f>9w8hvoC42g^w z#Ul^A8%i@WagSpu8U-dR2CEIOwMU@-!@>x7S22T$Ewl@_7o791`tO>?1wiNrh2K3u z!-F(X7jX!{aIWj{c={){;4LZd)593Q8)KIAloui^itk?JXnb;wHre|A>Nr<$+>`g8 zycl3M9m*ZvC^0mHBIwFng3q292#ZF@CO|jHF9U%);;({TO3k$!IL0C^_^eP0=|2cZ zk^D}{7!S0PC+8Wo)4-q_JdPj|Ldk7Iw0yKEuLH#ez~ThTv%~$iZ{Gib4>sopg^@33 zL{K+piT!0P3=Ln#{ja>@^5%U(ORN_*dyEgGFBFGT^Fjc@bs+A0L-B4Cl;J+n-n&G9 zpBab@c~L>U9PQ9IhNK@-vE<|T_s8Eu<9eTtcCQvR$80e#MA4-yc@0ReD3OtAtK@>1 z;G;p2JiCn-$fx;;yTn-J$I~%3_vE2I5*~2BckJI>aN$Me+LT{Econh)N@OTtCO-hS zYCQWG74lG!df(FlUSR2t0Yafi&I63R+chk%9(QWZu*YmF>5aYlz7&FHj z2Zjmgq>mZ40A9a~DI5Tu|86bOaDXAJ~iX&}6DWx}Pn_-Il90T>i#6cnC9 zQ*4MRu%j>rCbwU~KV?6lqGO@30T&nwW~C`nFUm==(IcJ-O7bM=4_YAeg2td*0#bwS z1tC$ntaOBg;u!ZrBTyi1a6Uxj$rym3mC`UIhQ&xIC53e?>LAmiu1F4^(rY_o(?8eN ze!shp66*azh78L+T^D_F4$s6BX*+pRUS5H$cw)2(7?>R7A$S~KQoqn8-W84FMHmqJ z#Vb>6K&Bnq#SqDieD%lM8AsT8xi5V0A zjjIZ{DJ~jfu()zr8HgxW;6->9-oe1TA43x_KyZqf*&d3*%~K-x#m~hp8DlU8^h{tc zP^Ku-qr8uaAOAC29su3YW=2Y}#R}ShZcrA+VnQqzmGFR+50BSAp2ABafWm95d+=KB z@B9qz0R!M*M3g^kcTgO1ArBxTwxaM9Tdfc8B5S1GP+a@SkG#bwyc>XUtXPENYYSsa zATf4Q){HRMgUp5|w-hA}K)I-e-%H#8w5L1@tHS_RjWpZg(aFu`VgPwgZV+WaOq1iS z0?5ocLs}>(D+Fl`uECa4go>2fJOS73cY_Ma(Iz=^NRB>GE_8qr7#xZU#qe54$&=(F z9bO34@^*~33=X=%K;*=|7=mCuJr!kkeQiMnv>W0x9PM>4N-aGog-F>bIHOI4*GBUT z`inB@kM`&f4?}?k#EgloC_RG(2Kp_2@*CbS79u|e09;U|tjPx!yb@r6*!sl7kc~M9 zp22Sn6-5Ie;uz^?_s}oY$oC8|H@1>`Wzan(4ntJtPjS!#<9*pQ`Y$yGu;R1_ST&IB z;~|u(GRir;vJ{pPP$K_B9H@c{NRdJws41OBxRe4?L42qUnHhwEHQ_}`8G?b6y>UFH z&2`0olY!w`(nH{>yoS`B*-Qo@9VkPTl*x4{2nxZV1nJP2(m{6!NJ-HrhC|tKX$sA- zrF_LL6jL7=0t1om)V3@mMm=&u53OM&4BhcKy+B$Y1@q4L*_;46r7bcwf_N!s#;A|H z5aT32a>@;C#TO>Z7%`(GC!dvxFjj^pxj^BiS$Q4whl2YaXrY{4C`Dlnt$f;y=`=u43)EmVVOlnp1QcodjNqI|e9 zq?OBeO%<1vLfZt3loIveF(7=-A(#|{oD^Fe!UzSlCausYlnk1?h5(zA@<#qbYBbOJ zViiga(IGU7#>43+qhh?gk87bmz=IJ24>IE^WYrjoev*k`-$WHOXQ0xc+NW(O5U?S4 z#zMXfRGCEFeup&0cp-H zFerf@w52?PLIwx9c>&Y`r#Hx`2Lqr$j^S~j90h@l6qu*brrcPT2g0ePU6a2vIvEki zFh&MNS+#@F@h~Wki9T^emK*0bF@kURMon;TbOV}`Geg6-arP`MBm)NLzGw;gFcJpA zka#sb9eC)Qqyc$qi~hMkdMN4OcZiQ-0u0ylcJEx{KsNJ0cW$K1F@8J8*#EXN01t4^ z7~m!|fDD8gKrw<4#Jl3}<7R7(eaAC`T>qL2M+iLy&ka*@uHLb^c*O6yvozzOI0i^e zkz0Vs(ByNi{KjqPY_)5lV6LCD*QLTSl-*$Gt`Y9%909Fkc^2*Tzc+sEdtS}kXI{!@ zsH<(+2miaaa~QDuY8S(GJfo*{Xjg7S?%vwz79{TLNY^!WjX5z?% zy#4R3&sm|H89VLO?;HOgqqXo&Z! zA=vdoAU~Z;FK2rWk3flYA4y7qJ{T~{Kw#%3U831sB62Q>&QsCE_&fuL2k|o@DP+tdwk9ra8wEUQz-4go%4U~%GLwm8m9+@w#=6<2hvPhM0n z-!tx)gnXYJ?L4V60LtGsfZ3`~p)zxM<$2|?SMknNsC4M6-k}(x^^eZw;^WR)%z~ab zzPh;EIp1; zgu5gZX+G~UpVwLxx!sJ;{X+CbQU&#)_})1Iwn+ScQ4Ao@ZO;cV0yIc0Q2vGy>=1wd zr)z7G_8={3<(bd>&F8glM#{S=UAZ()eowr=QYn5;er5Wz&i>4r|Idd3wVi?86p`?rBnv0?9lW<8$?|n|Z1-VDX z`?PrD_>?_seth=Mz;}_+e^EU^eSXFQU7jEffKdpRy%~yQlS1X+Nf@w&HZHmZYP9w_ zkvu20GQ*QfpNd~A|D02wb@S&M1b1B{6`FGA+yJGo-)R6DIM)U+9|pPTL$h#&#Vvuh z^5+B=g{}=ifSZPp8K1iF&GBAyqCVNl`7nTSo*)e&6+h8GJwWXR=DSUcdmtCCKYIzZ zm9xSL!jii8VjH!E3ojN4bSe2_Q~V{Zgk1=~fclF?k0$n_ zqXODR4s^#!8ErA6CSf+=6q4Ns{u%H9Wv;-CmV3{8Nh0ZS+z=94e(-K%PfMt647dpRS g01G;>OiSSZ15#8qyglr%YybcN07*qoM6N<$g5fnZrvLx| literal 0 HcmV?d00001 diff --git a/src/all/twicomi/src/eu/kanade/tachiyomi/extension/all/twicomi/Twicomi.kt b/src/all/twicomi/src/eu/kanade/tachiyomi/extension/all/twicomi/Twicomi.kt new file mode 100644 index 000000000..18fbe0896 --- /dev/null +++ b/src/all/twicomi/src/eu/kanade/tachiyomi/extension/all/twicomi/Twicomi.kt @@ -0,0 +1,235 @@ +package eu.kanade.tachiyomi.extension.all.twicomi + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.HttpSource +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import rx.Observable +import uy.kohesive.injekt.injectLazy +import java.lang.IllegalArgumentException + +class Twicomi : HttpSource() { + + override val name = "Twicomi" + + override val lang = "all" + + override val baseUrl = "https://twicomi.com" + + private val apiUrl = "https://api.twicomi.com/api/v2" + + override val supportsLatest = true + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", "$baseUrl/") + + private val json: Json by injectLazy() + + override fun popularMangaRequest(page: Int) = GET("$apiUrl/manga/featured/list?page_no=$page&page_limit=24") + + override fun popularMangaParse(response: Response): MangasPage { + val data = response.parseAs>() + val manga = data.response.mangaList.map { it.toSManga() } + + val currentPage = response.request.url.queryParameter("page_no")!!.toInt() + val pageLimit = response.request.url.queryParameter("page_limit")?.toInt() ?: 10 + val hasNextPage = currentPage * pageLimit < data.response.totalCount + + return MangasPage(manga, hasNextPage) + } + + override fun latestUpdatesRequest(page: Int) = GET("$apiUrl/manga/list?order_by=create_time&page_no=$page&page_limit=24") + + override fun latestUpdatesParse(response: Response) = popularMangaParse(response) + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = apiUrl.toHttpUrl().newBuilder().apply { + when (filters.find { it is TypeSelect }?.state) { + 1 -> { + addPathSegment("author") + filters.filterIsInstance().firstOrNull()?.addToUrl(this) + } + else -> { + addPathSegment("manga") + filters.filterIsInstance().firstOrNull()?.addToUrl(this) + } + } + + addPathSegment("list") + + if (query.isNotBlank()) { + addQueryParameter("query", query) + } + + addQueryParameter("page_no", page.toString()) + addQueryParameter("page_limit", "12") + }.build() + + return GET(url, headers) + } + + override fun searchMangaParse(response: Response): MangasPage { + return when (response.request.url.toString().removePrefix(apiUrl).split("/")[1]) { + "author" -> { + val data = response.parseAs>() + val manga = data.response.authorList.map { it.author.toSManga() } + + val currentPage = response.request.url.queryParameter("page_no")!!.toInt() + val pageLimit = response.request.url.queryParameter("page_limit")?.toInt() ?: 10 + val hasNextPage = currentPage * pageLimit < data.response.totalCount + + MangasPage(manga, hasNextPage) + } + "manga" -> popularMangaParse(response) + else -> throw IllegalArgumentException() + } + } + + override fun getMangaUrl(manga: SManga): String { + return when (manga.url.split("/")[1]) { + "author" -> baseUrl + manga.url + "/page/1" + "manga" -> baseUrl + manga.url.substringBefore("#") + else -> throw IllegalArgumentException() + } + } + + override fun fetchMangaDetails(manga: SManga): Observable = Observable.just(manga) + + override fun mangaDetailsRequest(manga: SManga) = throw UnsupportedOperationException() + + override fun mangaDetailsParse(response: Response) = throw UnsupportedOperationException() + + override fun getChapterUrl(chapter: SChapter) = baseUrl + chapter.url.substringBefore("#") + + override fun fetchChapterList(manga: SManga): Observable> { + return when (manga.url.split("/")[1]) { + "manga" -> Observable.just(listOf(dummyChapterFromManga(manga))) + "author" -> super.fetchChapterList(manga) + else -> throw IllegalArgumentException() + } + } + + override fun chapterListRequest(manga: SManga): Request { + val splitUrl = manga.url.split("/") + val entryType = splitUrl[1] + + if (entryType == "manga") { + throw Exception("Can only request chapter list for authors") + } + + val screenName = splitUrl[2] + return paginatedChapterListRequest(screenName, 1) + } + + override fun chapterListParse(response: Response): List { + val data = response.parseAs>() + val results = data.response.mangaList.toMutableList() + + val screenName = response.request.url.queryParameter("screen_name")!! + + val pageLimit = response.request.url.queryParameter("page_limit")?.toInt() ?: 10 + var page = 1 + var hasNextPage = page * pageLimit < data.response.totalCount + + while (hasNextPage) { + page += 1 + + val newRequest = paginatedChapterListRequest(screenName, page) + val newResponse = client.newCall(newRequest).execute() + val newData = newResponse.parseAs>() + + results.addAll(newData.response.mangaList) + + hasNextPage = page * pageLimit < data.response.totalCount + } + + return results.mapIndexed { i, it -> + dummyChapterFromManga(it.toSManga()).apply { + name = it.tweet.tweetText.split("\n").first() + chapter_number = i + 1F + } + }.reversed() + } + + private fun paginatedChapterListRequest(screenName: String, page: Int) = + GET("$apiUrl/author/manga/list?screen_name=$screenName&order_by=create_time&order=asc&page_no=$page&page_limit=500") + + private fun dummyChapterFromManga(manga: SManga) = SChapter.create().apply { + url = manga.url + name = "Tweet" + date_upload = manga.url.substringAfter("#").substringBefore(",").toLong() + } + + override fun fetchPageList(chapter: SChapter): Observable> { + val urls = chapter.url.substringAfter("#").split(",").drop(1) + val pages = urls.mapIndexed { i, it -> Page(i, imageUrl = it) } + + return Observable.just(pages) + } + + override fun pageListParse(response: Response) = throw UnsupportedOperationException() + + override fun imageUrlParse(response: Response) = throw UnsupportedOperationException() + + override fun getFilterList() = FilterList( + TypeSelect(), + MangaSortFilter(), + AuthorSortFilter(), + ) + + private class TypeSelect : Filter.Select("Search for", arrayOf("Tweet", "Author")) + + data class Sortable(val title: String, val value: String) { + override fun toString() = title + } + + open class SortFilter(name: String, private val sortables: Array, state: Selection? = null) : Filter.Sort( + name, + sortables.map(Sortable::title).toTypedArray(), + state, + ) { + fun addToUrl(url: HttpUrl.Builder) { + if (state == null) { + return + } + + val query = sortables[state!!.index].value + val order = if (state!!.ascending) "asc" else "desc" + + url.addQueryParameter("order_by", query) + url.addQueryParameter("order", order) + } + } + + class MangaSortFilter : SortFilter( + "Sort (Tweet)", + arrayOf( + Sortable("Date", "create_time"), + Sortable("Retweets", "retweet_count"), + Sortable("Likes", "good_count"), + ), + Selection(0, false), + ) + + class AuthorSortFilter : SortFilter( + "Sort (Author)", + arrayOf( + Sortable("Followers", "follower_count"), + Sortable("Tweets", "manga_tweet_count"), + Sortable("Recently tweeted", "latest_manga_tweet_time"), + ), + Selection(0, false), + ) + + private inline fun Response.parseAs() = json.decodeFromString(body.string()) +} diff --git a/src/all/twicomi/src/eu/kanade/tachiyomi/extension/all/twicomi/TwicomiDto.kt b/src/all/twicomi/src/eu/kanade/tachiyomi/extension/all/twicomi/TwicomiDto.kt new file mode 100644 index 000000000..57deab8e0 --- /dev/null +++ b/src/all/twicomi/src/eu/kanade/tachiyomi/extension/all/twicomi/TwicomiDto.kt @@ -0,0 +1,114 @@ +package eu.kanade.tachiyomi.extension.all.twicomi + +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.model.UpdateStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import java.text.SimpleDateFormat +import java.util.Locale +import java.util.TimeZone + +val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US).apply { + timeZone = TimeZone.getTimeZone("Asia/Tokyo") +} + +@Serializable +class TwicomiResponse( + @SerialName("status_code") val statusCode: Int, + val response: T, +) + +@Serializable +class MangaListWithCount( + @SerialName("total_count") val totalCount: Int, + @SerialName("manga_list") val mangaList: List, +) + +@Serializable +class MangaListItem( + val author: AuthorDto, + val tweet: TweetDto, +) { + internal fun toSManga() = SManga.create().apply { + val tweetAuthor = this@MangaListItem.author + val timestamp = runCatching { + dateFormat.parse(tweet.tweetCreateTime)!!.time + }.getOrDefault(0L) + val extraData = "$timestamp,${tweet.attachImageUrls.joinToString()}" + + url = "/manga/${tweetAuthor.screenName}/${tweet.tweetId}#$extraData" + title = tweet.tweetText.split("\n").first() + author = "${tweetAuthor.name} (@${tweetAuthor.screenName})" + description = tweet.tweetText + genre = (tweet.hashTags + tweet.tags).joinToString() + status = SManga.COMPLETED + update_strategy = UpdateStrategy.ONLY_FETCH_ONCE + thumbnail_url = tweet.attachImageUrls.firstOrNull() + initialized = true + } +} + +@Serializable +class AuthorEditedDto( + val description: String? = null, + @SerialName("profile_image_large") val profileImageLarge: String, +) + +@Serializable +class AuthorListWithCount( + @SerialName("total_count") val totalCount: Int, + @SerialName("author_list") val authorList: List, +) + +@Serializable +class AuthorWrapperDto( + val author: AuthorDto, +) + +@Serializable +class AuthorDto( + val id: Int, + @SerialName("screen_name") val screenName: String, + @SerialName("user_id") val userId: String, + val name: String, + val description: String? = null, + @SerialName("profile_image") val profileImage: String? = null, + @SerialName("manga_tweet_count") val mangaTweetCount: Int, + @SerialName("is_hide") val isHide: Boolean, + val flg: Int, + val edited: AuthorEditedDto, +) { + internal fun toSManga() = SManga.create().apply { + url = "/author/$screenName" + title = name + author = screenName + description = this@AuthorDto.description + thumbnail_url = profileImage + initialized = true + } +} + +@Serializable +class TweetEditedDto( + @SerialName("tweet_text") val tweetText: String, +) + +@Serializable +class TweetDto( + val id: Int, + @SerialName("tweet_id") val tweetId: String, + @SerialName("tweet_text") val tweetText: String, + @SerialName("attach_image_urls") val attachImageUrls: List, + @SerialName("system_tags") val systemTags: List, + val tags: List, + @SerialName("hash_tags") val hashTags: List, + @SerialName("good_count") val goodCount: Int, + @SerialName("retweet_count") val retweetCount: Int, + @SerialName("retweet_per_hour") val retweetPerHour: Float, + val index: Int, + @SerialName("is_ignore") val isIgnore: Boolean, + @SerialName("is_possibly_sensitive") val isPossiblySensitive: Boolean, + val flg: Int, + @SerialName("tweet_create_time") val tweetCreateTime: String, + val edited: TweetEditedDto, +)