From 444b3521eb7bc6996acba7da6c79b5f0fd7511dc Mon Sep 17 00:00:00 2001 From: Andy <88590076+AAndyProgram@users.noreply.github.com> Date: Sat, 18 May 2024 01:17:29 +0300 Subject: [PATCH] 2024.5.18.0 YT YouTubeSettings: add 'DefaultVideoHighlightFPS_H' and 'DefaultVideoHighlightFPS_L' properties VideoOption: highlight frame rates higher/lower than this value SCrawler SiteSettingsBase: add 'UserAgentDefault' property API.Facebook, API.Instagram, API.Mastodon, API.OnlyFans, API.ThreadsNet, API.Twitter: add categories API.Instagram.SiteSettings: add 'DownDetector' validation; remove wrong header API.Instagram.UserData: fix incorrect definition of pinned posts; add 'DefaultParser_Pinned' and 'DefaultParser_SkipPost' func (for Threads) API.Threads: fix pinned posts processing API.Reddit: add 429 bypass; change the naming method of video files (hosted on Reddit) to the 'YYYYMMDD_HHMMSS' pattern; add 'UserAgent' property API.RedGifs: hide credential controls API.Twitter: add 'Likes' downloading; change domain from twitter.com to x.com; API.OnlyFans: set '_AllowUserAgentUpdate' to false SiteEditorForm: group options by category GroupListForm: enable 'OK' if it is filter DownloadGroup: add 'FilterShowAllUsers' property PropertyValueHost: add 'Category' property MainFrame: the 'ALL' filter isn't unchecked when loading a filter from a saved one Update user paths when global paths change Scheduler: add the ability to clone the scheduler PluginProvider PropertyOption attribute: set category name when `IsAuth = True` ISiteSettings: add 'UserAgentDefault' property --- Changelog.md | 31 +++- ProgramScreenshots/SettingsSiteFacebook.png | Bin 27025 -> 27008 bytes ProgramScreenshots/SettingsSiteInstagram.png | Bin 36038 -> 41303 bytes ProgramScreenshots/SettingsSiteMastodon.png | Bin 22314 -> 25093 bytes ProgramScreenshots/SettingsSiteOnlyFans.png | Bin 29303 -> 31255 bytes ProgramScreenshots/SettingsSiteRedGifs.png | Bin 18926 -> 16512 bytes ProgramScreenshots/SettingsSiteThreads.png | Bin 25088 -> 25322 bytes ProgramScreenshots/SettingsSiteTwitter.png | Bin 22675 -> 25969 bytes .../Attributes/Attributes.vb | 16 +- .../Interfaces/ISiteSettings.vb | 1 + .../My Project/AssemblyInfo.vb | 4 +- SCrawler.YouTube/Base/YouTubeSettings.vb | 6 + SCrawler.YouTube/Controls/VideoOption.vb | 5 + SCrawler.YouTube/My Project/AssemblyInfo.vb | 4 +- .../My Project/AssemblyInfo.vb | 4 +- SCrawler/API/Base/DeclaredNames.vb | 3 + SCrawler/API/Base/IUserData.vb | 2 +- SCrawler/API/Base/SiteSettingsBase.vb | 11 +- SCrawler/API/Base/SplitCollectionUserInfo.vb | 28 +++ ...lectionUserInfoChangePathsForm.Designer.vb | 111 ++++++++++++ ...plitCollectionUserInfoChangePathsForm.resx | 129 ++++++++++++++ .../SplitCollectionUserInfoChangePathsForm.vb | 78 +++++++++ ...plitCollectionUserInfoPathForm.Designer.vb | 134 +++++++++++++++ .../Base/SplitCollectionUserInfoPathForm.resx | 154 +++++++++++++++++ .../Base/SplitCollectionUserInfoPathForm.vb | 68 ++++++++ SCrawler/API/Base/UserDataBase.vb | 21 ++- SCrawler/API/Facebook/SiteSettings.vb | 7 +- SCrawler/API/Instagram/SiteSettings.vb | 132 ++++++++++++-- SCrawler/API/Instagram/UserData.vb | 22 ++- .../API/Mastodon/EditorExchangeOptions.vb | 1 + SCrawler/API/Mastodon/SiteSettings.vb | 8 +- SCrawler/API/OnlyFans/SiteSettings.vb | 37 ++-- SCrawler/API/Reddit/M3U8.vb | 10 +- SCrawler/API/Reddit/SiteSettings.vb | 1 - SCrawler/API/Reddit/UserData.vb | 20 ++- SCrawler/API/Redgifs/SiteSettings.vb | 8 +- SCrawler/API/ThreadsNet/SiteSettings.vb | 5 +- SCrawler/API/ThreadsNet/UserData.vb | 52 +++++- SCrawler/API/Twitter/Declarations.vb | 1 + SCrawler/API/Twitter/EditorExchangeOptions.vb | 11 +- SCrawler/API/Twitter/SiteSettings.vb | 33 ++-- SCrawler/API/Twitter/UserData.vb | 139 ++++++++++----- SCrawler/API/UserDataBind.vb | 49 +++++- .../Download/Automation/AutoDownloader.vb | 1 + .../AutoDownloaderEditorForm.Designer.vb | 22 ++- .../Automation/AutoDownloaderEditorForm.resx | 44 +++-- .../Automation/AutoDownloaderEditorForm.vb | 17 +- .../Automation/SchedulerEditorForm.vb | 68 +++++++- SCrawler/Download/Groups/DownloadGroup.vb | 7 +- SCrawler/Download/Groups/GroupListForm.vb | 2 + SCrawler/Editors/GlobalSettingsForm.vb | 23 ++- SCrawler/Editors/LabelsForm.vb | 27 ++- SCrawler/Editors/SiteEditorForm.vb | 161 +++++++++++++----- SCrawler/MainFrame.vb | 9 +- SCrawler/MainMod.vb | 1 - SCrawler/My Project/AssemblyInfo.vb | 4 +- .../Hosts/PropertyValueHost.vb | 3 + .../PluginsEnvironment/Hosts/SettingsHost.vb | 9 +- .../Hosts/SettingsHostCollection.vb | 126 ++++++++++++-- SCrawler/SCrawler.vbproj | 19 +++ SCrawler/SettingsCLS.vb | 12 +- 61 files changed, 1665 insertions(+), 236 deletions(-) create mode 100644 SCrawler/API/Base/SplitCollectionUserInfo.vb create mode 100644 SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.Designer.vb create mode 100644 SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.resx create mode 100644 SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.vb create mode 100644 SCrawler/API/Base/SplitCollectionUserInfoPathForm.Designer.vb create mode 100644 SCrawler/API/Base/SplitCollectionUserInfoPathForm.resx create mode 100644 SCrawler/API/Base/SplitCollectionUserInfoPathForm.vb diff --git a/Changelog.md b/Changelog.md index 8f0cbfd..f87378f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,30 @@ +# 2024.5.18.0 + +*2024-05-18* + +- Added + - YouTube (standalone app): highlight frame rates higher/lower than this value (`Settings` - `Defaults Video` - `Highlight FPS (higher/lower)`). + - Sites + - Instagram: 'DownDetector' support to determine if the site is accessible + - Reddit: change the naming method of video files (hosted on Reddit) to the `YYYYMMDD_HHMMSS` pattern + - Twitter + - `Likes` downloading *(user settings)* + - **changed domain from twitter.com to x.com** + - Site settings: group options by category + - Minor improvements +- PluginProvider + - `PropertyOption` attribute: set category name when `IsAuth = True` + - `ISiteSettings`: added `UserAgentDefault` property +- Updated + - gallery-dl up to version **1.27.0-dev** +- Fixed + - Sites + - Instagram: incorrect definition of pinned posts + - Threads: new posts are no longer downloaded from profiles with pinned posts + - Reddit: bypass error 429 for saved posts + - Twitter: **data is not downloading due to domain change from twitter.com to x.com** + - Minor bugs + # 2024.5.4.0 *2024-05-04* @@ -5,13 +32,13 @@ - Added - YouTube (standalone app): setting to remove specific characters (`Defaults` - `Remove characters`) - Instagram: simplify the `Connection closed` error - - Users search: add 'FriendlyName' to search results + - Users search: add `Friendly name` to search results - Fixed - YouTube (standalone app): incorrect download processing when the file name ends with a dot (Issue #188) - The program is freezes when editing users in some cases - Sites - Reddit: token update error - - Threads: unable to obtain credentials (ID) + - Threads: unable to obtain credentials (`ID`) # 2024.4.26.0 diff --git a/ProgramScreenshots/SettingsSiteFacebook.png b/ProgramScreenshots/SettingsSiteFacebook.png index f21d083b1127d56853a6e635e4ebcf7e088d4646..a505f926b9e5991b472e99726feff7986b828673 100644 GIT binary patch literal 27008 zcmdSBXH-<#);3x;N)Qnc0m(rG2@(VZiIOCPN+=`;MRLxm6cEV>2ufChpkyUOiIPEy z0!2o0EJ|VlMZsN#cDMbW(|yi+$GzVe-;Wwnu-$v@wP$$dGoQJ`ZfPizoTfbufj~%< zmE`Y0AiuGK&kP|x_zfS#K^**Z!u5`#ETpK5ehGXz`9MZp1_CLKAwDoW1-=tGDcyC2 zK+ZPeJ||io^X@?))|ATfGTL6o$Z`J?hT*%D7^CV0mA4O7Qr~LxQpY`&zEgRpsBY}s z0OwY#y2|1*L-2VTvl3@l`_GiKoF6X}k_I$VIiyhEy-z%<)X;X-Emqm%H3KhYQVO5!g1MkfAxKR%&yapG2F*J!(!mB zbm72)+QN|vOdqUv#5AbQ6XkUY0{QrkH53AQI7lWBf!weq1ULOs_#`<5(nA|a2!U92 z_RGv>tRCL??)}`|Q3>C$-9V#5w~J zwfqKwykDq?EyW%5*GAur;go#sZ{BL&a+Y;}>4kcK4!ROGz%n@{H@>KQV7@nKKcuBSqXKI{}I0qY`~h#A36`ykRfg z9b&kb+?5C4pM?2*ujlF&1sYJ))kFf6Bw$bB=w`{6G$C zk#HrpKmuo&1jAzD5kiKD;s~A^g{= zZ@ea9u~}wznbv9!rg~F}4Ja=Tj~Y%nnJ-*LGNt(z-tPN-?{s~PbDqH#XNzYybf|qI z<7Fc=|C)e5!^yDINI_*XqG;%vv_$uM%wz0wbaTtsYrtAeT|U#wAD9@v4mlP3{J=*z zc(Fpm?#phI-esojey;tY8)QjB-1$Tb!?1PI=wj~E9vd-{!h@yeUve`awGnZkhZf$* zG#%9izO6o5MBIOwar9xWeDXQ-Z;%&}#4P*0FoqTJFGDi3OdnS5E*UQ3y{Xw)UlobC z-uvtW^k`uvUq&7_YJu{Y=Gc$`J0deqT=F{;j@1;7q#Q3Ej z3b(+IRHRWWSNT62Uq{5l9s-#*|70=3f7OF*k3;(4bAr=U7lU%Do( zkNDhrVUoZIH-$G!kIzuer@&L1R%1G!b)+?8470E`={rM>nn9z|M5b5nL_dJ4j|spc zze^d?;Wj?q?2$z>?(Dax-iFdr$}hv*pv~+z2U7IxjaE8_H%tyyx|g8BJYIA5_Nmyd z&dlD7gGSdtOrGTYq^olVUj59))UkZDgwqw_*+Y!~6F;MaD=C^O7IWSM0zwko`&IR9 zQ}Ev)w~EV6tX?0+q>-LExPU5QHitE1V9Bi}>r$%m;$R&;>0yDPef-nKk^QI0jfj%E z$uiws5a9)W1#EL%r*Q{FhXsXZb^9+m8esb~_^9IVqNtz47v~-zH`z)-jDz@T5r7Es z5TgK$9#Y8iPw|5UoDWj=`V6ZlY665wJ>6eo3;3H>*5&X_UESsn&|KmfTs|MN0J*7FLtk%$uJcU4uFJ=ex!9RoH~Tu>8|E5i>m67r$Ny8Dj_S@qU` zKQNEk1-tKF?Y*+H5odCp`)HApDXwyXdNxTM#`&DjBvJJ_Z^G7ro>d+(tC+_Ht1Wm1 z#{R6#$*8`!Cu1MWy{q^dt6^QZ>V5B(=prIe!exTF z`TQNa+@vj=ea4X)^^lksuu_zO&4;}a+NuzZJT0~9&$`Vuqw?xs+eV=OdNLlEAqxH_B_3SX*w{m>B+I>ZLP9m_a?gAl2 zb#|JzOMQ$ZXHaN>E05fxBmG)}qd?aM+uh5SZHhwAB>HS&@<*poY2Vw@HBblNYIgkm z9Y@h^jDj~6i)|-Rz4nZ?4b!I*RD2y1Ourd2yf-xCTC43-Jj!u6Y<4hNS)UkRT+mCO z>D&)G@nzhPp_leQ>{>McJ=!w-eV5-P2Q{MNENeW_-?@v)8*11 zypfaj*sH;a67^4rCZ;SNls+C>$8KhL<;))KdEtp|wSg#d%>L-k?F`3ac%54h%*uC; zaeIHlU7h6c=M&ZRGrN5_lX7^gD=B7~RC-fq?+&@FUwl#M;?C!4*M)lvU1{&^N3RW6 zI%beCr-(RKa9{F~@Y4-uzRDNK-`n~1(AVF--kEFs-I7Y;c~p6fq(}mfdY#n75MyDl z%)O!dx^22Qh{-gQXf1m5s6~8+y=O-J6l_z3qKO3)Rr6vo!f|Auq?X#|Ei%FPayJRr z>Ws-}xCh##TG27C*Ps9Ob>4uMDb8E9jmW&G9#hZuZHvEKfp&FBk8hgH?IYGYTsfa`iGB0y)+6mot132w$-9s8K5I;`w6TW#p2TR4^lk@C-kwt zI-AcQ3{7&|Z0j14^)d|%Jazj1O~!kponww}ayO*Fpt8suv%{3k6?&P3o|@12S)oDY zNU58!JXCqB^|1w(h;_4plq%N3dRkXJQjcuCo8fBWU>ox}+x%x}KGEXh0KowQC{jcl z7RmZ>sJ)v+-;<yHftbiJ&FiaJ2ZHf4?Nb zkqbKisz;~j{z%B#wCsqLq?jjTY>Ot2iyg9h69~4!Tsyk$J!_I`^t+pejs+`TImj8m z5AHLOUmcE&t0?2Ay>jZh!;(|p60>$oqElDLYdx9$c7@~*mU0<0Y;5Nn9uvQ_Mex?1 zi+laXZt}x8K9kX<-hp!!mh(FHUOf*K&b5!(JXxvKmXYW9HsY9ww_LRV;asj?|kk$Mh4l_PnKO{qWTSn_=GTB)ZEZ=ar#Qd$fJJ!(V;h z;=IltMrePNE&zpn3r{bs0WtBAm$^x5vO{#e9(HjQ>&w$pW)l6fn)EvAD*tC4Y$l}BM8wR?&TeoJ7QqTiJ8pM>oej~Gu>@_t$={brc<(2&XK4b7s~ zW{pcatouG?M(v&j$3|vxS`UW0xY|*&(#q3hrN%a9-MhJk5c6ziEBbtVj(^rsJ|P06$M-5+YJssjPYznspb=_s;{nsN*o;`=J-tQ%wuA3JwjwLWT`X=8US~W?L`AELf+A!q< zbYEPd!IhBJ>e=8sd~y;Z_8ZMms@KI%molfOIKwj&>q1VEkF$C=(oK+&Fh@&qWOjS1 zos)ltAH(ld^>DiK`blyj727?iJOEXBCE!>zH)0&7X?a0Xnu>Nguq_*RW-6IrfT6Io zRPwJC$UcSVDv-Up9Bxxj$ofK6fB!iXq(|xscA_BOUuz7F87j4|7GMY@e0}rwd49&AjQdLQOzypn->^MG*46D%PjX=bJTkWXo`2AmLRWVy$jR}9 zS`Ae>&xDNCd21CJ)mn}U1zRoldLZUgCYk#>*#zRVHJ+uh#qz{#S%({Qw`bFdUn6F( zf?WwDRJg5;5#|Z?JLE>(-yCI3Kn^ptbCbekjkjhvW|`^^f{iGv{TGT-CHBnr78Rx0 zQ2}UQP$D}d%za4`beU}=Wn}uCk%Pr25<^fh;G2RVwzBHw9ECQxI^ie?|YdP94E3;Nqe|H*K3mr9C& z9lpTmq#k>iV6S3OD3RdW*z${s>ie}JuL5>UW!h@%7oA6q^Wf=-)@|-aMS%**O6ps7 zOeDNh3tBxtZ4d+xm^M_d;ZqR7Tsud`Ge^G}x_1uaHQ~rnnAKb6Od%)3IILGEFqj^56gWS)L=@|57x>zY6_Je5+`TV-guo8(ffCylnalPs!5!k}GOCR#_v zFf}`@FBgN#=TtOu9A~TOvaV{(!o4NGUngj_?IyAMbEC#wyW1z=z61?VH07Ey0+!d` zR9NyFRx#IlAm4GbSSKgndjDtY%N(6R%zHy z1eIrPm5dqhAP+;LpQHu%r2f`obrwN852Qz-^sP?N_%g1kxI574Ld@A z2FQi|`mQYjhdz04sb;Du%iYBG1a4>tB^j28cKmc7;$XLEAfe7rO1_fS&Ha_98i#r1 z_|@-E-=uwMB$`m0t+{k3Qj77ue}wawa(s3N@g$Ck>VcJ}5pJ|)V~nq9dF8%XG$ci4&=tBIyOY=*qh9*P2b5Z}XiH z?+NkcfD}10>(8mUBQL*A1F2xF*wFJxGRf>`og2>@`ttUlCrYA{Imw;=bCXy@O?j=C zOadS`FlAf5?=^PRohMNit*_@=+&~VYRlqHtYX|O=bMZg(0wEwZfXs56JKuaVA1VeC z&Fk%NL8QMybRi%K(PJ)|e|7ogr=r?A!sW*MZ>@vcz+;^KY_c2Zx0)NEB6YZr_-rC^=;dvf zdQ2QZi;WA*mVE8eqx6A9l(>> zL#+t+W+^hBDIV>T&b~p{Yj)M|4{UHKMn7v+1a%~cn`2Kw(bG|Gi?B-xc?v?wC`bqw zL%%$ANK`Rr-;7o{r@ZMAvi3TEue4?h48pDgpy3@#-!1yhqS(<+rA zXWQdl4tAaC9$&$#&c?6~|#@88?xw|ThhuvGlRxJlA$(>NhKPS&Pe38MCayC|y z;clD)`ELXuC*^=hXma>ovqNiPf;GaVeNG+ae=A^bQGE7&hPNTF$)OGIqRyjy7&Pj6 z6rD)NRO6G*>gRL6l){EJZpt8N>0FOtzDiLOcS$Qa`o(=?^1GsCx`RHd%u~Jw#4&B@ z<;^OZ4+@F6nw=?lJ9f%_v%m0_?x>LUu7^7x?0l2(r1R07D}R2kIwbS5&7N%>^F{)P zG~W>xZNk@W;!}ALQ_PT%<%kj3TjXF&$W5=&UJ~I6t+G#YUFd4>N)x|7T4DdraZ-xz z#x=(YJE+Q**KPr!%sr~e)1>oW$>%BT;#8yx;8%4WqNxoe0(_m)iEnu5v}g>?r}BKb zk}Z6ftQVQAAq}y*Eb!=Ck8H1T@HslF)jKNcwZ!z-`n^V_?~@T#Jnry-r&C*w*#bkO zDRvGDEz%K z%dF#5rTq0BCO=4$$({$R({7Mcf~tzmZL(hD$@ccIrBki+IM7Mlp#8M0I$UHRWBkIo z7*C(#RP0r_yX?Ct*LyxTIfZ;Jht8O8U-_LiCIbr1LV#b?(iu|(cN zFw{qnNJn5&27=VQhEI)ZJ%$sW3aQ@*^|6OLSdUwIaA8uC&@4@?*`us$q1kcNpIAF> zqiZ*1#|__US6a0gkiWqXH}!4OC8sx>!8&wq(PCa@*^w5{jEryFSAcUA3YB)=IBq$wA+X#Fm$IBcA{kbZ)56r0iahV-U>0<*czEQ*|F#Y~6VQmuL9 zvuQ6k-K{P7i+p2S7zGF0=c|~Rj}E8gVS)4CJ_YRvOMeh=PcXS#4jHYDWnVPlR$ zTb?an&||vy)J|O7mv{EaJ=2d$Y>xKZUy$Y}-oGQzZ32+(6_bHev3#(-&l~HL0Z$}0 z7e{B`Gx@;%w)%Z%RZV=}ojbdHhM2Vjn@&c;R--;MvIXy(JXjEilmTdSHPY62YCxMBCBRPNnYUfGY3U52Uch2!1hi+kYD>yonpfx z&HnW<3@M3pUs*!`T5J4Th5TJ#>$se`{q>pjb252;;X)i&3V}qbf6h<^84M&DRglCK zZfAuv2i~-9KD=`RLe}>)AwoWif+gaLD8T2R1%QP%M`us9-09|7iSG|3Ziz7~GMQWu z<=fir#j7~#ZJlYgUD`gI8vA%i0P-JY9wLlQs67IQCAa3-AWAPcV9A&<1(+hj}X$6{K`{kP=paFWKF;!w$2HihV}~ z;kTRy?FX!O`Qvvfpo(SG@paLzhK*6gj3bC0bYLjcX(6>|CoU1Ptkvlq=}9~K(eXAQ zcIx=us&}U0ingniV^N?;qCn{37C)uKW@POrX{I{(9LseozYVnHgQ**m%B|It zE74-GHy?~4CBYzWjFd2+3n42E19hump9Yt=vxIuMeMzeMFdv_=;|8>2i^X6U?YKP@AS6#HNRo z!8i`3q~{7X2|cZZVY6)L;4I)05lw16aOFWsL356MA#`-g2g|+zqRMkZTNVP!qw8+w z9>^Vi_nDd%>gD|vVS=@4+H|{H8>rk>)OhWRIRBt1LNId%u@%OE_mB$Qr!WZ>t&osY z75^P-*|OKh zrT%^_b!MBmrC2I8zs_`ezu&04j&b1-f4|BCQX-2BvLsac0TdH7;rO|?cgcGZ4s+QW$nBQu`eZ2w z9*7hnhSKL*olQYS;yor@* zvS-noc+b$h{^*J16_LBtsO{^gsqZwjkHgWUwk-o;qvM)$EVm^Q{E>@?t7)uW^J%uy+D136rM?+9Q+0gQ^Q_>MY_yOzoKlB#= zj!gS!hXCzWTp87TnB|ex)N%syg%4LoeKL>3d7><6ju!UfD5oX2Y%LYG&f4`4Xw~9` zdwo$1De_t~YWc_&yc>8p^A(l3=j?p@n*9h{jO5PHBJ;H7TY#jpFDh4@Gy@$P`V#~n zuj1C86&Om);)`BO03UTK`Q?%1p8hI(%^_~=3LeCQ85{u+;sx0<_Oq;>pt5)~+q^Es zSz#X+U@#qx@gKJpx8%B;>@_Oc?7gO6>a3IQW1!INEpx;sFmscA)nVSKyKqsy^(#h= zZG~!KKSR^WBp~Az0wJJww776Sa%m(VJ!%lPyuB2~fc1mCWWhCmgC09nTYc;KHpN8+ zE=$U4B*?ieU&tgrCwS4rT+J0#wPefglg7g>BPTtgJV}gKG;W;lVCadJHG;wCKT1Ly zwWKe5cdW0er0-N_WM)8fjxHehik7+xqiHaP7tt%@lX@AXkTHVeeU%Lg!9PoVa~Zf` zKR4@?01B=#ON;Z7G2kQZI(Sbs*4!5!GhLinUeSiqud3WA72_{}y%Cx6{8C+0(^FV* z@8pb5%lC#S71aTkTzQyg_RUg!O%RN=lPZ(R-2@O?SrDRx^sM&GvU!88fU4%EM&^7u z34>VsiZ6xXm)0)_wlGs-_G`vS;4W^{s6xg_cP1A9p+N_trPH#VUKPc}%*H7nq6;M= zU9mM%SzX&G5wW79Juf80DdXR{&I3-LBd!?7SBq?ulM_7&u^obJrR|k=#dMXG=e|x( zI2ka<9v<%Ml8dcY^WN)^TA1LN4~X2@iPDgl9O#E%`s$dU2xi_e++0Rz|x!{gCD+`OZ>M-}<#j1I8~S{G}j0 z=YNEK89_TTnlp-!k~=@*SbTU?5I#r?UoLvXIwd17rxd3$fvj|YuPtV6j9f^W3mY8A+zB`fq!EG-!MUSOv+@Rm9ustJyjFxQ z)a{b$x%N7;tBC_-^5(6{vScUtj~(_$z8PV@+7)cQpRHVKAD_)$X65CK3UX~+uS1XX za8?AIQ+^L1#9FF$pEf2p4%*^^1ZmFjDrO||IVlaFm8RPFcWC=o?zQrF!Z|aP3wwd3 zNPkLne=R9$%zV{Q`hnwpPEGOk(i1OF{fnak(%DjWO+8O+*v7ZSe0u-M!gVv>J*nsY zk5AjbFMbkf&%X8LF)@tC-qWlZW?y_;Fx?&j>7moicmjg#2PRdM9uuicd^JODk&lBVQDUYP0vTzIZ0Y7AflZ&EJs~_2T7I%W9fR(QC+| zQp8O30vg?-yS+anTAlki}XX(~s0qaQEGjYL4=Qo4P=t(<{e!G%8F zP^;?W?6@2hYF0@hbm2ToT~Fz=&LeZx2H)2g#ZEl;86|aSD3_+P!%)V@jigpU*N;40{yK;-F)k#lEs-2j7Wu=Dwe9G6 z1pKAsp?CF2PL%wHLsS1o2>9P5re0 z;o-334=iW;0ieq~_8_HnkL<5uN}E_}3M;jdWY$qB9_Rw49JMA^_il#b^uT2#kcX^Zi z)0C1uF|F{;4uPO`JKy^fUlViV7M)dF>FZwC+h-f7R>aieLrfuHU8m)4GC=pmu4(98 zkO#b#GN0d~FCG5XrDa75vW{ER^}I3EubNX4ooZespJZCU_Lw$=Pp-9G9^vM)pz;r2 z_eHmJorOdOfok$GOI9?uKLcGZ*Nc8+FiMwwpZok><6t}lhaa+1eKuYT1n~YZ!1-s-81n;*kj>{bxQiwL#)&%SqDCdwsZao2O+GDXuP38@~ zFmB#ZX~1^a_*MZD3a?$$Yc7IiT{X-xI5e10LR6ljo7vQMl z`@c66{}ulT*>olgQ$$4JL0*vJii@CTHlRg&xOWpgdRh|j#BsqmN4~F)4&__FrGKn# zQWg?E3;99>O7=Mda(|;^^RRdv?<4Y@XGtmUip+((9n7+#Cm!Mo8m==mKMZZqMPpf& z26#j{sQR@pTwSi}LzFrfEM}*xjwoN^i_XP`-L27co@1yL<52;v_P(akHO?+qM0iyG zM*k=mR~PX$fvq*TjZvGL^h?&PdI-?s4a`pKm$Vp&Tt%FWm_y?ZgEHO^=~6=L(uew zqZ00E!zYeS@%$el4BbyObcod7AA7iH364M*x}zYxjC#8Qv#a3A-G8K zr*-O0om{OPQ13bxSoCbeiFoHN5-CUN-4~+hp?FV|W*c?FMh=@XH6MBr6vlGWXAO`& zPkfPsq};3!U0(1|C_^H}iniSC=xt4ZTf_FNp{m2o3@(ekLc?lqLT_?)KkZjvu7Ep? zO{l0H(VVF~MF9|fF@DihxsGv+XOxS0dwK1H8(cG0SLl#4#&{n)a75L?Qvr>rGpwH~ z8xzt~y93TQYAx1ZO< zC54HtEVpXxeF;r__;pO&VL$oX%XpVdR*Q;9cPU7y{|9=XOpri2awb?r(>G!a-BM%G zdL-7^8^GuRJMc&3j@Hqr3#hGsH^s0yv65YUZ1(9%9%t^zy!i}XD>tA_97N}cKn4bDI>6A7QjW`m=?4j%z zdwO2}C}?@!ouZ&C_82qwZ7$4?Ts5iVtAAigZ}UwqG!IhXEMMwZ%jdrK zY2*r#ze%O!t5zYQtx8$9``H_3l*h9jN1r(QR@uin%sXbB#A4Saebh3JF2j}|3<+a* zocEuj^$IG6q}GHX1%_ZdJ4k6}`hjlBPPM8X!GMx3S<*ao$mE?^0YrNCvv_akFFz{S z?^A0WelN@HL|)}y{m{L$*&yT8xp;xyFDgKZt+L@X@ZyB=0w976AS22p=OS~DU*w^u~- z66dI!A-r?8k9{)NbuzL)m(}UNH`~Q z!wfn@$Krh%=pN|R`jVQy2FDGka4dFk$(KsT#|V5vsPD{_LHDb4qB85H@~3q*Zl;;g zJc#r_Gk#RV-LrNzrC?8D693ag>8??C1G>XtWAS0qVcxJ*@v2K%GEKD}iG#(Vk*#IXi77+oAGi+(gXINSH(=MZJHX+t58nV<@9t6g>*Qb}Gz; z_$E~L3)X7ai8PXtK3lad+hnNok zb>u_{#}(=uQDTfI*>Jr2Hs4`$Jp@wl8_sQVq~2lFC_tU8NbikIdk)R?vTB(ir3*KKd~-1%P-(pSxEHSjL`0#Z0mHz=z;$k)Ws>5->B@hR z&$ul0UHV-oEK!reeCNrr2w>T^KRnc-K2_XP!((lX6Z9_Q{V_YkkaymjmbG^>TN@uJ z5VF2!)y$az{KgibT4JS?b1yP*#|oj!J>LWB(LJK)sY)^xa^C%V;`Ky!xIkPJJ!#`( zCefSQSAOU^EbD_3W81=%z^gEQvhl9VSON9x}t4ohyvdt19?q#NZ_bigG!D-wbCfxr7!bxut#<#=H8K+u|I*!)FdAO8 z&z)tz#kOCdIOpX^%>I>bzvOq%b}f#3wIr4<#HT52O}#Gr(&J=seUxC-kW6U z$_quNiaN`_N?B z1Yr6f-+|Uo4UqGo^Vf+RlZY?d;^Tvu?pQCOJxIvZi55tJ&*9o$g+)N+=Xma4inf0S zD>Aq_j=TY#Qq;EkajR@{Q*siN^QVAB#CKIBTZ21Q1P4QafI}5rq|@QC4BO6R^p6$h zpJC0|Jqa^Z@#vJg|-HS#DUiHJ9>W6r-b|NIV-(n`a4p z1-B-gP-f@zAr^CgrX|W{_q$oO-`=}aF?SV@)ghKzPZVxcq#dZ5xfaOfb<==)jcX6| z0$8SA-UfM3533dhL`2Bv|13o)@4fYOe!d+4oTKmS{7=~z)1m=u8!-?!vQseW5E#YK ziXUCpmp-~ugDMIn{mHXD>%;lAUcH6(-3p>_nZAE&%LWtH$c>S zDpc>*g~7ELvn10v0_^zSkGmuxW_9>Q5}n!24U`PyMbV2~VMU20!taxuPTwB#@bLU8GA7tJ5HK^4Y95T7Tsw8P!V+RC zl|)<4nrSxM6h;wuKgqD#CCBhYZ^p~(Uf*B(cgCQK^gp>WXwa}OGpaCT!8c0YE@@TN ze(xm~OB><}2mPtvH*O6bY{lGbPm6esN;uSr{SFXsi-`GLRy3}~Ynl4ywv4>>pQ5Qx zyMXlLuUCsY?pJ?``-)>6A_b3~iz^6-H_r>dKmO8JUk7ZSg1q?=@`WTbQb@R{PZ2gX_RF#e^Xdv3uHxkw$yK89p3^ykQ zn*PVLPWM222S=g=G(dnvryrA26PCee9#cvpRvrv&wY%H#Raun~ zLX|)sG%@l$iIXE?)cV9w}nr9+w#Nv}?vxaXQYhC-fp&at@aN|KXr zv-$zLT9|@_W=$f;AJd)X_8FP-Qd0FUIZmhB^41J=yZ#}aCce;Eb>L=S#|w5C9 zno*a5Qa+I2L8l2mBG)CRM&XCvw!zLA4w%&mjJ;yI2`H9$uFf$x4M6>y`LIF-9HP`Oh>_;KRJTKv%0!JGJ? zwE5M)K*jQhjvWVN!F(_%(-Q+TuIrJ5y65v>yVWmoQjz{;pmg77$MFG$Lyil0kS~lt zzsQIodGq!3ac0e#JKVSf4t#HbQ!Z9o0I|z)@c5aId)^A$4yvhjgK+ZmH@XoH?8THZ7h&`^)xAY$2 zc3eSS5A0J2P~qih!q)8BcTjiPp6LoZJGwF^&ql5rCm(DtWyc_stQLA6OM>O@7_u3 z6$=iSphl^GpDk%O@o#}gQks`a7n-{U2FN^l66zdMzgu_*Na9rP{eECV^RJTf&vT#u zPB3_9%HDeMq`iqJ=!Nk4RfQRhiW}?oy21l=)iVrRcLF2uBlyn*pLoT~-!y`)sBvzH zS=%K$2H$%{x4Btsur6z3*N3ZJbL~be)PZpO0bbjDX9`j!jFB{hk|k7oD^RZWWQ@?~ zPB!}yw@hB>g;Z9xezkAj`dflC@|ga|c$+mlhDY?9V#2MTF*F_yFB|*d@5>x~IZ#Or=g{GWQA0r)Giu-5{Tp`l>PMs;beap_ zMT%B}jmZ+1`aSq)lij8jxewaEIp#RKCNNduAZ=hflH>{0HB@*%LNy-^>>9u;&V0EwZ=2 z@$JN{2?ahEX;<=*fKf(=;{!3-5v|7&~$QekOnEGcms#|#Xy`{O&4;?kGKE0~)6JJ(5W3O{aX9wdgY@IW$ zP%aSW&L8I?_kkZ>`66SuzV%o1$Ql^&iDi$hahUVswdP2WSQP~19`M{vqknYrWPW8b z>lH@28-MIP7)SXg>N+1uf8C`CA1M4rJT_*PQ|N?n<08X>N+K)vif(`vxm$^FV4oA} zy>?Og(h3!}*1O&av!DPoDTqm%?G$YuR4kU1;3NF)5F?S$lrFM5R_4;}ao=L`f>C?N zVVGwD%)w8>l>zPTRUFU5CsjX$P=FeoL#VTI_{O>}6V^UyfCBtov zXfYXr_}6J)d?`Go3r@!8>wM)vl){Ph0sy`&1c< z&h-iFs|yw*0DNgPR%)&>RsKj`i zb-t}Qjqr6M-6ghB47L9`6op3D1ZKn)>k7tH==o3&##|Mn$mwG~FkYR=L(E}yWMiqN z$~wn2t#=V(AwRPs515IhshM^@Jn$ZVcR!-Qq}~{(#K_gmNF1$nBn>7jSCh%^aUVVX zX4b`hpOt2BrmCVIQYIyWfs2if~e1dvWnnxqXz{) zK2t}*5`{*AFhyb7_i^v}h}nJZwcC}@23MrleCkGe#LR^Iw8iW-!e`tvhgIM)uebOx z^jVmBMfev!i6WQz!@>`q=!n=2F%z7nfBN|Gsp}rAFZ_+O=bq?5!-zQ627cf7zeOW8 zo_;4}37ECt`!Ne{9M?@{u$4TwB zB!0$RYMFb@9hZ>VaWQr&chXgIJ0s#5s&Kk2lY?fTVH6-8CIkAa}2GKA~IGNh>umr$uEInfwvflcBNjws2ELO zdIG@2iZluDzIl8SRYS zUn_(}7Oa@pD;{tyq#W|zIzuD!er8#~m8m*a|Mb28$mvB9>azCV&})k*B&X1@GbId) z*aDEv5g*8{8_UANs05ZdHrb% zvZ{`eaZIdZI}u9=PBCpJl|ahMEj2#sxZ{*!gc5A z;Cpx3p+$zA&>LGER%aO{tV}j%YV(5+j?}7w0?5o4f1!@ArjI%mWtj1?9C+x9l0scR)fj8|QJS zJ*)MmlLdv+!=xKzCoB~NN-eGXOfKma%FG5x@p-Nl1lT{k4!ZZ23U+}c#<|L^4iDVo z$|@gcwSG=G1xsLgH~lS!vJPblw~y0k4Src*z!+oPU8jMp==io<1dDqyQ;se~>(+T% z%vw7Nw{Zo&@Ps8`+|jq9ug|(ddcc?%KX+XiG$SKVqXl%xXN{$#&)JH^S8Fu&Dob3b z-=849GGb|hFzjX&L3)e!+QQ%-#qfOexd{`|Xc*rIT;81XT6MkLh1bJ{J6A)PaH`v9 zO1xZ=PYc$3epX)XSHJRg`f{I{dVAx(-;qC`yqlV-()%&Pd{L@eW5!4Ue%Qhs`0g1BBZ;w;lRt^&!<(_EF`Z(}?yf;6#ah-zW z0_?lLLxyJQ=p}aqarYZrPgE0v0leO{nz{QKy#2!E>>x6kP}Tm<+}kS0iDJ^g`4!r^Qi5;Gvn!; zE#Gw*7v1u&RE*bEAh9N|H0C z&fZ+1-sh+~=3HOwYu~DNNtME}HdnOUi2GVmhn8c0o+#g92Ak#B_w)$cnX%aEPeJ35gSmg66tez8!`OZ2A?*A(uF64nPFGJY%s>Uctz{vv*_w>P#s@yc82J^ z`my3G(mw>)K}vRa&SFM-UcHi;O!;OmWqG$0dE0ZM%~=?dWIChEcXNji3>n`{6W8!H z%GmHXw%Y@02h;nw7WyB0I`-47&6=HC=~)*l9%sIKb@WxZ=IR}P-iucsJx4ZHO6-qv zI}o$?O){A*4JEin2&}B-tTA$7pNu~!6~2$DLO@Ec;;0wt&`2#Xw=s%eTDQO%K7)NC zjBTG(?`!t;cW8Y4tfqa^v6u$h_@p+YL+*`Fk?nEcTfE5N($tGX;YM_?@8YRamxPNW z995b)xktkfxksA~pqL;xj%n9pb(79xz*Pe|(0?i1{%7{+*WhfWy;@%+u3|?I`RIp3 zXFq@y{N%IIt7Mz+oYZ1rwmESo_ff8R~A zH!G?@JF571_U=G213I!_$id}6<_u<$x1DBo5qVw~uVPHE8E-zyzEpW>t!fehudsL> zmlIYwu9dn_L`esodsC^Sol3o>c}~z_E1jaf279=}Xj^ob=3*5!EOJQFLlCv8AD(a# zVuf?bKGRnQytJZ1URB{hzTY0C1idPF`+*U5h%;(Mb~QqO@)1 zR73fw?LgE@kxAZ4F@nBop*AiTdnL!^ORR-gMntsW24g-;AyXT~bnb5q{r@Yy2Q5$8 z!Lj%g2-^?Y7}6p;ZRx~>gcgrg**p<;pPE|o87ha2oqr54sPaDaYE_JS#bl9B>yG`5 z_AcFS3MYJ+5Ce$%YUa$j1|=iH-sH=n=cR?e`d-U&@Rg0Rwpw(2yx5^MM-x}0JXt|H zx#Kj-HvVN&ifA7*ge`ie|L%PK5}M@4^^sXU+O<*3(>2_`Qwk71-79?r}$#= z37F~EjDvA`qdLR`UPC2Lj?L*8zNkvX|5M7f$3vO^?deUYm3NfYftW&iH(4a9$Rv|f zMeA7WxRi=e6Gp~^|D(aJzs*D9KWlJ{=R+xn`7jcGn3C41F`0f66TXd(E=dX zL;ve0)K7_mVnfREG*AI8QqQqdJ3E-dCwfFYfJD*V8re!KV52gB8QiUipMv|2F!`T( z5i*-#B@kB;wD?_D_SA%x_1A<2J_4MluK2r6Dq)*qm%)zze?q%u-MG)-?4v=dO`vEC zZ3o*Rg#Z0(LuM1c9OZHx_EL9YPzS4Bcbz};?z|#Uzof57!~gtDL0|BJ;1vHUxCi|m z!O6KHUCw$$5K%jt-AMH5btkw_3kZO*%1{agf|Z`dVEh|j+P*9?o>I#X@0CS_`)W=- zf6OezUovxEHTgmoY2MUHE5={!c1-ZP>~&mfr*kG4h!T`ub;_?vR#s8(vOqpzW(uE{ zqU8)#VWpnn%~;1>zJ*v2J3KSh*lm>%{Ta#Wh_h*IO!>4gr4!~*YV+)c^0-GWf1;r( z6uWh$U5NKH;W*`o5*3Mo7hp_XhWNXG3ioaIdR{z?HrT~m;P~BdcUz6+F`HNqp7C&$ z^DerJx&yB%La)ct6b!-`rpC{~TG231@K7)_u>N66z;jd=)pj*eoMoM@8QQAZf^L~& z0@AC?`=jYzhbg?aC+w)O+_S9_V|_D^hKylB;NRf?LX^);bqCCAc2k$=g04UKVt3-WUr+!K2%%AI zYs15>+PC8q94`@2|E_=JV#`H86uSQSS23fWhrnFyQ2rhNC>HW4`mO{xNieY}z*u~& z8uiW;R=53Mpa+YH7|&~3?DV`sW5R)z(!HJsx{1bO-fPg9`a-J+XzDL76O*52Kh6Oy zBHzc0+ClW}WT!QjL<=RiEl@EI#WmM&>3Q9wp89oQrD{)w)4rTa$QQCQQfQ&+4_O;! zmw`TV18@j5WPrW{n$>I2cXtazILoX8UW}vLASnC%WM{FZMw@!{nEAJ7v#ksx&aHK8 zc?DSR<;Ueu03XQ#>2h~@y{9Kxy=J5LqP>Ns8D>JCSD{di$O>T7Pks-7W;LVX98vrx{UcILNkH$jua@dcK-*~?jG->meehuyGD+SX3q*kHzv zq|_p)oxJGqpu`pzvcMF*dG+R=;+lb&yRKhf4F&WDAiF>TKTDD_m9O_ z0}s=}+vj9`^4t86y@cIxsJGBL&g&gGS@!hQMfqZ7ic9oEejZJ(>AWbE-zNAHw{IMr9VeUKd}#80p{9bPE2iP`))%EhxY^a5x`v>u z{H5OEtnv#_8m$xDby|-iIhzd4_c-kd=w7Fq>SkDrvE8~WYsNk(aD?#I;F<|Ln!tTq zc7Fq38KoJsF8(xB=D1b)#fofq_HXFB?7F|^U04=Y3x+x zs>>7#0b`5YHGcm}weL{s1dd78Aq5Zwu2jbj!=$*CNCPvlX!3#c%=BN|^`zKP1N`!; zz0xAIWQe3j4Ywmz;?vdD1~6V7iN~Fmb+a(EjK=1A1Y9a!AkzJ-St9+urvS{II<$ zRxkTX?&jb#o-?`Yr_TZ-Y%me`6iK=s7!&`$@Ur=#hag$xn~?kJ4vXK=|Fh2K8h3 za6+6N$Q61%b(Q8$6 z(Om>PCu37wtTy(LFTy=LH-l?^Ja2L!!9q_m5G*Ju36X9ETIw06Exn%REvhKJtE0}< z^u;Fe_>>h7eF3>Qyx?t}f86n>oHcp?v19;4mYQZ-NL#1;hb-0PN5{B-7k)3I zihtk}eFkJq3%W{A=mY=H|3q5wY!8qYXajm5luQ0uINbe7U~qElvNf?^ElLQ?m#tZU z@I8A#3;4xhcO<^4G{`HyK-qZO0e45Z36Scc{O$iL9d0^^a>HHHs|oEa3S&Jn8T-TUns1c<3G1F)K8CG$TsyaF&S>Flz_o_7iwELEuhTN5ML9MhbO!1N3<6R zH%Rt30pYS21@=+!@i!`YnVZia``vh1m)CylP0mM^eB1dFg#sb1@~GbE0Yunpn9nAF zSwRjwl92X9KHuPi{00BCmM2kAm2mKH7aGD3d*=Cq`aSCc*x%G;YqS>?$SBjox#FJ( z_18939Si2NrNJrqWQW`>#mO6OBq76-S!V-VDOEMB3`-0qsswM_mX#4%T7y?shWS7x zv=7kv7uL$w$f|-pgP417aJL7Zd4Q~Or>kZ05$<3lndsvxw}c(D9e#U~fFFp@rOw$L z#m!|A>pDBM@AaBIorCEXfEVph008O3$xniqMPb&Lq3-XfHTe*__T2l&obq8QY4$;2 z1^|&iI*uvm^DIpCAkF-bjxD%xXCbazX1~rKK9U4&fooAfv5<=FDB~d|&!Xmm3GEPF zY!tq)l@Vz2zMQH@uRzXMpjq=ITQ(pmNSXbFGq@A)fV&+e-GP2+D?I)7fz(to`70dg z!sm%ycjkvRN6LsyH}u3g3Ste6iST_Jdfpjh$*%RwtR2=is#QPCryQlG zN?S4Cc!)21+$cgs9Sf*s`J=^S7aH)1u#Q3~A>|O(ZBJ8%N(WV;=r~pk}0}K_|nO>`x5Sn41y!zY2FO z;ti$V=3OV*R}m*0xxHAn*eaama)eyK*)a&0TuA4RfB}(sRA*`@PJDt;jv*U+*EbE> zN*^1at#6)zBX_iu-pZkA@js1qlA^hyrSN78%)1pMV&t>}H-j!=QDx|1b`nOTO8DWT zcSAHPEnj@A-e@H6#kCPzo2KituH+bq`FT8AloSIj7DdjO9hjL*xEo^_@m8*3f?-R6 zj`5_*tfX6h=Z0Ov9}1OFgWBdbeY5Bg4#zy@{8q0cp)DlU|6=~^+ z@adNs@_Y&|i#$DEz#SvMlSKv{S8u9t#)v%qm4NB3lSbYzu@iI}2J)}V zV76askQOXyd=UG!DMP)laOM^*TV3oPf~jvgfiNb{0Ux^*R^JHID6~1pz>nc4okO(J zBy4&{A4bY)#fg|0f3xQG7-sb(!mhGpOCO`9ySzTVuT~rD&)Ly??cKXx|B-S&@qJ;K zdq_#q>V1uqhsy@s!h+=mRA&;9jw~*#sdhyFUUjaAeHxtT%2w^0P)QPXY+ft3USgfJ zJZ-Q-eW}(q1B{mfPZq3_%xeF17Yv8f!jiHu>1B#|%vcyT0mHCh*eAf@Qmc(}%e|5C zp%u%c{p;gpH92n%48o8>iC{1im zLaZ0$I8!^=YdDsSb`32x9F2tcp9A4RT+ejhR!tf<+P;Ocarl1u+|c^g`aZgQ#a8H`K^zn%n;%fdjV^^v=&bXDnhX~r3Fj3DmR{B&yV z2?;Hb=t>IVQ5elSk^?>N($kMlqaxr{O|ge(Q;~X7mW7F0J60Y&UqdQE93-*&7^6t( z*zWkK5spYjpg(-gudCUfbCFWV**Kv*oou<);S3$v6_&r$-v^vuXK>p-EJX~h1NZgb zSt@#D*bpgJ?fVuHMG&=n(6zae%w~#Y)cX);4Q6@$p+K#>>>{73r6uaQiqqSC#Kl=I zVE2jTxhnK69z7&C)%i3;S|et*j6ufAbH5o*SF)6d$(e^aQK!X$p4v{v`ACBTN`F_1 z+*)s$v^*Dm?{ht*TrWShd?}DH^^NlFdv{M%55CHWhLlOq2xIl+NVRBh#bAV-f^GU=Iqh+)GlI>mJ5z75}kR>`%DXAOgWJGm3>1>rbrH+G1PF ziO#@X@1X0WCo*HKRHcKQjMVHH0bG1T)CHELvrW$S`R6x*6yW2LlYlXKhexFQ>DV$1 zJ;)t?{v2@IS#tjT^Le_Ct+YF}CBZ}NE9g&C@1SS-I-AG5UC+=*iW<0BAG;mMM5TH}E4W_%+Q3#tSv>1+<@yMyfc<)a5B}_-P>9CZ*{1)9lg>-3G}%v8^>L zD@@OxlJXC{++SW%I!U}jag)M_u&&@4<|~6{X+aQEASWYXdJOci7~cg zsc#cg3;AWcLM>(Z%mWCNyj*d8i=W)r2XZzQJynuCH>TXT?p305-071B=2A-@Ce7@c z%%~E9bG=HV3*BC%&BtGxt~MzYJlsA7CjbxnN1%rwkVk!2;owQ~mG5r_WlK*a&F?Y0 zwQ_W|mDTK6uWW82CNcXX(%aATclIYlT^B+&z}Fz(VszoPbCTj0_P-&$4claC2fkLh zNRZMV0qcs`wdJFj{);pTLPMkkgz1?^uQG z?@cPMgx9(7>u26hDE0f)c-8>ERzYGSaXx=L@0~=o$87s2fgLe&$ZKUqW)NO3B4#`JoVBpzrG}-Em9XJ=R25BV^F!`TW}fzx$wll z$z(sI&cCgtpi-piOsMxa^CVQuvvCa*wy(V5d?wR=t?k1)wyR+}@j<~A{3%~vQ;di3 zWt1+nZWe?j#(7xv?%$|!xkb`A+tgU+@_-(760F{%Wj~^3ezKH6F4&0ns!aAJsH5sQG8hnY=S`dROIp88hto~cYpcGVDyM=XmY^o#<=5Awm)r!F^|>l3Mg z6NWNWs>zdb^{nv;%(b? zTO*;uxRbdyKH={3&Kt(EI2@HZmBS|Oeud9Cc51O)#JGeT1{ObjoWKJ7M#h;?@}x^F z#d5>T*iWSjHXXxEx}9GHd?d3sSeD*SaqJ5CULQ(P=BahBeW$XqM?mZUrri1Ac?A5Z zEuSBPU>%7i!3ytI78n^B*@$sn2Uc^_F;WY@D`}WZU3|7B;=&Xz~zYhX>zt45?9}gzh^Z&92y=?y^iy@HTdx zFO$X}mp9&L+I3&3&*iLnK#QbD<7a=v=_A>dE6am|0m9wzF691dkQTJNuJjxYp9If2 zb{MHjf2jOxl*dgEdrGrto0B=O&Ce0>Z1R^gj~{24&t;$WwdbbZt@2lQ!Gj-qP4L4dhYo;l8HNU4xv&xK_z|@A@>~fhgaW}L@;cQ*o#g~joE+pXzE4cUYTc!tq+u&gncsxo;Z7Ffh3k~zxh4k zF^MKoCHQ>OgMHQ2E!N>%cN}HGVkV2TkU^y_8%(IP$)QF>F{(sr_Z`u2Z3%6%Np@nq zeJorqL3~f zRe^6p+7EsSlJ^(^o?NxQ0K0s}hg3>i+id9*2Q8c+LuU2MQTUvym@47K-KjdNTY7H@az5@*%PH_j_QaSeX6G4&e!I71pPkSuf#o!{PR zU=kIDThZH=&EF}g=BvBVHN34@;jvw0Sb0Aij%`kRsRF-0f8+L=VLOhO5Oz2yB^%N5 zjzJGIBbRBBH}7WgGHdPig^=?P8+P|Ep!O4G{SS9OIj?Ws)<<{FW{IrEPOWTAeRbf< z-kffgw$kgbspxNBktd#SXrie1N38t`(A0_0Iud5(p^E}fCtK3QwGD>zoK!M{GUW09XcbtRNPq&VQEXSh;jVI`#V z5n{_e>_mvJAEG9P`@Db4lZ85gv#HVNeQW$k49gZfA6hc)3`{~lo3jk8$Xc3g(rJj8 z%G9{z8!uh=MokXd?QOmqtjAfr+dnnyO~1QuH0Pbv7U(uqh(cS$o^x*zS{~ux<)&tV znLL=SwDD?AEfU8vx~-3@wkdke`|Li|Ni4{Ll`Rb-!&xO^^w|F9N%1AOrGD6$w%+@A zVMf{D^M!{~q*5$dRTCq|n?nqsM3w~57%Hilv&>Xpp5d^RY|nB2aARf6b@%GlZ_ril z4RPOCL6f-0*3&*BjZC#R+1?8!`GwgL=x$_&ZyIBypGjA=WVqURu;-BF-biwG;qzc} zH)RVubygVr@u@ue8&8kE^-?J&Sr-#t>A2y;MA_;&h32a z{kCF{oxbtpHbSA5v1Ubf&E%W$bJ>mi4{=ZD2KFA>wQsi2@yW>MTfg6&76>siU52Nt z4;wI_oz5|j+P)TUnuO`T$C{}|J)q6PPo55fO#^I+CKM*{^mXJJe^Oni?JA~_0+y9U_Wf5qfjj2p^e|R!!gre@9Z0f zEYM`87zh}(hK(6w`fIZ-?u?ZzH*I_fJQHfVztShDo?kO(60FgSoh)qaimXCgd>h&A zByeb{Rih&JT+Ya|?-$R`j?`IvIZwl6Gj7sOTZPRZOciXsonSjIT}C$upKLnkJhDhQ zSE@yPCnqpxdFk`Mv8ImMl5>M~8Jc^sTdDV9R}F@^d2`^-?#^Rt0?Ba4lag;ATsndd zvPizKGWCR9Dzyn(x}XG}5x-C|0xC(#5dhF8vke3|kos;BHHwbG1No zCn3Enr|R0)^M{aAOSP9TFogRfQo>$x&`otEMR6IFw(P9WS$@n=cHCLJQ{jo-c;s^t z(NdkvJ6iYhmF|7(0pyAr!hZonPJwBPiiUJraKN5+3+iHPF`~=E6Uy|ssI2|3*0B*e z7euxzg1hHpwT zCH=(#B-}WEjy{-ArGnZ%Z_oJC?#fAQ4J=2{8J0r-NlRYn!M9|w?TPS}AbXGNeR&2t zrq~Vocm+5GWpDr$cN=(RLAUZ;N)FSG!>F!1+`{-O^rDcTQJP6x z+i#OwC_k?@X7*{$#;H&AsidT$+ZEU5P@_@LZ3nk?Cq=erEYyqrOR`1#A~@hvEi1pl{k!jXN$ywA124WR;h_oJTl*NIT5`o{ z^xe_VCDu_!MDiasOYKMO8fA6l@0a-G#ki$w)2-=+!g{p&a2CX(`nv#=gZmHScmzTzIDmQ6i1;g&g&17q$~DU ziO0NHa6JB+UP&@_wWFKEstfBjvrSps+oIPHHN$Nn?AC=&?unlw^FsID>?U%z6q+~BufoJ~MV3xdhVBU{3o6E$ zK-r>FDLwf(huv%++Rr{+3dtC((IZhJV7XRdN2Dq7PS{FPd`WUwhl_j3AnHrWrRf~< z7uKm9SB}`;4d%e@x?j?$c3HJ#T}jDH_<*I#udrV*h^R_(9x7>mU{uKSPGC}~Cf2N| zm~}@|iN`N?%Y18dMzU_)DD~XZ=F4iq^c^fkU4CNj8vUcZDp$#R@BO>YAUf5rd~sv0 zN;hk-nTxL6+OG{=`9hbMyye+Ok)JKZm?P;7Gn2gHv>1;JiuSoUvgtX(3ebST#Fu=! z_}kL(W(kKe9}7Je9h4!P&eb(?{z}TUW)BZnV`>-)JN@EzD7@^pO;z=Sn^%y#UT_P& z6#If@@1p|HDzdkd%tQ=)ks?sF+O>4r;D=dnvczgCj(04BfWp zbTX#=_mo2mNbs0JPaCQxfB7(_iC(nCr~{c{l`b=xw@LERJBcU~6sAsJ? z8B|SEOltJrld&jaQs`}p&Xs%wsnl^IJ|*~IlA-Iqc#P@o{b>GPzm~KMun!l{!2yUG z=(-GzIRhuq7W@7b{GgMcjQ92-NU|sY&TwwHr^c^X>J)>|3na4NeO-a@Z}{II@!L;o z7=2FaI0FYq;pQyzH0-cO>dfw-3BZL1Xsu8ZCcw3blh79AvQq*GNh8&vZWn)EiWgyp zlKB#Bwfvlo(Wmhs?J`>Woqdd(+Z=bb(FU$VqP^W@&vAQqN|GMw8;!^U$=>0*-EcJ< z8fEm_lAVEFTz|369^;oD# zGes4fPox^e8?ebU)89suDl)?q*@X7`@zA%!a25_fIy#ud)kbobsG{JWhF5pXbChrO zhG$Y(W?}`GYm&PcJJbQgjon;|3ZfBg8?Ar7AkdYqk!jH!Ok3o>X;<~hX|69%p>CTZ zG(G-}IUZX}MGDu$C&En(Blfo@Td+sawO9 zSlrWuWR*9Yed0H$vUn%mz5+%bIMY@YL)|Qcd=(ix$mAb+t(jt(r{kpcmU#T}{rucp)zhS8M%18L~Rn z)gH-ZV1e6NFS_%QMc8wvc(B&f{i;-iFeUUlT4`dqL7y0&uI$ZxK{eHF%FajYi4_WAHzGEfQ(usXUZYx2P%>In9z)hPy5)8x zppjHhQb_tDIfRj=p$`RREaO`$gy|l1Uh}jaft-Q?7hA|wfhT(JxqYs3U3%oPl?C6O z$)r!ZYyI`zvlB(u=u1^(VHw$>u?yNB_mOZN#r{~oF>P{xuCtrm`)xjR1WeJ%^+-Y; ziMwMcYra?Z6=CEk1bmib(s{hE+Nuux%Glub@AjTe9(pUuv(M`lGs}h3p8adr=|ytE3b*t|GGc)I1?yC>>{LH%VPEWZ5i+P!`VTyIB( zleT~vS&9dU_es^;o%W$m>mJ@qp@h<68~n(_EMp8S9McUCb*p}u)_y^^x@@GVv$C>H zI^_T1(=+1)l?J;i%P$NXqA}0Ot7BT671PdU=DxNKaOfyG#$qQL!)iP->uffObbq}v zPN%z&=XJ7=YMkvlipsllxWCkXeUB6>bzJW=AlZ|OCOcu(W0d&_1;n^>zI%e$RuduX zLzxC#0x2cgP=wHQg0lv%u391!r-b3^k|C)1t;qMK5)jMfhJp~lzBKWU; zH%~(7;|loq1*kBAy6ucf>rK0GSR#(+KHyh_>gj&iXY?U0Qi{=rqYNuxCfj3FljD-x z;VXWEwQ74~%gybT4sZ(x2Q`#&jXv8)C$7!*^N8d8{wx%svKzTbm0Nka3->J+05|XP zeSJ@^4<*i2ewx8&jW-C9<>N8yr`nq8y-T>VMmWqpWrEe;4ri2Y+fn-~jW(?F8j7sq zrH5PiPFrO&S@AAil!x6J4l1Ql5DaH(O{2-NhA2zJ*`E|#c;1IXURN|d;S76{Oe*!2 zAJ74XmUmPVEKArgqLxde`>-T2teWs9%~DjC*Gjl$oGC1YEajcU*A8l7vkB>=@MrLL zl|(VN<`DWa7+KqK7%$`f*9|SQEN*2N=e~xykhKnOm-qU~U4MeFM=-jljpscPE6QY4 zEV}sQ9!Rpx;r=Z;d-EDAYZYa!V;U9Jlb$4P+_aui9*eI-+9%shxG*Qlp=G!t?|rY& zE?22wdH`miS(RmkCtp*()S;3%e z&o0R6F1~+`oI6rjIX1e4)0{m~!9H_BRaWQ5Y4LZg?#CH&SjG`8I!RvodtY>1TRSC( zxJPz&^4l4gMi{2(utT>EEF%yX+0RpP8%N|Bl(khl&&}UOpu#{lW*wk|#vJwalhd67 zzu-#dWW!>@!CCmwyGUD8>7ki9eORaCN7OV`^0KtW1Rw0BZn@87?TudK++CT9Fm(+R z3KEM^sIZ0PP`&?g1`B742!t38K&8S|`xp6p%X5?Y`E`nP`$P0mva6e?Y?`<5hV)ma zq$B$ym&C~XiZSvk3Eh=uLROOo@aJc{;-o4oEVAvo1Iu9Ql>Rr}8!|`TFn1mBunm?Nejx8;@c~VYq(OV(YIFO$b%0s>F z3U7L-`>8chKDU}8z&JN~y2519By*);HqjAd_2rtr)bW^Z03Ex$W>Z%tN4#@9#+{bJ z>bC09ZP%NJSxoi<0+0eczJ4Isx3&0@vof{wVjXUl9ZpF~76uGi{OfoXpVH(KV){tx zGm9+FHTp|jOsS}9iW7oXs`uDAE^cf?(OurUCEhrTj^|qKXF0xZp8(!c3oyP;?F!{~ zgMFQ1qURdzN(D)snuN=2&B`RVq+aM#5%7~^dnyQGKf90Ryy7}*_WnMec+Q}#iBAxm z*0b=5r*&>hbZ$$kZLKCd^4nYViDCJHYz%D||HLwWVuad#toK!~g`uSvlERw~ZaXuX z9O{?-L2OmWANc3T7770^unmjYEhi#8o5166khv}kob$c}sKZ_U#VCJ}d#EYl1m~p5 zvFRXJ9S3<1&xQyfkfv)-5m!@h;|tYi2~Qo=Yj@ST;zN&+h+QCwIR7Fwg!|;$3Af$p zLzunk@#P);wTFc7TcmP9k4T&19Ngkuq8LYWh$N?~VNh?UaO@%Ia^uZW2Vti#hlKB0 zMF)yqlBE}750Rad`GR`>0s;XE3eiF#=C)xf?7opJw%hROHm=BFoycu#ly%~6E{d7| zx^x<!}k22XG=az?k^R-r}>`qb^@k} zZ9vSc7c<|&#VET z!Uk4YcP6!M{0lt`?@euB_1wnh>yZwL7qNuAWVR-~;%?e>rIyBS-Fr6Od!ww0oI8CZ z_Cuu+R>cU;mY5@if%nUoq}`-h?h>S+lyxO+PJ)&p^fqZIQN<42TOB<Jj}1wR|HEF-@3n&1E7pBVN;c;q zkZ8~_iatjfApZokeXbq{-uy8Oai33Kgmxx^DeUXe0}NI=A8FAO^hsGtV?40k(S!tY zlNt|6o1meMjneo8E4I;Zo+{mtWKmUNAuk(dLu6r5A>B|?H8K}GJJLIM7@{i!ek4{6 zHpXPJG+YB3J~gfIG*m88>^avShsDjx)E(|mT_+$niSWS#WW|dNv3}AMc9-t3BCE4h z!_6=(Gf~W_Vf(q@g=l;o+IEuyH&|je&h9pAOG$})vLSEQ6r{8})KQg)nx@$7u2b0^ z&?^%OPG5X@WD{M&A%|R^Gd==}A%{UfO0Dn%7Zv4cN|LB(pW7@{&;&zrzH6H-dYc`H zgz1liIfAyGX*uL}()?@gJo1?3`(`ea8~V=Um2*_RC1~r@gHBqBxfi!LHA*)Zhe~MA zTF1{(r;MYE{XQLn6yw(~)$C=;%Xgy|X)03u8u8osXh?a1@u(fMr3H3uP?o;5 z#6ao_2khazw#sZ)&9Km>&c~*pqd$%okGLIwa5MmRB(8jPN167Y@mDFwsiLRb;qb@kd~!3LbR1P^=#zan~QTFp8gZqEJzP*E*DdoxCzW+pw^hx$+`w z!+BEX;ju}EX@k$O*;b?xbD=r4-o<>Q{ervm50|ky!6w*qAoP=hE~9cPp7(rDI%Yg< zg$}?eyzoBrQyuXis$<|2|D>t-^S5r^HQQIKQfp`e0)lNo+JMnSGvVo#556rLa6L$io~xzyd?Yf-<@0V%d#>hJG$4a>wcF2gc!_tmH?ZyMhG5v#;Bcg7QkCLfF% zv6^0YKKW5%C-w=Ck=weLJBJ#+gp-<22uWr*2nQ#I9Mwi|EZ_43w&n<(iIrDly^9-W zOQJ3$H;;8+&&Z3Jb}q_A_D(=dq;Yg=Aa0L7%F zl>D3?ufRDf^nK49^Cn~K39lL~&D=T!GDwJT8~Z==_a%NF9x6iAtyBXe>vNkD3C;1C z$c`!J(?Esi5It;8^WL^&cV#YgJe()dt9{jKJ z=|ZU^7$J|4Ko9_;8Q#s3uYpt(&GWy_H~-*$(XsvBy>=A8c``o6u>ed7fiU3R{UfZW zQv;uiD41s0_qslFH+!SJg;9qf_mc2#0qED*Sc=U+u{@poeBmhI=V57Ku2{<KbWWfI%)F`RQ)Td5Azh(^!E! z>NXgr?9ekvDp$I-Q_ZXItMt@ua72>c|JmurAJChL6b~ojYeomd4iUa z_)cV;LqO#nP-+elO&l4fVf=(7LwDIPZ4z}gU*y)gruoQM-1P{gpaZ{1>}SrI$jmaq zH8^0S>`&^GZkX@;ldyiNTzTwNmSEOYodh~ncy3}+XIAWsGIq*ar? z7_44=oWuvY8h}5L3Y=f%;6U84V^s;sW;fz#^yJ#L9-Aq?bI)KDITW>4NEV(_7N?@tk00_Tk=1dSxS99@F2yI2FH(kWshSGNIA&Bf(XUO-qWw4| z+45jN1LXaJjwl97(5K{Z=K2EULGa&qa{i;Yq`(|^w?N8+JYs(98mtdp?!rrcVj=%@ z=*Kd8udO;8zGpHBC_nzlWN$q1B#fU8<~9(j!YUOjivjp({xNuM3zpLCTt4k!6VG0e zmY}(En-&7;;01_O;Ue{q*Fh$Ha~EIBBw|iIO(h;2q`?e>4Jq}c^}mu=Z>_8;YB-;H z$E-b^Gpd7*6@W;u8g%}7zO!ACI!%0*ZtQ-22KPJOTJK0c9hYKb-gD41kqekXcLs{-I(%5xJQtX|HE9=^QY~fK0VHu=OA>mG zhXA1jl#@9kP{eReNI(U7Q@xD5)*xm&|AvJd10hQJ!F-gmUgEh!?D^DpG*C|_*hoGd zh6El09F$B!hW66K^E8baK*5TtMtwmt? z47}k37mG)g^q6F>{_(5x{a&ioUWuI1m5&|0Pd;sXjv?!D7=!g-66NEW4nf}B0F*u= z9UAJ3kh{K`bwRo`2&g1MP!38t2+EN@>1Uvx5}=x;dkS1R&3~4R{u$l?t4Y4nbOx_9 zeU$#j^|Uq~LEZfPlOKR*e?d#hYG(V+Lq8zVUk!;J?0=YwtO&DTnw#M8hF7;WbIg5n z=kO1`LIAKG1}8lhfS^MktQzNN+HfbcqDYv9;sr*ay=ftWT;=-30M55Ns?37dA&?s< ze%YF4vV>kIdC}|%Y0p>+jDUO{r^C9JfvZik60;(?eO2c46pE5Yr&Yr~Cu^FjSe1;= z?m?H`{Mf)9hXtng0PMHY_@;81<~o^s`FdsO+Bmm-dp2!QA2%=iVM;?wl(1}Jd=24DDfp%jG}IF z3M!9Y($lta>RqQ1MiIY=nW)$D8`x-cGr~+S`=CE8)oY8cjT%?2gQ_7U*YFRg_n4@B zGdpJ3iM+n_#(k+J?@E~i@Y1V1TlyWm>{FjCJ4$|MDJ1`-VLeCA`4HD2N6}Vf)vc@S zw@5<}U`|h381`<`_j0m02gH>JIC^BK!(UnH+$&xGS+dbB-$8D*r?;^cdP-jFGjf2j#G%>6Kr zDcmmCjx6?UX0|){)FJRG3KRHR`9ZieCt?NcR<9?N$>1>co$K(~0Z_fTEc2j~jyClczcdHAsp@l>Uavirl*-fI?isy`wAS`N2?5q0+F^TNKH z`uF2QH+7N4wJ(4R{L#i7$JX0%$W!_6MbYvmlYkL30Y;pVrX{3FFuU_?gmHY<;Z+W$ zOXD>im`w2|Tf2D0JxgcvX;;@gvX6rKcTA2eGzTVGRm_<59)aZE{Db-4d$Q5~PGo;j z;km-o?|hiE=m6Fanz=XTr3KoU#77AoTAq~+dO2dAbIy68eYLv(p_w!RL|fty4rTMC z#DMIfahdo_XZBOLJW?a-Y_aR=f-{(vQ4F13Tw2^VhV>dC!X$YgrzG1{aVM)XOe9pW zD|7*$&S08=w*KInDNJ~qTIE1(iFt5hZWc>ovlCtymjztl>pOV`;TS6C#X;_TYMsgY zA=Ry`cl7XBy*9*ls`c8v&gruiO>Hz&HyZ~D)8ogr2OPGbt@R_khabr_Co`w$v0Y9Njmfar zKp%S)111=BKY?tn-n#TPEI4)$6LDzb$W1%I*|qsZ-ey(^YcsHw-g+lLl9(x@Dbh1@ zwitD>y(dklPoAk0yMVRTa;)Yt#G37jaSiDCm%6db>t&43)=*AOmIPpF9P_4Y4!!9B zisf9hNr=yVf|np2ClSZrylOPKbI&KdmRIwbZ*fdozQHNB_a7Vbtl*2Sw9QS_+KcZG-OK>V zQJX{LnvOPu|3ZvMAW^Md5q)NLPgCAqiiLGO$}&gZSKgNKJZ(e5kPZrPQ1E5zAlyrIv-C zp`x0c{gi{`6-PVPf!%x)b|3(^*Z`FgO#!>Xat1;B;RtIq>N79$1yF=z9Cf||^vVay zlwnGhp&|!ekJms}{v}nwf6B)5?s<2m>EU9jN6;j4qby(U+S94(0?HXo~Al4PbdglxbQ&EGNUw7n( z)=wR1P^={D;r}9op@3T)4a>AL>vC-En6PVno6jwsY&|QQQA-m+xZr6>gR>)Go!bD) zoKOV+(x>J&b8`ap(#~PZWV{69U^#zRep(JyI=ftf>&Pz-R*>6ADl4Waw85+=f`(8zRO5j=7BP>> zC)TA(1c*s1_22b%a3+UWhWqLc^}~{-!sX7OVtdzVZ*|BIoB@3w(5}OQj^w`Sr&BZn zEsu{7T9}&t-VcnqRwi~|F@wV`RxXT^Z1f`Q?oDf%q@&cNhbW=mIqCfp-8`|wvE8M3 zK~?T-pgvTMTKG>|K|&I`V!T-JnMT5H0A-NWNzT2tra zkEY7eREK-VfSnQl2_L1<@2xpq#{(f$2Yw7f{?~tZ+QEd?>kyd{jMjx%SiB$}CxEJd z4iNI~uz)D}m&&HO4W8~nbcsEtZi4g$fkgfp-6yNzR|eHEJQqg*&{KEAo(MglaCGN9 z?L%~)+6RX>+y$wZ=Hwg85&09 z=;Uj+{WfZ$82n?+K)(`b6vllAtKBq!L0GkGN}){Z?AncDNMO7n-yOA3B*_88c75RP zPYXbjQU>$gdfyVtD4Y8z>&5NQt>LVBf>{V3-Y19-#!W_;vnLcU*;xl7Jv*%B{vK%D zjmrpoY!w*Rdg%Qk>u*n2jG6#)W~3LQMa)qWrcQ|0ROLvdYX6J;?E>tzRH8z&@|wtu zt9mP=EuO+e!h5Q9hC2bQ>f=gdK=O07bvg(~W-Epdp9Lbg>lNRgnQLMW{~mPyRdaA1 zlrz7*Hss}-5pB&%r|<=(94`Hg=8dXg)3k;N12uUkr@<@ct~-;pyFzUa&9@Ey8-MMf zV5dxwI``0$oz+F_diy-_GXvb^2k$TF>g;EWOEVw0wDLsKXXX@x-j%-Q1!g)K>u$ zn@7!+Paf*9e_#Ekm`DdgZ%xMg!@0ws%G8^pwVhY z5>#8(yeBnV?6V5;a8QavT{XzQR)Q}P4SN`#aL@w`OJ$Ru2u~t_Jko0bUXJ%y;NwCp z-_MxM{PW@esGYhJmf17I6z0t6%mqyG;Pd~IT(#s9S%5&1Nl#FJLG23RC!|obL*(Z z>eo(}bogBTEosuwPreG*V&lvy$?V-Ta?E-{Rb&BvJZQJ)n%Ffo1)D!(%!`=X5Lpzv z#E2Im;Fky3h=MQbLA<25ajDH`7yuSg%5eg%GaoZ2!4DiE1C^efK)VdyZplU4t~Cn= zXM-#3^c&P+rjxY|6dZIrH5zjAJYKTt&7Z6>$A3F0uq@){#sDfypvx+<8xpC)k5_^jGnmWj;06UTo)JpCxuS;6lEEhW%#Mk(d*12?YE`Y z(FU`mheyw{!zvfZ*kr-hd?m-r3?*|bP3w;d-}~~2laurJ5dp%rGP8F@9{zdMb%W%m zORWw*4px($kyR!B1!wz28zB7rH=;w9Q2I}%M9!zfd&MI}WZWiAwLWHW zx~_DSC#cv^HvYbyDdlzKDN-pIew0!dB`ywTN)IP!y43(ijDJ~%UmR@wz&N?_aw#B+ zFPOk6MGV*YZu=mPTR1as7>^wE-~LQW zz+fnFJBZ@rrSrLX1pB7w&-nKbF8bkOY`@9W5#YtwffpCny%6CVt;QEUZx3>FPk?Eo(m~|*?;ipd@K5=WUrA6g z?c>Z@GWpkb`Gbh-vA1IwIFFC zq{ufflyv!149q`MQT zsFVJV*w4UoI$ugRCJXuqkh>U%rZB>#>eBp?=JS~uwbe=eS71NS{9pZ4@tPoasj_-& z9)co=2`R7+Q&&f`aE6rR*p6#!4YDhC{yf+}`RBRD5n~4f-q8*JxUD58YZi8DR8op9 zwk!31`$Al@n4%uQhorpP|B^vDc|;1U@}e84jt>a|zpu{UWI7wrMw7E zhew2U4|)=of4+agAFwSTi-mRX!SwR$=K%hidowuezjFiUC(~VSVhsG|b=(cO+5SSb z{4bdsRI0T4a`pIl1`gENcz~+M^#fj3`nG(8izEc6xmDLzKPOrQwURLWA{ABg1|v8x zU26N3qr(A&-IMrLxbu{mD%7w?h25}}WQaj8 znFniVm<)Fn)H#BAbeqO}Cx-d_rTcNGGjco(n?)h7X^R3Avn+HCXI^?k1AuZt} zl@9NgP+q@<8b1WkVK0wKf39@S$u%f@kMf;nZv_*rDGSh0;=K)jOc+s_&R~OQk^vu& z@I@@!KDVYqiQjp%|o-rGG-XR2c_!YWw})QqaTZ z_-6cXhJOpMEv9>UPw3h*UP}KHwEmJ~zh|$@;Xf!h=(UCeAsH3GbMydT=3M2M7P80J zoPR0o0Qbd@{)30#YDfQGD8HJDpEEG>t3eBb&V5jdAI@0<2+PF5WE&m!MD|Cr1EdV} zY%65ojD~z*WLW!VCD6zE4R?caxV$2(&RD;0uixNy%SAA_bs(xy=N)xk13rJlWL%13}K zD{CD2*fRYhslzmj?7C~?Hrq=)jf*$^N(#fPsWba`rjgHahoRrPRyD~m_PQg*j$JO6 z=F?}5TH7}KbkIvQ^j(I{HK&(^T35!_8@(=74un0Bl;uh z!G>Mn!osrzv`Voqyi3Z1o_a(qI^P|ixkz4e#XDxKQ}D`Ue$HM$iFtKH^X>&Vi^ zxr>WsyosLT8H2Q<4&Oo;(H$B{=N@xx@h7owb|-nW9$Py^V$#YY}ZI(>df$Nz;s)5p=;m>zQnWr z9xtyJx@25^5!?&_3C6rWe{5@A{a4Sf5Y*LuK*+`1EP z&FX>f+I?Y&k2xC({pjFZI}w|Pz3yngkWd5YMV%+R4q$(mn?z1`SKb&llbka(hyU;Z zCHU@hEkT?93xuc7zj*fSsIbd?w5M^} zLbDeNv3Id%VqA(&A7!64U=p*}1Q!x+oTL_fJ$^T#BE+!SX`v|``rRz*;SIKR^CNX8 zpb~%aISGAadlYy3FB7R1_h-TeK_c!Uf!^@}p!QQXY5(}O>;ew*(%}di`FrD84QX!s zf0D9#SAfMxL$Q2{qt=R`QN9H4-V>r`LNMGqD^4TJ&MJx(>OZ zx+~+Q`u>y=YU42c$ZkgKWvGJzAJrwp7e-YspOK`vhAB{VSeOO#LDP4M4EPj%Lm&0Z zJ%OH597y_76$5={mXk&ifPzw#EvUO?^{zYh^w6X>L>(`~nGLMdYtvpqc@LAvuDtDs z{>&YFe?Qfk6TLU9SY6BZGq(Td`Z+S$dm?x9@~g5H=p8iR-*}z}0Mp;hw49{@67rwv zI~6oCmXANHC-OJ>3Y4(FHGn`t>YvKYsdd$$xsC-5C8MJ$Y~QH>AY4V2WbXO)WPhh_ z`5#JH0IK=zCThRe%%cJDWS7rmq-6$dT4uocpr>TI%|ETX_z+Zr#d=OdZW5D1AL+f5 zlgkWOSe&R=km?DCnn=W+fqLh%G$%#~Fh^2MUF{XQjxue2?_YT6W+UhXcM!Wg z3CcT0!9n3wLx&B2$VT$^mH(VZahIVxy@8I>#-0zowcvYQFB;ao>~!~E0C-KPd_-v+b> zLb_RiLP~aMO31d2w``sK4hbX=OdNEOvD3P&r@9V*^2W`<^QT6c7F3%i-Rz$wduYEy zHnZ5v+8Wto>iyIN`8EYE_noy(0g8BV3}R>zIv*+wxeX?aZZ>7@i^9H|;5ObWQ&M{K z3T#ao@d;yGjQ0y_x?YG-o^a*%v#YyZm5gf-Fm=DhZsvusF3;QEs(nY`#er_}O}-BgeX@&g$hz zvvnYR1QOxf6qJ8dj&~CYhvs79qKEhxT~?Hx@`sDBj3tvh0wGn^ey(5JGmf%frBt`v zl^M@JR2^sv(sSi@-n?O~(VSh?^(t#U{UjJG_^$iOx}9}T=s?Te%K*^&r>1<1UZ6+G4^m=fOZ5C*iK=uJU@vJH8 zKzq&!E0hOi5eSQ+D?C zqVeqF%O01&+Bs}$0n`=-j?E3V+CIjAmMA^GgM zUEE5ngOZOD7!HPwZazB@d9uTD zp4|Y#rDS|N5a>T6`h{|cK|DZoDtDUVD^Vqewcmu-*0@gpUD z{aO8ig=H8+iRP-E64taNR(h4jfX&P6Kf5lSj5660=S9(FR_dGToWIX(26s;?8Vo<7 zqb=y`<%(wK@m!7Fc$R#>V+#np_oT&v92qaG1A|aoyy~p@S*wPmwAAoIVQ_n{l*R)Y>XJHDQ1Rm*ca82m*IoUBwHGfo2z9G<~%FL(vH88wtVp z70BdQ?Wz}WDc|o)!}2m4=)1oXfPJ_8-fqWtq|8Ia1@z&&@-=aa;6^R2kym9R4d5&_ zbYOre2NZD6fiZI-B5>o7{J|<$dtPWZhxL<;CR*3?4WNFDkD6dK`UcpWfR>?y(uf+E z%r8~$;Z`)P8R?_N@MyI5G+-9lb}FnJo3vK`zgn&|sHtq-az)z4;c^iX5hcwm!8R=j zbgPh7nGtXTL^Ly;BdYaE44X6Nj3qfhY(X`(+jOI|E^)z zlfguNpDN$!?bZ*Yq$FO5sc9g9`jYNnx_{+Sv$}~MDJB4L`fhhPQi7?TX4C3fW3CNe znC3%TV{sRNTd0#9euJYg(cZAUF5(a>v|;Rtk>hAb+=+hl6sFvXjwu+$PstOz6FocC zXb;>0mCpO);*#Ga|Id#in-Ej=()s7}54B*}i<;BVZcXKtH{L5*`)`GiOx=fLrN_hy zA-TjGlO-i8D13|?ePUaM0e=uh$wPSHF^}dx(dzy)`0xL7@GmI&?oeIdmFkgV3HcJa ziU>(o{AE~p-y7emwW{`pW~GS{u$s5;(P|Dd5)T^1w5Kn%bOyN|2byZ^y(U(Pw8h=1 zjhPEmt*o-<1wz{;=O2<6q2;v0XT8xr#KR*D^Dcd1=q7fzk>rUq^YW*~-%30a^Wo#f zx&=U_b^e!cWe`^wZ6NGm*i5&OjBDSkw-D&U%anQ#7raa`5+8k{ny6#gdr}ekhGumw z)U6s}AxYafQ-t%*%k_4~=YG%+83o})5zG~kZU9Z2{i@~FX9b<{SBc+XT7Qu>|KBMn z2bbSPf)%*_#YE`J5gDUb+y2sZ>jti&;Q&JTO#K3fM?aBlRu6%`YU|bo(KmWtKY@bG zOz*FVKIm)6$tOo0sVuBASJt-GPnvepx%>PKumNp;!C=eT4tL?@i#zCi`l} z-YMNL4;H1x07)f%Uss+|S?0C!b6%iLut!sMga3uH6~+@eSv5@zO;#J{+?)N%@dB(Dm|a<#{!Kq$J2kw&!H(?>ft`diJL^uW`|GdHaNK>ryo4=Jo+FqVZmJMU{TUvi=afRC{7wHANF-o8%c1|3Vwv>d3OV_RxnCejlzl){vPhP|6v zeo29*xu>IIP_?~?n``Ia9`JHiUaBpNvrozKWA7LGuk3e09?1@(+RKajKCz7elWZ4U z@$vAlkO13Xc|N`rO>s5wd8=M%M@R$I6d8*cU9{>6+Zrj4oUXE6_a)Tjc@wdwM7qr) zd{2{Up6?Dn?$e=YSHo>h@6+qt2MV_t9#jrO(cW~#MXxsv(9xK1j=Pa+;5?I8@VNMd z;YWnMzxyi)prAY^Ake;Xg@)Uu9kfPfWy`pvJ9f0<*T*eZ(XNP2n*+ooCAA$oI}CSk zm~y9WVl#48Hx=M6&Xi3nxmH~mdESYa!P&Q5qNwW5Reg7G)jur*;3731dt4rUR~N*p z)KT%up#Dd-A8{wsf@Lx!N)Pve1sj(hG`MkOw9O~=n)@xEdVe6C-(3nDhm82Wzn5$u zDvm`KFlb0bgf9vE{U|))J=ye{T^DFe#eufLzfCrN-nw-wv#-K^5i6_gkZ4Qw#oVhs zn;fFEwxOm)9d)!u=xG%q{HC)Fz}03&&SkUgmpj|2@HTxKci{T162+&O4l^I*Bx%y! z@k+5fgRQ5!9l8MkfKvL`8W^=FTrIBJHV&TkuXdIb#`YU4-8+9>J+QH7g+>`z)01E5 zKb`Swz;B2)Z3op5nS$#&imuqByDkFUIg#vPZuj%TTYTut?=xmItS*)J9!CjZ5YC^o zZ~Z+s-oi#xxS=?36hJ52yZ)v-(k+OwklT2-&r=3p)VIF%!l{rolgECU&sLc00k-Di z2FE$j-pd)5T^}vCMa(fh+6b4E)!C8?owpzC)piVY!3H-{O0B?(+X`aK7u^ZH*w3)v ze~F~o_oKgx^B?@7JwB%q`)$q|iOXxnb>-h_k8kKbzi(j8-42Q*vD$?CgRHcMiC#qv zy-N&vDu|=PfV!}<`Sps=V8u>7{BE0iR(1}d&cWM7!>*w$CkOq)*z(zP`sI(<2p<9R1#ANV{mU zKjjQ}nJ7|&!{DPCzEmKKo6!@h{JQlW!@YFKPp(8#;`XPq^Y3$nYwCKV@XhcYd~Zt> zWj6Gji;-=hep8uk0uaa=wA_~TaoH*HBte`a{z)P{OjS({#QNqR(eg7g96n3-bUL>| z)4-MW2>!E~H{FWb4iq(|-Z^_QZy!~Nxlv$O{jvu1R0lQS1anXnkXW8@DqE!}LD3cp z9QknD%dfL7t&W9X)zYIfGxq8%oeoAB8c00x7C*&j+5C-&m9V4VMgaEw)c5N7 zx*ee(MZW(Ki+r;_iG0bq1vX*NvM&V&Y$&d=`N0^xkT~hv2M1le|8LIwC*qpPD#_IC zr@zS&((r!aQ_dP<-Aw6z1h`VJR3yN-EfNz!$)H=Jb2!%!A6{*#_Khw}RQyZ&AbV=TwV zFV)X@@$~s&=uK`Cb+DF#$`0*xX0`y%@!VDLaf~p9#`~-AK~;@33KS@=haF&$39^IM zHbipr6;WlVchLhH?2v(f5#*gzJ*cqd` zQBo5ky}RDM!BH+O{FlrC*O%JZNpri9YId3r5nEIb6&yfn6LFbd!3%>eym#rDw-6K| zi!1DclNQVMeV}zL_L^BGbMu zLeMr^#DG}TwT$sRL5KALPL1tTYcv8KU*o)f=zEz!;ECd|>p&X;ETumlG>eFYN|0$3 z-n*pE4HQV1m)Vrb>`{PmFE$`_R3dYF(vyp0>Q^r8f=8l#PrSh=Ar$*hhrKRg79=Nl zCSD5@f`7(0b0iAJSHV7g)!?RXD#eT%qH$a@JKc}$8Q;DRtr>0n>x+^(N=R=7YeU2x-eX<} zb`n#gDAiL%j>!^CSVxy%dxXH9g<8P`AczFroue?GEJ>I_Yp0=?_G4$b#Pm8557{~I z1@Bf;A=OA_0UlgdVC`X5iebe1l%Xs^^eV?yS?CW?J#9`I+i_{Y(dc_m^B z#duMdH!y-oM`Ndgh?>jA-$sk_e;albTkp&$Th~{vZyx>f+7u_sIZR*#wYyGf3n?B~#?;RR^ z+_k-Fsumx}#tAKn=)jV~EqBjy^Brf(51cW{4*8({$LyV+l9|bp>q5%g{=;o15#z7@ABHxU#D>{as&b@!rl{9(;+r#OzaepVGL9$T^xWjQDIO7C zv>U8jeP>-M_tKaJ^`^43%c{ejk-@Hp9_RJ*p2R)7APZ~-DKUWO_vAwpVFDe-HUlG% zR81-5Boo8#??ysBwNw$m%#m7q1G>M17sW<&PEj;N&GMGqFh^aA(NMFX7ACx3@21XN z3=VfhA11Q~m}5xMxWnOW{sEjh^lUa?AH$psZos@_CoCw=C0LlkAF_mT7Dq$O;@cI- zvr?bmQ-m?c9cI2N>BJ{71kXZ!NMRFr4iXn$+rG|K6DG<`QYbSI+thCAr&BO%Yhbhj2L0kBa1>cVb;&pFl#KHabJ(H=myo5pDbX5C z#jvdKRl*xmnUcrQUVa-tmSlBUN+)}WkI zCw!Uv6uoksv`96Hm`_w{=v@T+K&eQ6&=WcP5A2vZ?vyd-EsZ*!v?CU3IaR02nMWcB z!h5h3hG3GAR$}Hx=EmA>e3&WqJcA~7S$a|oCa*ghCa7}f#QKFd>Ugm`3Aedwq;%YP zFtZZ|J)p1TB8y+~4vKn`s8VWhI~-F@Pe+BCn`9jKdGb5*9ld|cR)F5gKw|y>>aO@{ z%M}ctP`Scp5h?l$6cmZr8Q<%ivV`yafk*1P}! diff --git a/ProgramScreenshots/SettingsSiteInstagram.png b/ProgramScreenshots/SettingsSiteInstagram.png index ad9865e86d455522afa94192918e39ce91a870e8..241c61c9546480b6fe8075b5a91885f13044fe68 100644 GIT binary patch literal 41303 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 MT}Lfb)x!V30Om{BUH||9 diff --git a/ProgramScreenshots/SettingsSiteMastodon.png b/ProgramScreenshots/SettingsSiteMastodon.png index 5c2b069de8c6b9f24bfcb122de840752f9df34bc..e23a83fb65fede013c3c7f97214f4f5f7d3388ba 100644 GIT binary patch literal 25093 zcmc%x2{@GP`v#6rB})=gkv(f66tWXdS+b-;_OfN)4H`o)(qx;EC2O`MTV&rxwy}he z24e}?jj<2LjNdcreLuaQ_4_}L|L^#{$I%7iuUfj`9qdUQR0t5ol zX{dwmfS131exP`)qOAe~l^|&M9~}pNrg2j@ z@&tiSHIx4xLAk!O27w+WX@FJk`it4q%^c`-p?YwTF2xi0smRL zT(XgKmGp~^_%eS=H4NTpI!eQBYw1h#=0#BT(2-}MFRAO_fTAfFkIME*R%Fq{r?zvm z)xWs%ru!-HaewREN;SsqB~DhJp1$K-1!MX6#d1SjSD#XD@A#flr(iC0YjLn1p>M2Q zxWa3!oJtA>)++glGCF-|l@$bfdi*BC5fCWy0vveV#sCI^u3J$95B}x~1tSRbB{4d< z9XYaN;5R9}5})uE(U~8Jy;Qx1PK!g=&Eg8!0kIbxaXyr5nuf%{9{ zW!Uu*>;5q)t;COv4+y-t5IGT-KDNI${{Z;w4XWt$(VZvNlW_?%h89~KOWg;(J~Q-6 zo3QE`?1V68oMe((QRqr?8HP*?rtTYk!=|d%n8Nuy= z!(P{2{D<#-3#Rv<2#q?Hz8|&Uk&EP2-ua{52T8cGJJ9QINV4no`LR29Q%7Mlxb&bm z+0)93)Do)b0gmlrp60Ua#xi$*3STdg#&aesKhd48vt2vib!9A|lCzrl?RyHVJSLT? zXN=#`5=FJRF+4idA72@Q0)Z~tec2)TAercRiBW^+<>31h$bFQ@bg{yt)PNsU>y^6u zX4Qdf`y1<<1Ii-!$6QeJBL94-X>VlYf zDe8mgQrtS`*H3Y_^1$L+fSlahhzL01){p$yzq*jP^Df=y_7>;k{DQrwSE75Bc z{s{_K#X%9%4f|Itr=Q_ZfUc)-Da^8}e*L2ISzQDaef6>%W9!8I6;3G|vJ zKw4X{Vq+h~K^ad7w?VcKBQP#XV08)xGu(A0h zzuk`Y(JwLzG;7Q)`dhTA2%al-H;sm8Z2DlApX)`` zf^Ljlo`HZRfipz;#aUT!@-ZjKC;$l>5+rYITYS2R&T2^qt6C$ol_?wa~Y-Q!~j|2HVtcSAKkB`0W$1Hp+ zMh~RLs%7PDZLW$mKj+d6>L~TkxZ5S)yR2`>8?@n+zDQwW-dyX_TTSetE$;h>tE6WF z?>kc3H0%7R8^UMdV1v#C7!42T=_ga_zG4!jz*QOWqQF{Gsz>vCHMI&4tYY7q+DPpl+459{<%IFNh!V8ff1`p zrfez{pgYAD-xF`M0LK50nOG^--es{PofCMF>C=Uj2zW9^^+UOs5ZH~Lh&|ZJ#CIZ% z4oud?t~tGk(mSgYD)-`>_DCwtxA+CmmO{{dPF=6w!8lrz6^>K#Mztpd9=b-5#Pav% zo&iodWCq=Ny&slxuljA?eAeqE+;h$iq+ndS!uzPc4aLQ3LlEdaD}k!}Yv2RCx!-Ug ztbNDPak#U$UAG~dRVKipx!7>~ibkwFu;LFNZk^z9=t!dPEZ$c&xpvTmF3?8q*ceqV zn>#j(DRD0yEHP)!nIXMA&|wAsA_6l)C&=$|yLF0Z(V{T$)ZQv`aOU zqkLdvbU=&mqD_F^GXHSRzY++*+%7u6dq5A_e+#}WfN6p3PLh8w8OnVW1Y*7MTdaPi z@?&u@9|)(kVSoFZ7E4&>#jyAJLv3{e>Wzhjhwt2@je}s1IagUzNxSa$o}9PN3q9kcqD=JVsLM6)cbAPxa}R3n zYgMi#m^Ty5dzMG1rVn`}@9#L$x8n|qtvtG1ktP)l-uYYW2}sk1^|)g2jT<6xyP+z# z$sp4@U%j4G`NtT^5WD$42zr(m{y7&SpfN+g3hr0v7rWJ~ebpWnb-e6J5d45@;qxQH z^PT?G`ap2cazw~+D5?Kpgr&zkp31A&dv1?vuj&5g$F4`imI5Q|CN|3Wa|3dgbbHI= z?)CJ#DLRRlr;ZZ}ApbP%XdYLKt=jh%e7 zA-#S17E<{Qv?zmVkzHWzc>Z3mIpI7?f5v;$brj9^O7rH&>Yh^oBCVR97lqcX@Z!6g5oYoEx=K>H+*6!L zCrpL5L6PaDS_rlj;dhEt;Ue2Lri)cyK_8OLgoH~e zn^O0QLG3V$^f-$r=*KhfcHb)za@1znZc?vB*6?H^ETT9Sh1jHBUU@Hl>-bh^;tVpX ze^PFCsc(9+mWLvG_e{tONE!t1jUiolyBV!*Qkp%4R@xrDUn;q_=W7Kmqoj%s2;BJg z;_DKwM+|i-ihwQY=&h*jwcd$M-EDr7OLx2#jH99;uMI4Tck9`qqCNpy!k9q~b8qy_~t$m>8g|_f=Kj zjG>QfaPZ{^E7U1jzx8Z?0%juKrYl~*z~UfA_BdnCAJZ)_m`Wj7WBK@^(0QR3q$;-p zWx$JfKk;~oXpcHPXQbsJRm0l)Sy{lA&T;Fcb8}mR%6Gi;Mo1Zp2t5i0`Q2)jrJ~8o z=de-I9jx50Umz5*m52EzWGL5k{Tt5pLu&{|!r;e9KpZxB#Yj*W2c0*xSx$2I!i1hm zO$=XpT`WHap0^M?2Np)Jb`jEA_Fg#$E2SHxL&byx>UVI+Bh$MFsYEM9V%Xt>rLHTH zjoVx0M_z7POtMQ&o}mAZBzS+&LPj?c&MWIRXf`Y zgP~L~L%!(Gg^;R%jkDlQdfVC-(`EGi-Ab7Q|FLb-EQZ7I;Ei`6(`BK$qI^y0oNHll zJPP~c{agrI5ce0pVEsD>V1TtD2`p5 zGf=)g<~zc#%n1ui&=D>hZR9eNNU ziQS`e=;kVz-NkKfs>NHkQklM!~Yu1FY+s6!WH&85_P}jU&+ypW0=H7EW^Gd=D zV6^uo^qIlSy4~!G4$ZejLf$bqtUg=s@oBgX*(XIs8-Tr*i3I%ZcpHz|&#yg>g9C$Z zaUEZ{rrc2baxa96j%$S&4d&__3h-NNauC`rr-(j&iFo7MIoq~-5dI*f&fPONyQ>$2 z;7{f=p8tp|_P3D?ktq%&F3rqVjw$rZ^Q=tJ^j*(H*qbJ=2ot4mHhEI>+`I0m5)2Qe zASPRR**sb~TLg~q^9{>xTWz;+XYI()!MCCV&yq=h_gb0cVsRKU2_$I92VUF9rH1O1x^A8>*k=o z)A)mBGEB?gG6_8P6Wx^rf&pAN$|Qfy&_(Mx_ti&bqpmV!EZBb{SbaI&kSmUhb=Kj=3lmi-7{T_8swz3&rJa`+UsG@bwfehnJ>&-(U_Hk(EXNp%ny_W^m@QSAV;i80AZ|jtI(t{0l7Z| z;4goER#rGRkqq3N{7r-|V6}8tUnkb_o0xw?kd1pHDzp(bp?yZ_H zkI@<_v5I{dLO}lmzyALZAGIH)j5h6$r{Tg{PK3tXUr!6Lx@rML+hbA6*ADHVCiFcm z4=Y1dfU|+QlWP0g>+p4X0snc2_9Z0`q{9A?P4(W7d!8qFR@S;IoH5ojopGg(Xi-Aq z-1kqxrH`5^hwJ=4!oGSg^yhT?(K3T)J&z(T9O7`aI{@_XFqlEWf?0Z8)@=UXasp?Z z>zNBJ(u-kmr2yF{o9~=PtMmXUAZSwQQhvl5V1OVwV8nA=n20Gu^+>#ky++bZKO~<= zCk?_iTy|Om%bTnue9=~3%F3H_Ejv!BNKxaor$}Nu_D7mQ&t*gFpetrjd5P&N!c}}x zdd5Jm1Z2y%7J7LQ_e3$hdV_cgCEC+{*L6Qh&B&O75ipO=;u`Mt&l0`uc^ih-13(FY z99lwCNv?E;&p?=}~TD1PM8oN4{xBDgOpjgfmqb)Jm~%T9?(do6O_9b^8kJ`Ii95^h$zQlVJMbjOK{PIPkalHD&G24V;4T~TNVhdiXc zBUW$*GeN2lF{vo9B<>}Az65wbyP!_W%W_BbNQptQxwE0hChD0Lk@*_jS4icPR!v^f z!=a~l3#iXv$6o4%(95eZ6E$ZatY}Zgd4>}oBx8yl#g2wGJTNKxaewbtRP7a^Y4CP8 zr1$ZuD0CXzmtQtHcsx2c?TMyK&BEKX)yV;dHN(K&#uUzOcI5!mYtAFqhN}INQW>`O zbV@avnfd&5N=Y=;gCSFl5rpJGn;DzE>%5mY6 zq*8~u60i>swg~QZR0F?ub1OP5Ef)u^Qj;9>(Qf*Fw~T-=Yl6EE)=bx~=L*(Es zgwGEV@VEq#t{SNDoF9syv07??N<76)g zTVw{0Dp#+N@YZ{M8&(+^qVR~ty%Rk5H2-m@&u3LA^nN*wSP=EOh5g@X1^O2E5NL(W+`9tnxPKwx!Wy&rhe@jUKHiFOSjF0EHf*J~&pR8)3MD6C%hb4ujC zDlaemxHqk^Y@wlo;0zEDC+wc7{8)|8>36ss2bBFHV;)s@9G=|(2XNcxgwgZNiwJ7q$^lb*Bp%jbSx zS!Qj1?j|)muw&sBK)o`tKSEq@?=!L4o-`fbicX&K!Pn_F?B`JZ*j!NSQUcHhbidRY zbIqvQBWHP}yekE2{97s9m3J@qM}N-kxD9Ha@{t&RPil@Uv~@gJKYHegY{g%1f|*D> zx9RG)%*iePN)b0zMZ;`E=)Zh-HsJx3A3pEfDiZ*8ORJ@;&s`tcC^ZGF%o~QjsPbbn z)*|j;134j}o4)tbA8!J+?uD9Pz>oV>Dy+BXX(9tuS`_2|TdH9IFP=O>KkJ)xhRG>L zbG*3zs)0)sGs1U&`?~`3)8+ROsUNy!jrL1kezQ{nbD_&>j$FU-f`&r=ao9G`tDz4M z6Ye^Un0^0{(FWbWM;ZOS9dP^9>4Po=A40_W9shlV_vw#ntr9T+f zo$+NX(j03X=s)`^_4#fGCx8n5-aQIx&q65h1a1?Oe@t08$Ihki9FyJeqx0BI>je|u ztEhnOzstB!g%p_88pK~Vu{FHm75AevPPmUm5iLgyQuqCg#XGw4+hVjDu6<~UBE**W zKkTQuw#`2*B25h2IBFcgaDFFBokhg-88+a}J4f_jga?1ltZ(1wJ>Z0Mi3^+tWNg-E z797;hOCNY+Wq9M9-=^3&_k{9+lHYd;q>#@X*McAW^b!!3vR+T45M6Jzlb1EslirpF z5TDe_W#;qM7&m3T&e-x(%eMIbj*chq$ITDw8%fhEb$8?wLJ#PVyzt%SarQ-j!EB zJv4yR+Y?rhw;R@wuF2?jcr*yD@@0j*Msx|EA0h}9^vdF|vTZg91J0ON!#N$E$ zx(y{+q>YawCG$+mQbb>R1H{q87-|9(#7tZh!q1iW1!PxiU1NG-+i(0m+Zi$`fhzwK z?@4yiH#DK?zng9Z z>i7L3$)yLGG6jLeqsxB%JQ}D@&WK6bJaDZeg+qbrAkaC9%R%jD03ZYc2}GVFCj&;H z{TK_R8K6uMI=JxoRL8b-gWmXq5m6{-;)1N$W@8$*;vkJ`3gx)4RlybWdguxWUcT^2(H}YGJ z;`LZx)R67>qE7tEJyqX;0w;3R;(ifXL11w-r*nR2)wX zVFWckG>&Bid#x*b^gB6nuW|OK3_dK?-NxSYX^)O=bWZ@Nr?2c81^AfLAcnOoBmJj3peaFFy*)Y$*@@z_YXhB<0Dce3p` zJ=T!`RcWC=&MMIP^mGV=k9k30LArDU9rI*`qS#5ZqWU4c9bG+7CaN>;6pA92D#%j{ zsVMN_70gnl8T;H~%pC;U`;zpOd#X@X#)Stb-AC`>LqLykaw4$FSYCnqU&jNTOptr& z!|OpW)Epl&tTn4H=X~vyWi^&eIU`oNH@7z(ik&>Xi}Ah+SkRjApsoC@@NvQV4$PeH zB5{OBb6`BuJgrD*4U526?0Ef35R@HlUZBDi6Z(fALdlp|n z{Uto@bl1k!z7*l2cjit57RCF;cvB^ta8bZXe)xd#^9O{j)1CQ-K=+Cj#t1Hk{q0rX z-T-k@uv(}IK16>80BsFz`M0WZ55_=)@~{ z3Y8X$vvjgEw1Ay&W|X%FtC#FCDn+@)dSGwod1Fak>0=sWp{LP?f#9Ji4z2x}06`Fz z)==1i;M4RR`q|^TQYH8KgM;D99TlD(G4XuE3L(+YPVp2?l$-l}*`3}q1-YdHaUfAerRCX6 zfcMi#gRWHf1*w~1WFj0#^-$H{mQKk9HZ)iO*Kq^a1*q_yykN{r6`fz5U3hu1zbNKZEb9*V!L2 zs+Eh<_o+`KIAYFbckXzn9|17{TPn^fvKbvtd5Vs+$npZ%ag#eU*3nX6zK3sV{Co)$ zED4Izwvbp@3^Ac$-78Pb#`?-#sf9obYuv}SXuXMBNs4$=I^Am*ck%bOflkU6_Pk@_ z()qqM$Gw)QBOsBW_K?1Z87en`>VVf9xP6Z>&*T+XWnKA6Ufu5OwAT>2)2uR`aqxD( zNpyQvP3q!_5EDI?ugI@7^p`zdl4fSvi!HNWJcpBQ7@+Av{NHej3z`->~#tIm_ z9Sgag`GG~>i55cS|BnQsejy+{_!h}Z%TB=L>A zzlYBrfRLJe-I%oov}SRfb$=8GTWeL@>-@LH^q_m8!1_XI$ZgY7he08rV+y6DVhp_N zJQu@%S)OZ?@kc;Cfo*XE z)c6W;au&LCtdf#$RfpC$TgP*nb7R|^2fZ4dYdh7WRjX6PD&yr*EHAdtdfu?|o|*dx z;Ule!*O8>0o{)*FbBl|rwWTqP5r*fRX}Lyb_u@X6_`{c;JG&r@6d}mC2C3hkXuVn8 zjJl6i7Jf1X++6{9OUKfox7d;@CN`)Au9;)2Sf6@L;R-lUdUIWX4S!QQ-G4SDY0b%k z`Fh>8v8Y0Ylb*yHrQn_|oU~lgfnOa2lnC_MXr_bU@jqQ0C>i#@YR#F2^-Oe5Bkp*` z;FQL{#6@??^ObZ|Iu)~3emp$@tDEHf1H4C=Hn}U_cM`YhQQqFJsN-{ z&=nWMgwY=9c@vN6Rw_%^PZJbUOO8AoAv--6I5h7M6+YiHlLFd4b%e|u<=q;ZiXk*! zz*PN`;ObN&29I%U8~pHnC3pSqyR@Yd?fJY2F8NCTgDhJG8`MbwUplcFn7)Mp778N_ zf5wY$*R#%k93gm%6+n)fEdxg)NsiAYl#CJ2>3HfVsX^lZ@UI9)K#?#T@i)=IzZH-D zXSe$OawdUoWd~{XUw%stmRB^%=_~v^V1Ne7 z@D_;xz+GN0C@?P9TmgKGqyoO74wRZJ73ClA8{3;>=aPTC_%=rH51<6%K|~1PivWUV zRt3m50YE%9w?`3OVXeXQnprjUDxC@+#K{!Mvf`(KfDIG|O$?d(Y~aw>;@atwmpCze zc{G<<%|`>=Tx8NJCwgM0`gD2hzZIRwq{eC{IUL+y?|e{H&#w`G+qSaX*Drl7XuE|% z3_1a+n=%(hy!EP^Qm_!Os4t#MlfzG@nna{7J>E8mUoSh$#Re+!1dJ!^lPXuW-S;ow zCxym3kOuIzF^rMSE`?4+7mG2Y6NyNjtmmZjZ7> zL+m2!c<#Pd4}W;K|E2i%x-?=Bc>Jo$g>DZC7k8&3D^$gEj$RxtGI~+-g*@;gooR)> z&%7we4z!3LrvsUy4#VNIc&=NEs&E5m1{y;~_CVE0;$@|jr%NNy?Xl@I60_wI92icB z0ut$rjypjoGKP|mBb8L7UD+#RKEfxRUOPuP3HkussO>o8W#+>h!5FSAPgBrQwl>hv z+E)wRQHWU`Ux4d0=JZTcNl%V&(N++{I>sw%S0$!~0-#>CwhHJKWrM!$bzisMJ*FEj z%Xh6$;_cdSOWVR&TYpa%Tp|cWZiei0U)9>8Ww7L4K*8JZF`YgAX z6NzukxO!iup9g&jCZ{0|uz0#8`%TXCM?ji~Cu(`W#9h31lgMCZ^GJ#Uv`0pE|3+i^ ze{qvc73+xx7$El9XzFDzS817`0)bel{$rNY`h)*=e1yogQ-C@MD94Wfh2{VgI68fj z$8RLYK$xdHi+BW7bq=UKzf&=e6-{eaT20@diK)2Tkp)NM)TWB8NaQ(HWMbzy4o5dA1&$XgMiM(Sy4_8 zZ+H5>y{yaMHys}}4Anj;iB>W$g^fx9{tW=u6CoF}qJ+nyBJTkLB)}K@X}D@!o38`? zS%;&l=Qa1S>%NS}pZ&0(L#Wu;y%gx^1PXSrE)kjanOAN5a#@g`=>=1u#%v%I{2^}r z)jbDO;{HBJV@zkq#U`^>HG1Zzj2o=U8R;B_&7-+KBgG5r)PJcklVc1@6#v_!h`_-H zZ2NZ@FsD?T?XXYi#~0Pds&9fi1}vr8%8!B0DgM3{Lfdw4`R%_6o@uGr%0K@&TTQ~I zeSY)?-jqqE$+0G2uSg?@4kS(k6yA;W=bOKd2EqG81^fx{mO!I&YEX$YL29jMqbW%C z+rSFqk=>3PBE&1jmtjF6O~X|EC`juh@L7rJ+*bvnzlaC0zT`nf0(-?tE|1CRCdKc{ zgbH|qzHjif!41$up8qq@2lRG;`Fy5Q_WZyDNXgFqCs`Sw!@9m4Xy)^BNCpHFktA2> ze+J~^z#<}~$fs_6**@;H#s;JgSKjZ)|GLZyb?ZtIfRSjU0At(d&ct||EtHqn5zD1O^YlySQTOeq);Q1XyJmgVYVRX=t}#=z@tFTZn63^QsV z+t(@93v=3M6t`4?P0X{lpHf`8)Z>W`i_BmD3cY_ng?Ur=w1kUqugmh(h`l?OuPdCe z$|+0d9vL4P`Q7{@BsWlgLutalfcr?}86c(oWhNrhe;AHnVqU+HaRlIu>>rpH(%tpb zZ;M}l^}bp}K}TfO*|$;u;y4(&RAljPsTh3{CtFofU+E^VfKnE#x>a7!lGSfc=Q#F| z5;RZlYc{>qL&dqE+DbB+%8;d#92?skWlT!zU$y#Q+oQQN{H07 ztQlN%{p37X#c``aXL=YNad9tBGSMq2yeK8x$Yt;B+!1oL_{VAs+>UNz76l%URb<={ z^cs`?)au_|I(0>D%!zPs5m;h@mab8plG=1c4xWNlqm}j^-J}48l70SB z`@2K;exS(YHkWHFhtuAKhGa55!RI=9*<`Pu(iqEj!7R053tGG;KDi+t@(_t@`n^(h z6`k8|=!;x})e!tCbsKhk`z=D1Gw8Z9Ic7YMAj5eYPWe}{?(P5xvAvRK;xZ+=y;V=g ze0Lx89Y?@QO*@FY;qUof((m=g3T)nQ^Fi^V;m-7)k&9jL1-xG2jp?q;$kY{_0No(_ zFn~9}!_1aeVqcDeifH~cdG`CmsM|AP>OM2aK;laOr!G0U_yuw(IbMG1WiKGd-Q&M& zC;#k`99958Oe0vJIr#p4wEWMtuT_fs7%k`_A9*kSik}ZALq>b}ZyU#0Z!p|SqUP}? zt9HLo|8DeQ+U*-s8VJWx_XuE3PjCI*^i_NQe>45fG^UP`G14}tW0BE$-YVw6h#|!a z37ls)s*@3;UDUKd=vYjRaW@3Av+L}&siZQTw_TPAj|yJVAJL^@_pHkD)kVf4$@ zb7bVMra6;%47I8h9wo8LnSY^>tsMkv1|a)i&Q#zrwS^(Z(cuy+i(?x?5eibVzP2OY zG2a?9RNk!AtvXtpj_G)pHx0h0jl_G{e?Y}ymYvj@+ z7Ih31s`|UZPEueipP}|)Y;uy4^FOQFo1C9o+VVLnee0$S?ow`xZQmAs>WiX^%&@S^ zXZ0p_5$k+6TfzXu7xcShS~3;D_%aCI2*J(7(9o4E2D9^dbvN!xFJQJw2*pvW7|5)$ z5)A;zp__>f2YRHhx=6=8Z1biVuH=Dp32gKl=poDRW`Db?1I>YJ_^_Z$a>)d&K9!dF zZf8fG%B*{w*K(bzg+QOpv8cwZqA@4pQBpTp#9?* zK5`5PJ&d5{X?)c+0PdHJ1O9?Y*k5(OtYR%X7qv735;&zok?7#u0cafn8YWl(FVGB{ zJXYnx2!3k+mdQUU*_n>7b^5hiexhw0%r|F(Z(I6&9ESer^}8Vy z7`5hL#cwopMP?```!ARF9*=NF;qV(H1vQTJ?uFyfjke?BSAeyDT{mD&aqBmPHD6Cx z%1T)>xDiH_bk9E@4fOz^!CrYS48-(|`>2+1>KoyF24J=RaGC~}Qm(i4{is5RGsG>k zvy~oK=l45hZj}9bZQi<`mad6y({*E#j4MWQWL0o;q@$sCI;Oq49$_sB_eJ;g@12c) zRHVOPv3xA?A_e0^p|km1lSq!cS|imui`#wb{kwhU^3ijUsY%m|)TViR?ls0033Fq-6S%&OXx zuI!32OUCV;`b8_+uasBv-_|mT(ZJy3Pja}5&UGIHL<^vYPGn6ptE!|MyPTIg1UK${ z3{H94S>EmY({4IeaFe(ygGP*luiK>cmE+N}5&2|hCL%JA+?os+u5eB+Fs;4|!H)2g z1xdkF^qrw}Y}OmI-GKi5QnlB@-5G@-`0MW%4YKT@=6ke+Sw1A5LQ+WU;dYr zh5;-oW4F^jQgIo5C&p)FLnKe3qGKRF+YiT*r_^a*{#o`dl9tCDDy+dTHgfu7YLep+ z$;jo#o&2~&cX@QBih6HJ*;wl1w#z-ZlxYqh{1hOw2Tr8zK9W0A(t17&Rbqv*?oN^_ z_22b4ON_5&vUj{M_zR{B1#O`~iE-fBbm`LypDAp`2oIQsNYn_Zsli|9>m_a0Q` zD!kA6%r2eh>5$sB6~&nL-8kTeS(uu|OhjndS;VTsL5f=hAfKZEiC=sBx6YuAt?jMt zl`+Q&=1H4DmOvh~Gk!kj>ZhgYBuks7RKqZZpc3MqLeg3>`s0}2{`65@d1212s_8hw zi8kurPBJw5pM-|Cfbs~E%r&t!sQp8wRw>P0?Bn*AhE}Urd|Lr$hRS>ZW~5>lWrbl? z>RcP`Dqg7y)RDOb^wEIc5!*eWA@6aZ16U$VYkI`XVgY&SbeboODmr66OnoP2aVqz> zo&JX^WI+u;?Qt(^24CLP`gJ3KFeeKKU;TP=Y95v(gY$>_I){_M;Ki4+O=)17ZaO<> zBZ3m{PBSMCWb-#bix-f957kNN{0kJaohOqr;#~WmKLP0v^g#S?S6H7oY!CPY+QIXJ zz@5H?5yO2!AXD1QsgErWR2NO3c>*NQ31B8f{4iKVk!6E{^0xPX#ekuMFd)lhi65?v z+>a=^^4m)(twZJD$H%<}z@Ge6`{e*?Kk{W#7yor~B1Jh6sN%0pcu_?w#2E-j7jVcL zoI@nEt1(J;USN#-v_Iw3BuNz4VZnlPP?%tC&{qc^(gdOhCx7g__7 zss)jW{yap!N@EfJ%Dq@3;?_*~gmE^x-AZ#TKrHYF=?*!`np&H3>NtLxT%p zD2ZJLCjT*OWi4n9!esE`-cqfQ%Z&Ax-8lD9JD)?1+OKd=>UuA1Q1B9qsqFgv`Iivd z!>qo*SSf75zDtWmy^CwkxmJyh6k;wvjQ2A=EnA6?j-X`3jTjjtd9Hpg7b1p}g=dGs zgt8F+tG{pCpy)ZPRedy5S>+?3ps$5-?C-b$9Xk@{LTh&FQnm|MBws2Qww%e&MKFMH z*B;q1?qq206v>Wr@(BX(Qr|LE{Y(U^b+LSbJ$T!8VfFSK$JTAde;Dd3f{&`?%XuqS z^jm`Ffp+w2N}eg>5%Mx@-~LnMUK3E!fle@6Z@Dik*cgo4R4R5v3t z$k6~0gB<}qOeyn9>jPa8on!}^aeqtXfVcl`ChQ~!a9_}DaJuXRMqsFn_U}_;T1O6B z@Wo->^3!18PR1pHjP#(Vj({XgYuQ3QHQ((NFVLL_#9)Wgu{OO&3@?bTs0g6Rl2g_R zD8nrDfL`O7x8#-m7P5Z5{MqL4*j^siO#XAC>(9srJU<;9v#9CIaAvX2YR@^RC^$I~AdqR*^jzroLf!kPoyO`C=i(Bw8@96Ei?2*;yz)E%M#Y@`o_lRy-<)NH z?R#v_>kU`AXBC)K>QuOlIUH*Trt7epFF5HZ&R&3j4p(QmlEJGTrY5D~UT_-xSyqF` zemrWsccch8tP?v`g4jlTLVq1A5O(xfuX?pk50zMz+IF)VHTYK_a@2JjI@Lfn*QM42 z7S2d!yaeu7z3l7Jdie!^%ap<1M-@)TW)tX&Tz=dzvZ@ynr%-67_X`$$eFMM(w-gz7 z)o(>+!d>x~KjvSk(FBI^;_L#0+Uux;;IyYF0~ke4o9(Vz*p*{j9n?E0V(V<#D{=n- z7E^y0md0%@p)rGuX8Zt~#MvzZ*9(F#pdrEn<7=yZQGw=vbMk|KBNSaNT?}Gf>x_C5xEkpYUYOLZ>{C(_^Pv^jTt{$bvreA-buwpyp9PeXwPS%Z6a z&iNxo3jGnK4dv9?9I+@Kvv*yp55Y4>O;3au7wHa}%W@JG*|)}`9= zyO+R@0yc!6PRz)5FURlkvkRtY-$meXKC0j@icra}?(#6JlBJnXEQ(gg3C&SfdpWav zHe5a~V~L6=-tE#o0pfSV|!R`GJL?U=xKIuS;ivuH+>Mco3O|L{Fvv# zILv0HM5mkhEs8N9w8syWbojj1F*u$1C!<;wdpn;(V^=7~=#I2DG^A%B9*14=k7Je_ za|m~q##Gd^*=3@`N3Apv)mOAwga~w3bY}MU;BV`S+lldWv)i7vgNXT`=kZ_0fB&V{ z|G%>V)+a=aO0BIAo7#2&xO?--@)bD)oudU%A&Vmezz38W_X`1KJJxr?F$b+lo@R~A z?3KYP6#A#}ZSC#OZTY(lNGIp^(t$1l0Jc$F#To)JFeo(U#{<%j@7zokFx z-BUpQ22ci&%EHu~e$9=Z02XkYyBO$cG~m#UZ@8ya+qI>~_<%u^Q9G6FB4_qCDHpGl z3Yt4Ftj(zxCex)Y(iuTtm;qe6Nz3!-ux)GF{TD;#pOH_u!u}6-_^!hC7qSqjqOhMSmuDK1=3Wt7*zpxDP3 zgK195xf=$B25e18l_0dje%E|VDn3uosuJreC%~2!&!H~U-53OYqcZ_Lbq83TBmbtC z{gV!+i1}RR`0`6*Mn1Lo+%pT_=|#wUVa@>fJQ`_XGGtz9wn&i{UmXCbK59r;K#elM zCO!R|!h;sEOStA`XZHohWcnE`60Q*RBGOQvEbwspCGeOj?BBr#Ow?dsHhgg85-tJQ z{%JC9_!ntMH(A~xbW;fNMM4cA?TCU=WDCo-HtdQ#L6jqGpR`>J zdZ~yM7y|v|XLnSr6M<>MQ7eWnXl0hnI4tjLdX<^XMSu-E$$Ym-V;pGBU5X^}^h%Rs!@-jlit>+r|fELW>p-FcCn15U^HEJ&(w)FcZ*xSS85_ zo#a6%ZVyQTi0IPK0Sc*}U-Sonq8w6wl|E#_m5k%Rk+zew61h}!{{|%PN7GHuXg$`Z zZp!+sq&N>SkjLXODs#7L-661V(Z#fVdp<;+>6&X9Dgm-;Qx%A#(~MFUw!i@ zJFz$^ofcYA2(sBfv_=WNvs->RS_bUN|0Ga=S)}vccZ(Lt`AW_hD3RK;lG3IjDfj!c zeOt1GuNEO?XDbsfp85ZT%Rurpz^~*0!B41(w(oFa$g?0V)W5AQpBRclpLje#{F_l0aPX!@@^L3 zfIiE|mgy9Y(V){`<>TP<)=P?uA5hISG9Gn1i>je?Lfd+GKB(R^H^G>Uz0AsJ35gW( zL4}i|u$n`gRXX_y z^SQLPu!$-3y3!(^&uz&ob;8d59Mk(M1Iz=iSs0j=SUz)_XfU(2wf!m6j=s5C`ks;W zH3GJ*S8#C%=IRltQ+AX3!yGC|`$ts~`&Xr;HLg!pOV6;AS?9;_C}GZwmX*qWg9!QM ztn-R1mCy0#Ytw)VlKd4Dkstq2q!|eS!y}gruWt(40Y$*0%4Fi2S=KsmB;g4pUdlj^ z!q;}*Q$BMjl36s_Qd*$H18nzh+!`LIV~&F`sWv6(3!}fNNse&VPJHNI#*aRqP^%oP zvY#qfTakb${+dQ&eGHI_okaNytm>OrA{_@{IR|gmeS3naqK`{IY)Uiu(|7>Z;%@_> zzovE~KLV9bRuYNZBNZr8$iZS-B#1in?VpED!FW>pb|COAP~tj3Y_WUFlJK*v`n~o7 zYO}w6zzRIa&>i{$F0#@tR2)$iej zZ`$3C=Zo>Xkd0D39_`3t(nZg6Ecp20XeaBPU<2^xT326|n$2`uWU0%T+;EL|J{@Q;3_a>y$oZTL{PXvs?iIvW`55q& z?Q@@osfGM>=sW*49{Ea2-07C*dE^GC41pis46bNNL%6?}%squ*`?4Oa-mBaFnLYlp z9Oci=F8$ApuwIC=)bu#|9qn=0Q58YSuL?<*dIweqV!jfGisjGM>j+-V@xzepT*nY6 z9La+tfTY_}wWFuG;LvZI(Lm)-$NNvihuu*e^2@*wx_tJb037j6Q6P^Zj2b#h@qGQ} z*Q5=}<@@FabbDto)wEZ)73kF0(pURV{3LD6ZvVT;0?fHJ(47$406W&HWc$7v2u^h!ySMoP-tqLJQ_y+`kPtI*F#@jd{X>tZsV_j^OJBP50|q(W(12%0@LKcjG&DD zf*EY=S=^+T-Rw;|%G~+k3bs~;r8*#N|{&5~5ZE!;Oe46C)roS@iVGX(7 zX*wR=Losso6E`5TTT8Nntc#FrErbNT0wX*uzx_XrTxnEOS=NmuiYSVR8Wkl90&1%W z3X~$Gka<>7p^702R-w!?1~G{ZC?F`43<@R=C@M$*WeiC`5s*PdO9EyB36miS1jzi7 zexa<@t5<#Xb^p%Iz30An-?``Pv(Gl}@fK9O8jG9W4KVk=<(AnP&U8I@oR>KgsCYu$ zG_uqqn4~clv_@J;HD$gWY>4HA!xm|}D>Kd0Cfhcvq+``STE0H8#5(J<%C(gd>e}05 z0`|j#)(3VNFuZ*pG;Tjx@v0#|!&`xkPUig_N^6R%2Pw+R{kLn|&eLyl1D8JL#m4A3 zt=Fnry?cLEjJ%ykmae^b6o{k8jp&EsUEA*A?t+LqO)t|Oq3|!6@%P0&v=r>x85dUn z0?~^Sfc;<!3Xn zdqQkgWVK*j%1tyIMh8eC2d;r+tFtm|m5tUQ`uRs{r(}YwDEXYc|HuQt{NisFwf=wf z^uORe2RL9w`*UuA^T~H#a?pR^n1fc(BLxI(zT;g7$&!|>Yi+MO1sroM2epb`r><6W zGRzc>1k$YAU?C-eSe9Ku5qUeU}>_M(RU;beg-iO4lpe$y8m8+6YRD6&+FH zAd@?{u7cEA8f(2u^bIr!wm4Uo``C#$x;}dEKIz7+xEu0k9GLGL9k#n%(4S2e!n7Jg zQUX^`f64{9QHh^NId`SMZyy(Au!ZweM07!H<++acH>#KH-Li;AshQPnIbLyG)DcU? z{oXyZw&Hn1^bPqPHt%Hz$hySM1OnGLck@P*lF62nR-8*=u<@73a@qzJm+ zXiERRmXJPJo3B+@A0fT`;Ppo*i%H(9j+M6_8>q+FIA6Ls`~@XdGUwQcmE7neE3=BC zxM%g(jKWhvYy|whbmqcC%I}lA;DJh%DisKzIwXH9XB7r?X>ZBHR0H3V<+poom z^IB6Hi_lQ+g~_UN*gc?5&OsPn2DSSxVodf6E&ic0Mp##AX_jD7+i@hz()U1c&^Y6A z`<90uF<=YD)+ZjCDboufNn5YlgA@iePX#Znh`d0BnwvfqU&wC(u9dr0EN1B zu_{uSJ2?vFK<8nDWpNf!IC)S7`x8$BQkV9EZv`Y{{9RrCuVs82RdD=O@o>Fp$Tg|nC?_Ma*Db2052umMw_vG+yLhC44AJ-2Fd(w$m6G{&?Hy_Bbsy0p% z>@=p7yGoKfrquieBpR{U_@%E2f!=5&B|6R3V6b(riM&nyi8uTbTNb8~mP}YYc60rY z|#9_Xp6%sz~cLizj&{^Z_-?XRh+Gofiy9J#IzrkBNPa;Yn-yIEVcY+G`%7 zrO?f^;!M*-s95+UEagTGnL$|PBCjLh`H4`e)d1bIw^r2;Z&F9$VoWDa9dnsJ3b~+U z)qqLnlxxwxgR^Dh5fhxKq!^4|d{4?9jiSAD!To4A+$pa$v`gl#w@mDjbZ;NzmD_Sg zT;s}zJM=c551?#%LhOs<2s?OCtSTf!1)L7_v=;_<$;UZgE*l&YrnRJKSq^CVz5*M0 zCh9egdM(Yqe&cJzd?l*XI9TweE@X-qq2xI;ab3a#(-S<6Pdap+8DO?gtpjq^PRULJ z9WRafE#qBpRo2>RCO0F!&%J7Y)%vUr%|g3}dG|dp!eYXM^xNGgITgs;#yy)V=@{Ax ztY_NIQ6aDX;feYe!qE1q#)8xF9;Or>BykD25^7l>q(yg;=(|QY?)4$eBTC`!7q2W5 zrp{03T-!OuLb#Fy{Xem;c_R8)g9=*L!n|fmSRbd&kEEil{l>5RUI^R+2_N}UzUt9Z zE-{??VY?SP;#jP3JwdRRl7Yt1E`jBGb%^)Q?@l+m?7=Sn(-n)YRLX#1gSINg5q55> z%a$Iz0&-vVFX71F9QgkYz`TzK`6}Bs70(DkO#;Y=LU$byrr8wPtE@EVfWeWn0MXJ3 zMods;+;Uz;GjkOHf>oKh6pe~3me*1AlfS6O5xrgFCOfO7^HA8HbeEuSDy3aRsr6BRPNJk z9NtL&O?|Z!9pDtHD8FP%1Iob ziles=T~z^G-a4nM>6p`M`brR)rWY~?iK4JKuR1C@lD$!jPj4d%Wb^BmoMULt8UjrR zMui%5G9FoaQUz-r*jD!@L_OF@NDLv=+1*kSB8I+d=-SVC9u%_oq*U5BFq#_Ggra@dZVAX7j6>dxB5%S^5=OW$X^_W1i(5&etuU3s37&u#iPd4fNAoEmr>`IN`|} zEM0tu_G>S`C-EIF$J(_a#_qWO->1POX+=B81A}b3aT*E5x0k!QcE!-M=u|p_ch%Rt9)>av-8;uVP!!#S-7r| z-|EIE`IsXe#(9Osw_zfR;ujs1lsZ;j98s`}mylJWc)`piqbDrJq(X*|Ac0@t!r*iMOo9a5ZX!Y!ARffapC6S?d3YI! zDwp!FL0_>3&WtRJ$d0g+_NEHEIWM4{&^2whVnJdG7Cah7R&rZ-51uS~kLc8}nl0zg z!*eD2hsYGw*7N!7LfS*{zs){P5jwxHSL$?j9pN-P9!ZQ+Ymix zK2|e?73U*z%6hBI+#LHM{CT{hN%q-D{;(PB4Pm3CEJC%zK~=_fnCZxLPp1x~UHSUBW^T@+Sx=64pY#@W2~? z84<@E6Z^1TkBTebJ3H#9>}_bZX7xLO7{(u`LqoD)h(SKOg5kN0@dQL)G_PQRku&V2 zA1NXqy5Dd*TQ`kX>;6kUsdej=;JI{z`+LdPsq}iH+x`lKkw@s@cCUiHIT651i~&=k zs`zQY;t^&iLL^i$u4kvpC$qjGPS%$1V6)CodylY=@N#;agiwwh68WZyKj^@WY_Y&g zo|dT}dHcdU%$&D-DPDjP^?0Jr?!sR&^8fLtl52eL0 zwoUzf_?dV^@qJw5=$gaC@O!?JRK@ZA3V>|H+*6{Mg%wi$1t#KdKY~P2nz=mr0aJB$ zX>xe+fsv$lQq$~)v;As2KA-*ie)fmd!)2d>B0<3c{!XRyLdnwoF{p2S7%G)5mk>P2 zuIClyc5;?!O&O7Du}*B-b)(a(79YY^{KL!|K37oR`4|TDJFiHf{TR|i8eV2H#}E!2 z&E2hDt@}}JbNGfg8oFrYjDX!yhKDF`QS&>;cYq2Pd|_-TWkX!fV&ib^CBxt@~$w< zL&Y!_0X;0b8#OjMijY->6?%}INkY|PJ1fCSF-^nDYhGuj+|V~h=k4zRhzp;KZ6WB& z+bZB2qNg0trP{~P^A2Mp3+yp$A<^|W1&5rk2t3w_*dh$sE*`?=d-5p(AF$}I)6G(0s?nI@jwDX9M|43W8d~K(x^flx zZV-`DD!MCQgAjufc`)@oWaF5;j0lOom})LhnzpF!v-r|uWWF1oKM{55lYw}^LtgqS zBR^XeF6r;`=$IsfUN|1@pd-42%Sm)2%k+(M;Fr67SUs)Dzv7&f+?Vf<7bRkA!LD2@ zNj$9!!%&^^wT+1IlLLwk^bWYdIAMANKAY+Q}@c}n1sioZKQ@*w7|!6f@F4j95IZ(HSu@cl*=eS!m?-wg)> z6yW!bhvLLNLCV|w?1&{W|A{Y~>k}^5v;=Q(usJW~6gU{t@>;rDtXT5g<6`g(>F{Ro PCy0}syKUvMvq}E~u~W;S literal 22314 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ΞjJ9T=RAA$93Q}#E24f=hzz>L5|d4H%RXAuZiFm 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 VPmq9BL+H%1-D&$$dE_t8{})@<+yMXp diff --git a/ProgramScreenshots/SettingsSiteOnlyFans.png b/ProgramScreenshots/SettingsSiteOnlyFans.png index 6cb5353ec7114fdd34b24eead85de2145a50e350..f4186d772af60cf9914e606acef5aef8e8a9fab8 100644 GIT binary patch literal 31255 zcmdSBcT`jB);=1$*dP=YMIxa$QMy#YP^C!kpfo|6fbbfmW^f;5rd zoAeG6Iw5f1p!*#6{`NWhyT5Voxa0oekR&T>z3W}GJoA~)jNe@)nX{)Zoq|9hXXRuO zsu0LwI0SM;=;U$mPK7j!1^DlfqpFM~B>Nl9EO>GBfrO$21d@k7y?g%{cun$1R>u(n zIro|P?@*mxx+w(WmMMpjPA1d3$YxQY=L|n_R!3^Jtnc8hWABYU?QM}D-!SaOblGYFcW55xZ`Dim0!#Wh zHHP)v_22#8B2H78I>VPmQGVWp3A(M9v&FhSXXGw@e0f_RBeSnxg}VX^$FA|fB0sfw zCs+4WEV(S4lFP(~jo)5bT}ZM+^~8R^?nE*?oX$yK?Io?suw z(QWs`2pVb+{861sjchER7C97HNE%5Z7JUv2aIvQYm&V_ zlNLvHgDAiAqnr(o?};{r&4RWI?>2QemJ`ayA0oSoP$wafOj_ov85pw3Jt+pSIL}(W zglrTFr(sui6^So59Big$OPRl{r`1&P1lRr`Ecn>OgO|Xd zxa#*eOt5sw`EsO4zw!$mO@yvuQT&^TXB0)7xnZO2#udiviF?~r`?P~@f<>FdY#DS? znKOv~X7`-JI&TBwQ_}PeC-YiIn>eMl=^_$IGsJeLxm~B31D^yU5aM*JE`}SQ&$hhS zIyyiZ?Ej`9&KhgvEb2ZW|I8yUb6JHtDQhdRb&qcagEQ(89w#l5mJ^ufjK(QcBaWYtd4aujx5R2*s}K!u$DoJe81aFcA`z4>Sc z#YWIu5f!D*P@!{Ida`1A{i;%1Vm37T>@9|VRQh;rALbE4Z;lscRQBAOSlDbgSjC@Q z{*0jmLGAkG4j&UfZtidt%On>sk0cJWyrV{cRk^-rubv*~QZ@dlz?+?I;M}PEZ9zY! zgnNs(<1o{L#^Jf#F*P=9IBv6wMz1eS_F2NL8smti&;Bo>X1W!IDlhGN?1YqR7G-Rx zh%M-P+f{pjuxOFmVPwIdx<$1-vho>smdmR(zHUBCeB4*P{2q_u6459gx3Ec>J~u8l zH%_S5;d<=QgU}S?C!b_H1wRad4CP;ij}=|xF9ERxa_dE{?m>`JJVyKs6898EeD}ds za8r<0YU0TtkB|S|M=2H7TrgpJgv#K`2=BAj=2&0g#z0K#8 zsYgeK|ooELiOn3Z1V4v0KxiN|>1HyS=YKe4FU z5-04!wn*H1ABBmqbE*vlAu%gf_)e4=>#@B&P0~H7>HZ8)N}g&HHb!(%Bdi1Y$>S`o zFz>}e(l3RJ>w}T7u-mEVHtb_`EVd*-1FmMcq0S1+B3CHr5^JJL9jjt@S~HrPGFsTs z&Ot9pkC^m*iJfHH=M(OKCY0Q?*kyO`5pvIK9x*WzZfUXnZp*N9_=5*>d|8JPv&lDE z337RW2^Q(NFoGrU`b4#Y$QI=de0PFSu#w)%ee8_Y{y%up89lF1G)BRGs! zAM3*+u?u}4WX{3FtdE&ae~WWYLFD+h_+N!zetL`PrJImg&p3|j)=)mRd?e+xZe5Wg z;~k2e;GSaNR2@Vrp-GQfHK)qTXhThZv#F_}IyS_*)I<3=GM@)&4=Yx^tFTseHE?eu zCqirKt@UMw%yIN&@DM?3sV!mV*=BZI)(JcEOI|IPmIk~`hKl6rY%tz@d!qQ9+DZ9^ zO8yELVQ+i1xoVdOt#YdOzM*Ik(#tsTyNBw=DDzBL5!^IF zsv6c}Xt(k~XPcTub(Ws{3j*m4`?MJt!lw|2@*F*F6v8gB-0(EPO>%Ge?MO&$f}5eC z>)t8_Id=w%g^jvw%zkA|s;|&0%6gzkF)}i8VzAWFVRLDSghU0{%9BQ){ip>0+T2t_ zR@jU5-XeO5JSR^-lGd+9aPH_v>`dc^P~R*5oeOz}Ydf6#DeuA)tS(;Zso^4>FIlB- zB%OWehmU{hlvqcvlS}$kT2qK^SrnB$rx5toe)@jtoky_3P5mB23d4YP6aS%v7Y2nw zw*7%h(iu8?g4qUsr(`{Mw_2Vj%q5Ggw;(7o)b!gU#{2MryRXY|ve-#Hd*cH_pS9z1 z(rVW}4V1g3(+}mXuEjXon`eUi%F|MR0lOvDSLS5(qS6CvqXAD$2e8vq$9Z|!2H)OA zX295nK3z9Q55IiKhy&i!UX$f~(HK5f9M>L|s)8^!!?^AzuFlOFW$%1{cvG%KsMZMQ zjB||Z4jPT}bsBWbaERNjKvvexbzZS*!~{P|jNQoTGp>%CVdpMN$gh}b2O zX)|HJBJ}qBcy!PBUQPDoj;_F`D3h&~D&{;PGo226heGKlw{1ntvTwM5u8nm?w|K10 z(vazxCm#sCU%8y%xa!kf_0LJg1nFR6Y*6G@LV|8r_t%s=Q4=4Z9&u)5P*m$HcgdlG zf&1wqFEZzc7vkQu_%no+cAe9*%R(Ub#|j2c)w(IN?Xx*8uJ;mN=*?>Fw{z|tvushU zwl`p#OhRh#+cwWkytk>o(Og;5ASI3yTH)%QvA;1Icq)k^&SN5t^B*}qPBBkZ zYPL@?5cKG!Tpsf5^Q%a=VqRPM&bOIm6X38}nSHsu7Vp0f?PkSO8?4lPtjVIa*cIEw zuO*DEd`bU;cVk&re77f3yKKe4K7Qif{L&B_&(o^6UIkk+?G%{mF!f{`uxs5~qu?#0 zO0M(tbfM>#qE#0gT&4H3ZR>S+Tlx5qZJU6qFGK8C2Q_^4G}eM|r7`MgbZJ)QLFKGj+;g51H|Ami3(kt%_XhWY5zT?(A=}|c6#1BElXS@e;LuI>o*|^N`K6!8g_|8Ei~a?86evQwo}oT^y_GiE$kZGd3+WAJ3RZ(CFx(PRh_#h>3r6>^0x0KJx6h{#C$^UQ$rwY zM}zhVFg&AiMr|`|o>fNe`s^*ldCDOCCk7v~{9Y0%hK>2I2enZz3uii>g0Edd_>f8N zKoLjzX)YNdjz5>M2kSL$14uzrQ*&at(gT;m|9Zdm18#}bTfb_hwS02k$XnWbN!&0ZVfURt z<0wqj+O4n2kO{W;!#Am&i~@=Y(kr%Y04_55CFpXI0wW?trpX|>Z@QZE@jN0CX&ivK^0g6fY`hU&LJ4MpF#w@qQdcqR_N)@Fz5 z-1)SEmj+wugHUCLvz@%KXDU_IC0m~|Ie_bs7JJM$LAAW~#uHasj@z9!)W)Dn7Nh88 zg6o5?2v5}bQ8>p=gN&VTHzIb^^~al`xl+ezrIevB6rqK$KbjB`wdDEh|L2L{S_JCm z&7#8{!rNpvqbWt>CN!K+%@Eel8OzGfG9}386;$NfE`LQUp24s5yuyUDgEG5K6IJvZ zWi7F<3gSyuUn}Q5E_P9`8&rzXpi>ks+l`5$tHjMlqy{+FcXIj~+kayIPQUsKRX>iE zI;_UiY(+CqEMM6@7R(1unw~gL3DFBAWqIOG~+Lal*_l z%foRYWM)VFQTHvF9PErak0q);s2~qXlVa zanc|Mo6giCvKr{Q5?~aOrB|%kTfRA<$q4s9RX5obWd^`OQ4Ro;{Tk$il1G_)Unrqy zf0kEr0$o&R*jZ}*Z>fky21<%895v`$1>)3I>O&a|io6B#0#)Wqjp%)BYC1^c=d?MNYq2jmod4IR_eUbS!gEEE_=V)@- z=`3R|z3a28mC=%WTxd#R-Rx7+V8*SQH?A7N)9T}$F#yrWk|Knd8fj6Ady%934<4@GfzR$$6zX91sD zW{n{0`^*YNHa-JhINnw9z=&URHGGf9&`1^4kqf)3+b9OKM$^?s*J% z9^j-PjqYy{dHuZ^k*x=p5})MLE1szf*tXuUY4Z(OPP5M0?zGD%iQftp|)P=uI^hAJ`aCvAig{t}TDt0!yV67?~2G?pu8#7A{-Sm)Dmwg=j1v6Wk zh*e{-{%}aj^vHEHZX=3rOObztsy5EBo~n&Pl|%M3j_@7Nx=hlH_pUzGqepAG9IwJ} zxWf-TQ=kJ;Luho`90`wpS%j9m9f$gQikLTkZbt{gwD2nYka7XPWYzO;uS zPvYOSVfRh227{)!k)gx{iSyeoGyx7u^h|6~Dv#!8UFUf%xsrvny_TbOLh z7opK?B!iZ4@v1;|47>LMC7|;rQxlPGP|lRFH6t^5M11Qx4xi%|wA-hqjOpn|5h((F ztaqhq>c6Ub5~+#2+j^$gd*OP=kMudr3-gi(&6*|*JIjoLhn zfmm%%JxPVbsU)-`$MuTpR|<1q2tg%41~qL4bwRoh2Xcad3pVopAmTbU(h#m(p>=I{ zOn4F<@0p*;qli$KR2Te~AkM`cRFVEa%V6#kFLjJ3=)*m=BhEU?o$xbVs^D~jb2Ce{ zsUyIBa{thj0Ci;upAMyjAh_ZXPX@|!Oj(Sj#nAP6rYCn)4|bexdy^C^wYPqF`DP3q3wv>)@a^w9VgFUpSJSPXxDf)ubNS`#2rVw_R+UOW*TIximA zXirmxPLAuD1{5D9k00O=XYwtgWEXwTDXs25FMX{M$LX8A7NzYbg($!#!muJ1)3&#l z-_dv|Mp}V2-QWp8dE%nc^~i1IoX{2{x7gj{77-3o?5yx4LAgpf-fKfXWtbOgKfrzA zntliYzu6Qo>M`+S^t0wI=cPeQE%`O~t;~~f2P|*H^U`>x+M}__Van_|Yna&i+Vf~5 z+5*SJrdnnTJ~sWPD>ih^*6_puzUO(6^oWaef>rtv7gUYSK3z-cj1V5pRUNn4kARa~ zpTQuLHvWvHSh1@8k&+c9SDRW8rVa*O|ITjb*tVkuVP>0^-(64qdVwr1n z;!Dz(dsk{mscgD^~d7SgAmL!s~t7oBJ8jp6&I1MqH*bs4dbAK#Caz(~3Uadt1tprWBXo67VB; z?vm>MyXY9sSE*Ul1HQ~x%-q_(i5^jn#3!`ByFjlfg;2PJM9XIQYQ%kgRnvGU?_%vK z|9Jf5o*>3ogA_BsPeIyFE_w1@GcR;IiL^>fY%jrEwQ8%*E>s*Jr&XVnHhdMf|Dg#Z zbR*RdC68*XpY2FvY~se--zz?xnDFMN^TI39squ0v#N;Mw=19^D({zqN*fmaur0fdH z(>>F&kJ#8*HnyQX-;ml)BHrz|`(4~$wB7cefq2Od%2YpPPf73no)LJ0_eksn8o9`a z+xuV_g+}g1`_pvZP()DvHLE-axK~k~n2R{{K|YQ`&PIrAY``LT_V-Rq9>F?linXaq zMleBD)I}smA3YoUNrC+}ALVp7JP$6h3 z>>xV-%r>Z#)`Gk{&q*KdVr!B67roFhSzy&}YPZT_B|aeYVrQKkFiJm(&>~)<4q4L{Oo*Bb&nMF+cH6X?+EzPECs^IKx=5SU+N{o&tdNm| zHh{%>B}Ba2m?*A>Lb=`}zKXW8%2pq#JG>g7HtD{gD`S!BFAM4hg6vV^4$#INqX?bH zt$DbQX( z=80M6VYS)m*?h07^ldw}h2ZWsd%1He()ST6`=ZL?Y6V%?kun=r#SbWsrtKt|pvNUW zi4|}PzQZb7%p3{bC%`3-H%t1}ucy_8m(ik&9!RVH@ELfovVA>#tE1;~V}P6?-VHJN z#m~39a9tF-l5)!|kuu_zq<*(qIO!W(pQgB`IJvaz-Sl}r&(U$$C)B?mkG?XW zu^-PF|H{?kl2lF9i{9JsF#K$sY|OQvv%K}NBe^0K=OBN$KdUCEi@TPOZ8$bCP zi}f0t5sn08iR%(Q3vkrkgT~uM-qZB(@vK+53(>QB*KLZ;Gg$%?uqB4Y$Hq@TGom$2 z5G36}?)W*g!zuKXCH84!NT4J|hHO|F1WYMQBvZFwg+X%i^SZryv4y`?)AW#Y(Cq5y zEks~?`a}e2#bL-Tt~L%7iZTN>>g*F6VFi=VV&8=A(J0Sp%Ig~tP`Qi3ueO?2Lm{H% z*_xf*um;}&b2qeYn-8If)??Wu(pLlEGa>+JB>z~i9B^Calm@dL*NZ8!c?mk`M^ z024wWy(|{Q#)m!fI{;?&(kF?~apwfsy4=uTK1K!t?`6I{&lmsO&d^^RnS+H?7K#sav$F~Ob8R__@SzV){df(JUiv#N|BkXRZJl0ZUv>tg{r>eB#9y_=|A z=VdLj3A5K3%f>qm;M=dUxfKpB&2E8QRvscY|WhBFw2J zu-8wlxpF==JNmIxbr$Mn)%oy(MP+7lE!(>H^F2XEceRY_UYAV27tv9{EvIEJ50z&K zw`s+$oN3#$nybk^1mO@Q21MhxiEpb%O_P-*c{2>5Bsp%=ZbD&b5x#JD^F|E@b-_jq zO1At5UwaO1TG`=IP0EPhmk z!`&A&mFCi~WqWv{J+~?|T}(70d8_m5OzBHYJr<$SU~z*ac6!VM zSvIei6wU_N{^_mgp!-ur2>3c-kMjkjw@BB>>?%!<0gqRy^0612b3M@)bEfv#ygDmS z^awz1A&EO|gy>IJK@6UMR_jreR3f&Ln^vpXU0W(9Gs?jDdT^-J$gm?vX>iG#jnwa< zo|bL$16A5*MHtS+Q2jm)@`0$(7Y++Mz8WUuwaYpE$VCqj`Kf=JCDB~zf10bNF#+^B zGa3J4+2FnZO{es~eXIT%IUe252b~A8^&Y1L(P9F0o&it0bpcdUjrvliujGjBNQO{e z*q8ZXE+NgZhU?BY=cl?_9?rUZLY^od25GPW8j8VC>FDZ))xnSzI*464CxEHWFf?@E zk|qnCy($RFy$4PwAC3|var^P<#ANLSqt}XvxyGqa6+4UW)x$F*Fvyd$#8Uw#@h^0a2imOJsm#R-Ya8LHUYt=d=FHia#{9zlaSF37B5Qpm^SC!jia z)j8C8)dgP%b^=H2Vuz3NE$cHoV1TPoxR^IOIcSWwHdJOCY+ahwLaQ0r=dvHFo%>j@ z!9{WcwXmXg>wdIw4m*0tF2%MPsD648#PZkw#h0j1 zA(FPQ9Pps<^qWQPZ^J9%FWcY9iQewnt2wWbiS75+c=C7*mPK1oh9>js?Y1SEJte7# zEXt-J%TYj^u#?(+$;s&G?8c5*VE6DVjfWuohk!wjArRvSZqDN;yYeo&?E_^J5>r=v z_i-4^&Tghrc9J@*cS0|+XI)s=kJ`?zgfm3e3yZu%ccmyRJg{tU(9L+M?yeY8C2;&( z+K`=K72s1QhdT;3FAdt6O)_qHOM4xGSf2;xUV9;w-;y%)9(%Q7%+k)5#2qBgiNe}G zyG2n@j+ObxSd8#ylhuxf&ZA8=Hx~7QG6#B5%$|u&)3o@*9X0EOPe*fbs>53A_q*PW z4{VxOx#TTt#BM%Z?h(xuA}{MDZj{1L%RV~woGMiA=3&ST&q2Jo!Jg-RFPNAZDE?V} z@ZWsuZ#4_2B0K#)~<^uQj>Nr)iK;0fTRSI>vukC!Jp+Euv=TjCF}wELxd z>lcqe?okjwwn3PhnMo1bcPn+Ugllj%IytuONBaC!O@HQKE%GLp`*2@zBwLZq^8LD61G`r#?kR)LwP;a(!lc^H=|&2A z!;LB%WNoEpQ7S03lFbvEiSF7T6AJo8{P!ioB8Ke{9m5(4L@*$3b<;t?CBe< zDsmPU0`_7t^(Uk$+c^XX=X*2qVkK~OP5w_QDO0(6|a|4TA z*w#(VD7+L{xsEajEPIUM&p>j&6IVq64LVp-X8`JxEpz%s%4zBI?G74mdc%Ii&!Ut* zGA1pa5E$)89~*G5HMMJs+x^;GY(y)XJ==o853uPP8j>#Qh~Jplx#qVvT4cUkwp5{N zyCY!3j6Vv|29k>dzX9E{myOHNHeW8n;u$K6IN2dS;rr9h#@QkYb2~VgykZHqCH{z)y{Yoy$OC=qSUq}VwoE9MuzAy z6;emL$uUXwkxmYBhj`4T8>B!K<>ccJ0mb9ldfD=-};f~%(o z??9}cEz=aj#}bI5!>>pF8zY!30}$R39*To3W=O2LenGt4Zt%i59v+rzqnv>@ySC4)V+lD7l`@f`j1^fkOIgg5Amo5=u={fJY@8(mzX~O$h3K zsQT;Sz)v2AsppTTbKI!2jOoQOG%Y73C zWOMpZLx(Zn7Yx9TK!5e`oxt>Vf4$Xi?N3<~yxz6O)6uQKN}c3!v6!zK8az8U`+*6= z4Nwa?aaY6Im@+7!pL1XRSUm5ypZkywl4pXCaa|PAx!%LnNDw>22D7~*i}wqtxA0)H z4+Et@94L!Xh0xHO(9oCLNzW+z_yKzh6szt&{H>ILck^ByfUZnF@Zwbl>I{$E z@gvj`3}I8BU5D^eb@JTQU$UF4D?n}Wq?Fj_GeWGD96VnW66W>$*Fe{aLGK8)&K;

E!3^wP>Oa>mX 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%0D^yp8LUE3sMj1M$Tzv8f?>& z>bY?#rnpiAec?5RF;HiFpX9mS(3sIYpvlo+Q91f6voHFqJb2l9^Tr$d6df-ajoM3! zI1JB6)VuD2x@WgFqa1h+%P`U&yNa@d!34Zpq%=%A5;-6tYaJjEo(yx+sY_9IR8xkLb8v<<<0Q`Ka)iBfTr6J=KNAd2Ci}ZYFLJ8itS{C5L8^1Ln zzz=?z5Ehc3*)!iP4eWC?sidRC;#b3VLEP=P$HhX`M8y>py>e(7Of}zuD?bj=-2r5& zpY{~K?uQLRQ7PxF#(w&?CX7${FDl9;mbEt6RX0w z-Y#c(oHFeF9q_Ll@s?&gTUs5z)=n*cKkQmPRD+h=BDYOW*id^)3SKlN5H*+Vot7m@ zZ8DLRO4^BtdUf1_U5q5`@xQx>ZOqPB?diH{r*+nnS)t?&inTUw7YU|r7pb~-mj$HT zJv{TCaKj3I{y2t5TXj=88tBKz%_H+JKiM}~&MUZ(>`m)&pM8n#;)Fu!N!p%nM~fslJrf8gjTr>&nkfBn?^B$`NGUC(YYum(B< z34G&(8pGWl!g~kY{H$!hj}JihMjl!Rvk-k5534s8aI|Anjkt_Kta zCmikeNIz;Hvwn?h397`j9Lw(Qj@$k|dvP|O?x12HKijo5@W!=x`mX;Zr7;g}Iw;74 z{qFg9P;tLJRM)7Gr>a5p9;%sHvL0r!58`t`&$AFsyEC96huGI(^)sp*3XHHHIPlNE zw?fY2NL$YAo=d$c0Ij4f)c$U*6(!0`$B|S&N`C(=mdXd6dnutG&Yg_bP39T(niUk0 zZ$7uRQkA=CQ5mPW3U)>gif%~>d3kxrb0$)gyberO_^C+re?mYHzSOTK~TNM7iW%l^<{w23VyfBoq?(q$^B14Yxk+)2>+x^eyFSqImw0i8)UN`f|HFs_hcv}d3$?|n51B*05wz)*KMh&+8JFv5qG%ocRPAE;*HM_7b+OhnHW7$IE(aFvks8k@5 zu~<@UriY6C_+D z0mQ!gPB`o`=v@@>y7SM~sSI44moZaIvdoF`58;hy)4SH~j@@N=GW5KjsotVxe!!G- zdy$OchBgb=;)a%6HjlW>-GTTt;LdElaHVR#;iJf=L@(kDQ^4MwBuL?lSPM(N2KL(U zP_AynU%iMb{7y5h;@Of*>WjmO%I{99aRm{_)m1!BwHW5+9U>qQxXgPgJr=ijO|E`M z3~hf_Ghrjzz3Q4FP*enlN@NKfcJ{%)1h-YXth^<$Rsd2r# z*=omVkXd6uj(^!aKM=7RKj_<;pBKo3#>}9z`p-XNA3c-1uSZE)dn!cNr7fE>qM18I z@b>bMmoM(<2J$HIW}ds~^M#(mH{tliI4d;H_Lj0K`i5w|KZ$Vi==l*zjpk4az(Z#B-iN1vsGoON6s8Q$i_L zAECey*rY|2YS(E*$&3ogeE5-v14iBb$3kt>_-5YJ3-V$ZXO?_MAj??u*YhY%TM+~DT$&cUF(A`#*#+&rO;#9V?)lP4$lxtUJ z*_M)}R?=9u`!04>eOWOo%#-KqYhf2mflwn(c4j=Ss`_MowyUQ$XInn zm1;0lS7l5`xTkt(o$Kw^e>+_IL=+zf82YFMCu#0rl<{Nle7QP}Wko!fC5tXpM* zgMnfSdN4=~Fn}(4m0wCBPTXu5iwRJ%i>uY_H187(9#_PW|bI`dp@dL+PDc^Y@mIG<^_ zWIv^PGP!={#G|Iv^&@+y119|n?Bz4&<(ZpNIzxhpMp7T(n>jc0k7}s5_a*FP%;nb( z7pB}=Z|`(+cl$9PA z)gF03Xm=k7h+}RU-T$~I@&WMl*U~IOiR)g?AL08tjKCQ&a>5A;$ao;YY6T#}^hKa} z0*9I?SO&)A2mA25`g}-O>%}m;M=r~+sfovKj5xZVK|5PH(w~20Qtno$f&PAmyX7L{ zfEw85^_S5%(384VzfKW<-Dz&V;nEJ5vG%q;#O2o~C>lbQ(ISzY%X5Z#myrnD?{(AG z$*Z1amN4TcT-P?_HNk1wUkrW4p%KXlG6N!>Jvx!1aYUlS0k5gp0NZo!qUL!imj()J zN_u|Xii=odrEEF0Eadv4tPret%lrx_RZkXL4)=CAI6FS;Qr@Fb63sxr)F6Es>3^-l zQe!uIlfdn|Ao*v-J66`HZ;47rl^?ZhY1QCPDqx1ovVm_C*4_+_I6fUftk*LrpeYdp zK*N}Vwc59wOfd3Mi1PFNyM#i8XNK&InW3dW9cix5r4$>^eh!r1^RLA}V|Y5dHk58l z=d@E*eZjcQ-IW&nT>sP6|38zkpB5sV#P_FF%r{}2_BM&9{?;Wf2llkq?*z*p$aVd% z+Q&t{a8S(T!0n`HdO2)=%0 z(OkEF{tW*?M%k|bIs*%nl@EDuFAo-!E4q-o-!gKEl zM;{AnEAOU6lnMvxNA%g_c)%o)auBp6|Na0I7h`ab1`t`~yW1eNS^2p1b`6EvT~SAp z6Q&pT^$Zp;A4PAm5<4D$!ZDIW-;I!|BG>gdJ|94gX|&8cx?-{7_2pIq%_hfNl&U*U zRfb+D^Q2!KM83^JG#(obYjT&|9u#qiy4TnaKC(h4KdIUjN^IPCR|}4FE`-2 z1%35R{|wi(%L1Gwh09;PnMZn|gBeoR-yQ7Y-b2!=oa-^{?ZvgU>gqMv@yBjIu+@O9 zLK$u-YU@$$)j5`0;BP6m?yiEwDW~rpUZ&ECs0eT{lgrfKEP2!tg14U5T|}-7>NP&; z&*R dosOLpndYQ@d4LeoZez@d!P}YhcabWB--_{qVPsQ5py0^(;;|7Uz+auN?kY zNo#yCxzp_KLo2iITWV=~;y=-vV?2t15zwnbdwed+cOYQDBg!fphdn4KJBrG9in75J zl2(Dk1uRkR!W0ZIG>2s>fVak~&FL$3OUTfPO!l?=)WklW8)UXrcE5~UvH1p9ukCBp zeLLdwG{0L+1L5_3JG?+Hn;}FF2H7{1#A#^voiKa?IvCwtElUUZ@Tf(Nh710@Ny`OO z@pjUVtq*rgmj4X>Ed1HpNBeh&G{j+k%p*IJYO3HtaX z?t~T^9G34t25obEkDgAWnYI3~VhlTvyfrOM;3{8iv ztFgqdDc*5-@m~Mc*C}J;k?b_x;H5!{(cFn)Q`ojOXW(NC?3tlvZq2#X zWSyZ!0}tZB>>iSfj0W?)ktFEB7Wl022lU~P>g<3&Ewjg^GK>5wI6FM-N8-?lvK#ft~zsT zjLHNu{!;(2sxIB8x#1vrD>Zv3Zf;2nT0+>NahAlPBL?Mn% zZE77mALxPemR`yEK8XG3#)$cm4ZOayqC!=}X5%eo<^zcR2S_)w5|9hq%8R{m{#S-H z$|=uRlaugNHKH<-+2ujOF$AbL0~wKdxBNdK(2rQ+W|iBX>ZFC($on`(mO2zo zU{Ae=5yvMG)mbFTFE6WtEaakb&-zAM4;1Ol__q_925<~Ls{V_19Q&#-r8KaTF~KkU zIM7(T{=w41Pc?fd3!}JXW!%if-R%^k@8u+xsis{@RLwZpE&&}V1%U-nP*gw-pLj2pGN|1T;NG*?{tf0VXifl^7(JMl4`S)HLC?H2C zG?7z)+(g>sm7Uf(DIr&ZT0vffqV;G^hdzy;=AFi(-ds|xNFhU6rckVNcY-v;on4B)LMlV$o@$8pJqP(k3HRd!mPQGznNxm1>X|6wz<@jMW z_Q#IU75*Z$-1sj9^t8p%nikon1){p>S^AqzaYScC9im#n|&=pA$(nx_aSeBOE>LM^qSGQi=+~o1kY! z))P-?79nl@TT7cek!*LIV;JroCD;_9naZ_+gEPn3QF%Qaie4&JR0w8_) z6#~nx{rmdH-a^@hX2i}`caj?8s-h$)@Rm_7|k1Zeuz0^ATQoRAEan}zOA82Fpet}7|U*K)z9PN(;SQ@ zm7=*nr%g2)!sW&cH=de;hrBOf&uI(PjzHTQ22sH%G}soJ>n%>09+iWx0V`lJ?lIUm X##4HK$+Z}V{_VJyAw2)+nH&EH%D4Of literal 29303 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 boqEjb;U|60rfTpd>57KRZD^_T{ipvQkXJ{2 diff --git a/ProgramScreenshots/SettingsSiteThreads.png b/ProgramScreenshots/SettingsSiteThreads.png index 4040752dadda95ac1a99723196ac59fb750d1ecc..773bd6003c5d448af751cec8b57acb45f40aacfe 100644 GIT binary patch literal 25322 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 literal 25088 zcmd>mc|4SD`}ee`jUknYnk+G-P{>vcAzPNQQ`z?rvW*sM$iB-K*|*8Q(`Mg^u?z|m zSu>VlFy3?2-Mu`|bKlSJ_j&($Kkpx9mTRtaJC^Tp9N**eRZ+Tm^w8-;5D4U`oGd~W z0@)1%|4;|_gHHn2tkS@rU5=_ZB_Vn3Oy9tpy=FHQZ$KdVL5DZ*?gQ_s?#pUBLLkRJ zQ2y;|u*)!pK<-A!A#SKYG?=UQ4AlhMOx-E-IMuX?tVk>=Hy=H!+=;edGAjsnzvrW%Q+nvF4LANk1Sc?Aa;7jdN_1STu&cv@=U6@yNJ=R zq1Jo`&hh$|x3>`!)oqy*AzmAH+qt64ol?#-c*dG9jK;$iP6R25Whue}dAK&La-l|d zgb-QUe*js#BvPwJ?vfzggexG9U@C4hGhTo=Rf&7~cRs|s18L8oHWaOopfNFqcJV|j zdyLT`1=NMeEne%q&TNR5ualFh!?wDY?dQ%UU9Jr0=$`dRRGN-|P%3)Oi9^D*F5HwZ zH-1yUBFygYOoL(S_ra5;k8PufdaYavZkpW9VeacS5$&g3M-$w8#D~kU^fg$*8o6BL zVxZ>i3$UcO6Zd!X<#}H)deP{ZxS_XB+$N9eF0SDX$tLUhEE|^xO6?N$DxKT%qNn!c z2y(#K=hvw=TA#+Mi#VBFZrXTRQr%&(W^-*T{(^PIEg$ymo|)xgWLM2=v}|v+4@r2l z!l5#&qVu5+W&7Svm?IFlzSdeYc6(61>3onVOoDJ;;$Gr`_0I<+E?_+8tW37aTMi9p zTyQDqBmBD<55bRV$0=w%wr?VtZ@k}=Jo0crs~R@mS@HobYhNWfTfL9uGhdt@?`7aL zTPlr!K<@AfQFV2Y?K5m7WKKZ0?`muX#8kTz2Q{Gdp&|=aYBe*JHMa~_vNQ(_7xYD; zR0?H2git1RUs+_IHXDPZReh~(Z}p1j(UIy^|Aj=&GaEKiSYWiugeAu==lT0{!~C{q zDoOAPk}h8b{ZiZLW*ebuQcPKVIf=Rnv-Ogpe}?XK;jLP#QV-^=!#Ve+4n3tiCepRB z1urqJBI_`ZjD6#P)#bw%a&Z`f!L5$iehs>9C-1;BJNt9JdYLZJ-q_e2%CJiPa_d_n zIg?2OrAHo+*f4Y5c<0rbBO0AIyJI5w5qqwDt6}2xOD!7Ah3Sw|$9%HH!g+ zj_q{`-XeW*uQAV;>@JAC5J;rB)C)9O^FhN_(8$2{Zo50J-=sKP6z|}TI72YW6l?aT zh(QOjEP=;J-qn<;$*WXU^R;+wlj|K_^X~F4a1zq|RTR?)`E=yp8N$D@k>zMynf)H{ z%R9GkfFp&xx=aHFf6R{{_SQe6k!v@&)Sx1Q| zmMq4Tf@yo8kMq0A>`;;i&$Xp;!-6EpYl`EyKCsq5I19UU^)$kpM)D;!Y&V?tD2#GR zdLo*eo4avk28+)&+{zN&m@SOtNc2#>s8^<9uDKujm@Q~O^qhC_SAJQ&9Y+}3Cg#`{ zr$iL$I1h_NX^>*V+=;_hWIN8h?L7Cw-EDERx;D+og&CU#+A3RQ>4fUy;1%+WR<({o zA?Y>tdrhR{hBJL01DSaGeCo_{$D@VkaTW8t9@XwH>sZ1i!>BKYEz#dLR;HK4q+}ye zFbC9^fI7 zj{SzKM#8|fJrBnZoebVLRJ)wE!2TLVcca5;qdHSC@v~KwyGc}x`4Vr0=WwOMH#EcY zV6|H{^;X4K$I5jg7w$uw@kg(x(+dZ-M~g`toE^c~quY#SQ`mPKgF$OL_05m0mTL_q zNiQ1Bn5$VCM?Dg)6~(!E2ew~{5>Ey;me#JJ_36u+lCsb7x?>ygT@9F~0FK1dw-C71mIN_( z<1Nxkf!8*wvdwX}|MEbIP3$bLyvKG$uiCA+lNzecx!j20vWG{0vK!}@gK}17o*ez` zj%s$?(hx6TAQ(i1x{Kh6)5_ls4(Q95rl-yflHF`uT$(QO%iO|PwYz+~8l-=hQ%PW$ z(9U&3+3*a%;oau>%1#+CRY8gTA*0*{TtH2IRgmBek?cJ*@MJLc*7rKzJKxBg8+}bp zwH!TNBWkO~8C7OPQiWlmz=k$E>lHE*z8tP~gHZ!y00H!)`Z-qNE+5K6tEy=g>X`+7c_U1F{ zrkwR0k0~|7@D4NDG5%>kv~6u`dwcWh+>l92Bu{}m(H4G|QP8#s&Zc9CLhc2d5^kIv zUq9?9);@aNsU?j^EeW0iaV6wJ)Fhp^pmx6l z@#PV+vDru~QJb@o-OZ5ZTA^H0)qQH$QPpOfO{;Pvmu(;SWp=^bLYu0ozNdl%PBo@` z=7&7*4wuNY+xXaDA&YG!7ES|abL`>VDrrFMr7v=!Tts+d+X}T+cFgx0@RXL6AjC9AAj8m^AoMXKe zffikA<>&MIRx!I4A4aIIBvRxkp@tZKGvlSNZO+{KN4qp=x17GHxC8U^`GxeWi-9=H=fFszM#YUR z_WQ|Z^emSXMMqW$=C$?+*6-J{=aVd3XCG88FcgHUvB8wZR>E;^Gr3}fFRy7APkNC% zwRHK@l@lY+h&cC01PcY4%=G0VJsw0LG;j64)Xr3Ieku;9l^a8f=vB)3qHAIX@sqPv zuytiul$V&Z-FqMVl>niQ%`f2SteEd1mdye&{*uWX)2n16_jG9GPg{z}GOJN(@ZOJk^k3p-(K;Qa`q2 zrbU_m5gqQK6++u6k~71o>~hnXYh}F*Y@=-`xHf$8_yMqd4#T4_WZ|8d&#m zngxgb793`qT9<4WO|CTmc2qowbHUY!sLF-qdHf!8|JZ)^NIrC{O z%l*5-sO6H~LOoZ}!Uk}bf*P=UURI{gea$kmlHrMKzKOxuTJq5XB5^ga2$pQbBJ6+& zWer)H?3jd~B{2$A(5EzPlIG=8gG4ht$|i5ZhLiK>x@RBvYIVm#L!^CcsGb|ACGE4!x}|+Wh{@-a1~# zvoIC-%Q{1VP-s+@B%tGci7 z!E-6=M`%NCMO|!)$To~TNp6>O9pOb?A9Uxqf~e)C@w}_9W?#xdm}T z_L9e#gzoG^_#j#WnZ>xCQ?r!7R3k&^xnP+edCs%U&En+cxGj_`Uq*+c6;$tU=0kxP z#8dz?eCYkGAy1<+1C_9ti}c972`Nn}gVnsCme)asVT{V+S0d46b5UaMtBs_U8A?>< z96Q;cZ&YA2bakNIF@1Qt+-=1&X|(xxh@8^ra}?n^_aY7jBYZYHIU!N|MT*Z#9L_@e zbP~T5Ax%5P6DtnC@KxxlkyFXTF-b;EX6cYjxZ;GfL(pN*CHk1|=)9`^9<`}ti1=n^%PAbDZ7+O8)BB=D)W_BKk7`a zqiT%{)+_3kVZ}M+;fEDBC1vQL(ri+iqDt}C*kZ5Rgce(2o1YzJoLE~NcbFS2W~RE0 z%s`(SG=&k_`}EEpvZ;XYvat4s#p33?S<=61amR*kSil!Pa5v21}LHM_p)zn?C zu5m4IR?$S|9CRg~%qhh)L|~T&%bd$SjE#nB&fLhiQP*q6a7g_&LFkr-euOs&S(^t6 z&G2x;b-x_#!nC)2xxA-tA&%1r@|(3cer=1L)1pA5Y*y0D`=nL4CPMU3@*VbJEzL_g zuZ-clwOuv&_}1UhJ?OjG@F{hK)nF<%{&_RbRl}A20_l!TO{khVV}^^-@p`Jb*zp9c zUKVCnSMs+Rgrq09$=g=1^f9l0zwNvBLc+^DCpV@iUAZOjjL59KEK`GwWr@xraL)QX zcdgjbx{8e@cW}yNA1W-Bti_Xy7|}Aq4LTQ%*c+Zp5pe`R*;h3x23KtBtX79KSKHdf zergyO)OF04W7e+Nd+*02>e!m?t()~IEhmsh;p68&@9600Fx7c(qv{}aw%daewhB56 z7wMGqtiy9J#v=VzdnUzjClra=VFhKzc=D>e>sVijkJUG^qk}J-koV$_(<2RbuaL83 z@he;gg}jU=ix(2zf114im9fuD<*^`pplzk6rX|yrIPR4WcP|BJ#<#Z6RmC(q-C||r zz!cgP+P4PzYcO0S*VY{B#*6?C4ijX0|l}Eqx$QA3Dp1e)t?=Sf56u(7}ui^2=^`l(g+jj{Jrt9KaOyk z*rp6DczL)q>+)pp&AO;(a{fEs=#LZJ3E(^0{2GmbKIm2IUy!1hek#94TpT$Fy>{^7~&TlN36NaX;N>0UB3nRa~T# zZQ_*8mhCbe8_^e6?pffrBL2<^Oef49fnb{$r}omD-)Ky1GFosgjdL4lnV>sxY+~gp z0%0;vz_&Qyo9W9RE++G+QI$XV7RuvdB93l6-lcTUx7Bz=HCcA7=!`Ws${BWhCw|`Z z@(KF*-n&YxxduEN>~{}qz@EIKkwlsUI}{OI-XVH+!EHeo-?z1`$Smp_)JlF=iC3c* zk1hp1kn0>56Nge<@E#ch_3P@gMYB^~uN~ID--W|W7;Yfayq#$o)@503%uMFg$B?YP zA}o4!X@qAk!|b)5 z-)#url*L#l+dVJa^(g-(ZtWq)F^M=Ul-LZhi@3~(udloAxC0g#AAJ#|k~l@E2gH)F&? z@TY-lZ2H4sK?z&_oA|^UWI}@1^GyuzneeA}WMS9O?=~j#8@?W%Bl)6-B4gs?Bj$!m zLAK4ZOT7j=POD zO=i7qNUUFM&b65X=X51E50Vjn>Ri8IRD_x8J(G7AQ`N&ozPwQ#x7nV6sSciKZdq|l zXe~1W-ji?y4y&+STqIVjlfOFpZZ2fk@;0E%Uc`~65>Fr{nYIv!+fAMHL2BtrO=*g; z#=v(J-2Jd$7`0gjGO4*YB|$Fe^o2$#27Mk2e8&qdZFJAHgJ7iX+*&sG`W5+XUe|Kl zeXe}tfw#p6K3*W4w1ND6rl74Lhx>BBvVgjg}}V3V-Bh=~_L zV(eb4?jjS-hO;3U&vhbx#KkUbU}KxLAIZS_hsdhHwC!}|>EvuyEXI(!QTX&l$BLd0Qhdn_*pE zUfL6h3oCawN!*%aMgr8;a{eh|BLAiYFOkKg*kkcLCb+h8`Ks%bGD>d#)@X0xnQ@9B z^|gNMNjGT-Jmbv98fY|7;gqd^=BG0;<@&bdFDvmS<9LWxw*vQAQS!(Nyhn-6*Xf06 z8GT5yN_fdlYd-t?K7y53dN^n0ZyFfX1j1dgg+7lr&U*)cQ;>kVT9XeGzPTT39-za7 z*Sc>yuV>TMp5+)xYm`aE zPm8>1_)>v(CX&{~2wpY@lZy6~xZX=S84WO$ZEN7?<4Bd+rSo}-+ixt1 zq^@A1S}#BY%NEbI-eYf4Z8)W(8jMq`}{Fo*w`t_8tMK@qJR#$fuN%V@u14kIbB0Dn5K zivapt3j~Q04uTAKr}<|2-X95IF5v%+Rd&`o6$|Q-ulzwWmoh(4#yWBuvDZ@iDWx!R z34jBz9baNC=e=922oZ$lI0oUhPCeyXKI$`Z`E%6b$MY}2!fb|GnZoHDbtX&f3$9Y1SuSyTV3pp3xnz6e`Y|^n*m(%#7C0$B zu50UwqE>+#vQ=|2hq>6F`L7=?94n@t@%o`c`78F5b#Y{_e92KfsC^XF`_Sk0sgIxGN(( zI8|aA_ocF)%QMXI%!n7PiFiTCpVN%IsF@J&ZvM;w+Ew9^`r+=!i6m8)p7~eM$SOry z0i5f4VK%@eY|r;Y8K~^&-+y5zpy;+WzH9$1qhTeRN_P_1|Pt$WQ**?+wMwcIXyrRQUFJth@;=XshyjWsfRK3^Q z#Cq2ljvEc+V54n|N5*8AIb89O<0;G6>(mhQ+Q{4+8p zCa9}+gAqW$a73|$bbBQ5ewYJZDpLbb{*X8M^N~z9#0Ef2&2qBOoPyebR<29K;$%1d}TtZR= z70XN9r+;W1<#YS74z^$V2yXkAiud1s<=>X2kuAe60E)ReATM!>k^aT)CqN;uGk{u8 z8WL*3L0hcT-R#S%H1wrJ@Pz?fKIKdnqfbRWLu6eIGvqDo5vT$kIZw$6P+V;JHhJT~ z3$#R2iJDw;B%*1rv2nii$KuL?nPbz2*qPlBEd&@O_6BT>b)rw#F2XF)(^&wT$(8-I zqW+9iTx|9HD{>ggZ5Kp=hBAI4I-Cu`4}hU8n{8dF>56^0%@AU^ps{zuW;p*0KPB-z zmynZKi8R+^3#iUb&N0mNJRW1eht5l6F)tl{ZNT#ZhOWlB`(mI`W`#k=R`J{+)w`Qn zSYSZBDd`n;?guT>K2mib*jUfK?2<-sU>g-Wp-SQ10h_=w=NqbV`%VbV@VGNdNJD_@SqRlMg16 zOi1-|mZXPs^5Z92+BHNk+uLO2nFT&CuT8j`cMNjJm$K&>TIL=*_icoYHSeagM%kuH zap;K&j@=XIkSjTQyVve>8P|20Lpb^7x2pr?LE_d{rQTdf#BzUboce9o>bvupys zjubR_6!yQ+k*G8bHAH0(m|@!`Size&XBn?r2X8FYdc8rfg;|P3uv*H6D_obM2_c^q zg1kXfDx*&kALSZzOGhY~wOMnRss{3aQ^3%&clD=QaR@|;a`YfkRp4z7C=iU9A9J<3 zbHoD+Y+^HXPn5gW=8BXU)rWozDIE@5al{@9$WF;G)d*jK7YD)kZSTCdq0`CqUFjTWp&@`wTZI@S1S2UabJhKauK?Sr>rcSa{PhCh| zR8NvNnL!^hXsY_jS4X0hU?wyB@l?7&wS^VCTRivS#S;n z!pVdegirKrK^|3%q4mRa>7Qq~ide=-16TA%$D)(4r^^f%$j{uwAP~V_V548(OG-|9 z|HU{(UQ)magASjma*S`(5by3+!1;1wn>2i+IEYy&e8*$^6`?-*1C_MFxyP2R5_@94 z>!xAyE*2ezGo&saGI~fzGRe~q%)Iry3{~D5uNm=tzO=JsYz36U_x>1V(S$O@`4^3E z6aW;5HjndHmqVMfLYq)lX-nMFlj(%-C;XHM!*fUV z88}6yXkU6P5wh$>;FrNCrTb{j7lQ1XQa-FYh2FlBAQIHNb&4>_TQF0$gd*zJ)Rge( zwN$5}FvSmQeIlYdXTJF#g{T~$NIWm>gYheLcnJ)b@@=}3T89*diM>j72kl}d52Ntb34C_`h^3~z7FhMNxkvj%>>%H>4 zF6Zrn+z+E%`vKkf{{0i{{x>(~Yq!Z{0P|_6_yY)^PZuYUC>>R zI3WO^g0M_U5@gztuB!uP8)#YG&jRw>JDWxq|#3 z4s4W+n-F#SUv@7Rpu|)2=R8e_pUSB*c2}LVFax^U^5e*d){sa0|HUzZOtV5`Je3BA zE)Q>RblEB%73koKN|2vTk!+c@Pt0%gP7o^p-q7v90Vn5I%hWwA(cAZmKS7)t&;!KZ z5xP$)T`JgUly0c^F(p$*UGNvZJ3?6X|gw-PFML9~o_pu^z+-t!u?$(hGP z2wYD-B&tYB)J1W8&LSi@md4+!uZsD3n^Js*YSR1e;StUv>WCHpu5?kl;7?Wa2^fCJ z^{13`R6+hMlWeRw!Zb=J?*^EuE_@_EI4l~FP{FA7It^t z`3bX+`CEj~_H_^QaHGgBLRHO!4icl3?QGoJQ?^$1b~EjV@unU5nRFA~4eT)Y|x@d&zW}*@bk@mKd(E z85CZfAGH5uv9JQi#oBh2EqW+y%=bUG+L%mr7*1$1vwg+!kHZ(I*hqQ66P(BmP1Q9)tqDC`{-=92y>aR9u| z*z>oFX=&1%rE#9_G`JMGAARtXpI_Yt3e5+36}*v;hlSSjSQPL6Xz>OZ0R&VmQ=R>sJ_U~cc0|~xyth*rB z4MCV3(S(*&+?$ewQV-reBm;rafKXfKhk()D?S>_HJfE_p%036s0wuKmo%;HZ0$1O; zgPtx?c}(7+U@ORpqkk_+Y|Dn&Ge3+q17$%!jkVSQl*+gp?7GX40W$qYDm^^E>FU8=^u5+g+?0>CdIN zEF=(Ua+zZVd=7!AQ;Mm-37!#^()9lf1g$3w_YV}0&ko)WH6?zr5k6`k5a|`rUClnH zwBbBfT_cxscGnI}_``~(jcikLiw}vSb!R4r07amg;M>#uFej;uSC?| zKg0!i_lx>Nfc;m7Ygo{%kjWQie63;-UYr-b3&Jf%Ills9^)JZ{N%q|Ds0IxOzE4*z z3CuU%JRK`{?J}N=mW!!^Po)>LDSRo9xuN3pUCq-E_T9U_;h=4ilQo`%NlMhOWTFoX zESqYUi%Ut<@1q9B{7-wrsr(kD-8+%ffV}oV66<*W;#bE|;~^%Et^I-7yN%h`30Vk} zjoGR!o9_=lT1`!&vd@t2V}?n0!I4LTLd5T)9GO5>wxr7+KgmwANt*H=*_u1OgJD#! zWDfnrFlLu)OVo5b9>wI`7sXv6%&}_DC+y<%A1|>k3J}>3(Q^Au)*piy+qscr zJf~*kmFd+?UEIg`_!&n=B~_1I-#fMle)bwia9hWj<$G)LaI(sGJv3R$WTqZQTODUX zUg-`QwYq(eVE<5y9uj$pGRs`p?i;gv@{{q%g;_wh>nlsK8qZHgA5hqjrrfE!c^c%+ZFR?CC5Pqs~G?aiWX8r@wd&C z5I$1_G3blPjVyA2`Sv)M&9xfI7lK zGU}HdWV&T8ned5KA6w?+4|MzOq1|8@&Ra6{7u}dnH_*lftNH5Yr)YcbK$KE$hZU5r zi*{qJ7 zUh$1M4|(*Gl5S`Yy}e`k^VjH{lyqtNZ*$me;hGZ}^6Bo!xviw-LJ!1;Q;`3bnWFkd zy+23C9#Y+9m8s!D!uO9X6i*55S;)U&p?_`e_-Hhi62P zz}2va_nMtTkzZ7x8PmT7$GLCd$0}$qzp7R?m~ZldXP=gmsIiHjhN-`5#X>m-%wp#&z3< zx>T`SX>%@2)!oa3I=5$1f-p+@=Au~Z5xu%DW}3}YvZDn%i>6q7iWWrP55r_Hh`;%! zOtwu1p>WJ$4$gJsgx+$;+Nyhc5!5ac_yh7w4(G*u7Co&+l#j_{j|ASGu=@TXi=H^O zcmL0I0(1^Ube3{X>fADHI|1sEUsPQnzW+sW5Ht>e3nA=}7npJ=-r{ZYpZg{L(P@AH z`3+9a$f6h~H~6@M3rIZ0%AbK;4*;su5+@J{Y7D-i&TqsUqJjWB$DY*ZWCMu?+>=Kp ziU4m%F3WH&zG|wLW4JC3L2{!HzIBk{SQEO^z{NVSs^HpPI++iRh%D0CpWD(LDl{El z40OqM!&Wzf$?gbNoKYg6&^a>4=Jc)bsBdL%b_1@cxmhwv5B|^&a>`4? z+m1E5>aq4)yJ<{9?+j&#_E!W7lsTL!Oid0eRxYX%tr=~H7pm*Kqpem(Vg)Zk6pn(K z6x8Wj+z;pQOvM~ow&0gHEIl0>-w>kPb`TdPax9<+gNxtuRvl~?x8{Q<7jqLrPZ zo87RE+DlrsZOTAD#43$V(}(=bo`?f$n4dV>g~$C}vZ)H$3guh2T7im^%)nel6L zQmI?)?v8p7-&|1{6`n^UYWBT`pZkhZ7sq|b3bF0#FQLaWKgjJAhA7bgHzx@M;4gSn z>ILw*khiSgk}V>xDU&VJA(S@JWCo zETzY5T&d1^E7&!|2y5d(qo9_oz_e4$=m8b)v>!C^KfX-7i!i=>_XdRkexb*ahuFgO z`!5o2z>*8>*9j)&4tPJks)t>XncjL851M{Zr5VENLyB~Ge0%PDKK@zibqNEhR!})4 zFVjIIXy^m!IFuS6?>Uh3C?nW>pzHO`T)_-@-jiE-c&h0-r809w7Ld7y zc->cLLjX0sg}k+a$CW!e{7xBG12iW5bZ@o~3f<^Xck(c$EG~PL0kGEomTq$c@sd3t z6@U1tZryi_blRIdm2KUY(zNL|x+6;0ba_j-FPk9Q@A(>GOVm!5*Niw378N!|H0Y`g zh}ZC|azn*}4FjvnlQl(lygN+#G>QMF<6Q()9^tdf?tA>VqqqBk#a zipw`I^39dPZzj>A6*RFi@ z`nQahi`v(8St{z1YHbpfd;9!{_?k+TH#H6!9yt{H8S(m_Ref;>{39FI?&q;!VVK?Ryo*YM`DNO^<_cx)%jtop!JnuHkpgNS8-8?sW)&kF1jgj zsC|viy?tribmga}mN*74h8X;SuGu)$`1+T zDRj_p#lrC7f0p@-hv7aSsQf5IxjSP&B^o5(0l)C=$DNWN-xdgOx&HWaN{|K%<3T>LHjtXaF#S0$V{*`rVLA_-GLGM}XA;K-6G-3aYK86-;3h0!n7f z7T*EbZaPrR0c#Lu|2vk)!B0{mAs0Y(BBO@_+0+8%B%rscZhsN7AM<7sy8reN`jBtr z88Np{ZcqJWwL!|&;&q32?FDsx7E0(k5)BMP=~jVR2eWo9s(N;`*04QZgag#bL8-5# z3A{Ezp$zg2s&%HGqpyomMrdISy8&njTa@0up;Egj9^I10`QggkN7lHquDoz_&vk7m z!Z?p z73Psln9`DfN8Jl|+g6)0o2k zUX4TLbKtZIdo$w7B7*b)$9+_!W60D2I%DaRFhuqw9pnE>gDst821Q)Ro#xB`pt<}< zr&8uq&Z!F)9n9!NgobM>W>M~N!G{0$)owo5z~<_5@bmNY2@3ws3;6U(m$`ziClWvj zc|PC!6LcsGE1AT7-=MqbpdB4(DM zQo4^@+5w~Vn<(K%scxU^vN^4pHt9!J3~>N0IWc!wPVit1)W5WRyo49@-46sQ+CgEz zFFJYb_K9O07buNKG4~$K)aU8-_r92qY`#u$ou}vlS;Tlp8-DKGj>=9@+MtXrK~t4_ za+jR}1QLw`0-Dg8@-bh1Ea|AOrPIc_PY+}@RK*}#wk1W$hK%h+|01tfJ& zxw}vCrUc${9oZq@&c{Xp^44-1H!Nw}xfS%&Ua|-01N^oZP+$3fefe*wT)%z+cA~i+ z-x7syj(|HXj!EmL(K>wVX49Q-_Mi!g0LcN0x@Ijgl*D(Z=k9cOeN+AirHyE8L(6Iy zQoL-WCxw870wm3#9K%|J)rC>s$@cg#qlUmHz=|>kulXb-cr`HwJj+rDBuwx;4CGt@ zQkms9mqwHtnwpuJY^=@|n6#W2sCF-<4-Q}y9E_mN<&}UxK`R`#;N}tRnn@W2*{&i= z!dV-@P9;|n-wG2sk+5f4V?uDjhIOs9i-FgS5FweoEk3+VPX|qZ2O0msW2FhI`Ssg;L2OG|EL-ifx|#I=)2~q<*Pwd~0iKBM$d_ zPl8%dp7nzgHP!RSL&RrpXDnF1W33pw+dkww#MQL7F4Co5R`vW*pAvdqejNig*oUIF zpLl?Rq<&I$5bcQ)iI_)IcAc}sm00GbnMyTz%@fPO-PS4+?`mv+>5?pW*XmskdeD+q z_5R*WK?#>=1dQ+Zo%{d5zy8EM=z{{yl)ApmhQ$xqdluH26fb+6t@~K7BF#>TA80wD z`A1RmsLd+qo@V{LV6T-ng0*0M^(7YX`TEOw;Z}!F%0=K9k5AvAe^8|XEgyIfmy*oeY#Z)^q)GPnQLo$h@m1M+u8i9ak! z$Jsx1*ZlG+z~2Ds^e^!H6FE{MyPcQIu_pnrVF{=y&A$Fg`iD;gC&G>K9+{b;6e<47 zl=e^BNp#<#U2A_w$u2{5SY?yDHr!_X37237Xy&Tp`svx z7Wj{1re4|oB$c#Doq53i3t^8gL+`|=Pn{Sjf))$~-O%b+FB;ZxYv$>Nyg11_$QKa| zx^4y>G`~JY3%pB_HjZB0p`f1!T$&7T5VQTIVa2lghI9(|d9>z8 zgXDJ2Q%o@m>I$DN;)?ml_YSEyJr>UUrM>BfqghrF5|t$JU)JXz(YIt#kM$7i(BMI_ zHR0C12EA!|%$Ax1^|@JP8j-s^v;Q<*3Xzk^tUWHIEmpAQUWH@e>4g+O{ivBeMQ* zAVnV!GF;w5{D(04z2XmzZGQzA@c>c>%7(H!kT=&o_948Unl6B6G(;PY`sD9`2oumE zcj2#H6CjBy_4?jru0iFU8!emtna&z5^wVJhVgEaX63S>Es{bB?SU% zN-nH8QRr%aEpq*HCF>RP4|V|%QoYI7SSa;Q5GYe``FyhH>|mteH?P}x_Gk8Un3Z9%!h%UIyEjzmD3({_Z?*c`sRzT7 zo|I-U`4=)Cc zvOM}wgD)M&#M{SvkiT^!^f9Ut(*}MKhY*M(04Pv3Ws6cO?Ewf%XnjDhVkV5K%VvT8PFCsB2JjD@cb|yGgF5B za^|Mo%j%j=thA;sY+=T{KC>*)My;&ijTzHXrV-LQcLU|_HtX?bF;PE#z4B~WYP-5B~ ze|x1z%Oq96pcgw>8z?9PGMyAB3^Fxcb5R2W+5jRuq5i>0v ze%ztx2kd(KP;{H}@|=fi8%naHOYXAhJFaU@&Zy*|_cqO8g)RmI*af3NBelfQjyIkM z0&ZtfGZPu?I_*(j`#1>`QZ2ZxiREpb=Rb~(q5^;4FJ1r$c3sXxhw@XL9gbKZSPQeE z*RW~ECpkyh;IiaPu3eHJynU;V8| zs_c9V!zOB2Ncy9PZcT*m>5fT4)rbbQ* z6bI!7Y^W#bQVw~?oSj2Hc7If$XS??`F{#z>D&DvFUUD&A&5T)%><)}@PsL#a%}5i( zxL$WGRZxfyv{CcPrhS`h?c%d*7hgM>xE}V*-3Wj}ehn>=Q(-%NEhZ)=q`X{M_`y`L zr$Ne>=NeH|=aq0RM}MKX41cD-vv^`{EYiQm0kKr2ZLWpz5MaVCi{EwYivOEf^h`~_AwLk{Dy%whqQO>LJAV3Gd zx~C2t)7k~nDh01^2I<(T>^vDn_3)N-N<0EQlxucXeinJffA7bTNCtoNew&l<{rMmB zOFHU%3WTnBs#8eyl3qO{RMLs|bRv0uF&nZ@qF7rY(0@h22S6A9+&@csI*hRMY_#=I ziK6p7j&o^g$zf%>S5g9zast>a&2-5-LGG#V^A!5s)NEPb1-zyOS@7}pRfU@{b@oGB z2mE78mB($@gK5FTcR(JY;J?Tte3F!aHX)h)&wiA%WcN}tt2?V3(0F?n=ZnXsmR}B1 zA#MoC&qQ3p%6?hQJzAkPTod5u6{ZocdPeFy$S8jvrol0=(_ z*(tH?#BTpV>%o%&_-<@BYERx(x5J<(+2p^n41tAROTIGv-(&RzNO@YH7I9;D9Ye zP#zNmffzkPLlo#_By~XcnS%vMn;huBMz~#yUNhT9)NG*i$7GUifq&lpxc1A-drn@#&T;q}2WIbp5q&*wTlR83GUZssVbFLEmOmIt=J) zEf5e=k2+!Xi*Nrm+-)2Wl0X6d`4yu7HBo%tm(mlA5qupbn9H0 zey+ZQopV;X3)a%27}+w7yoFqt?(^4C0`0%#Bec+nfR-rUmI%1!#8};n5(T!2?$lc) zxQO)}CQ6@5OjDM|S%9~T^e?B-Hux4jb$SitIuOtmeGtZ=$Jcp#e**f{W$kLW#LQxj zv^L9ubdH@l#ZaWl5UgBE6>|dfoVo(Li9Ko{&SM{x3xK5=wxpcN>DjA^@PBd~ ziI^W|%YAQo^VaOQ3_P%u?4cCsWVkvzaDE1hiQ3vAwv;Exp;AhqsVL z=zjXg$Q5M*oyjR^%mt^~)e_d*4@E)Kz|R(50o?kJoBngn35n2)$qagJUHMiaL#}cN zqsz>outCrwyVeO+kb>ohkq5HhE@9Pvx4fX4ryF!V-w>0qJON+6w+!dcg$3w}&%5Yj`DvV<{Zv&r4v__h7C3c4PdoD3vYVXcpsOeD z6h6OsJhG*EC21ydVf6LcqiJ5&^E?Z>HKu*_@sn^Ca+cqh|I^2nh9#M`;bvMUv&qbK zGUtmCw;9b!owCGWTyV*hNhe87v2v-*EKJ-Gnl{bUG!>g%NV8}(v@{n+h0I0}HCiq; zQy~@1at#+imiIgKP0jMn%s+T9uJazwInQ#Q=f3YSbcitAA5CJo>P1y}0S&P#S2x3=VywxRLsz=(XJr zrEIWV9hksnSFCe2lM)M#nUu@~AB{I@vCz^$i%!1!rMYK(ba_fp!-=S0&_2vt-gekG zUssSud#vx8A9`{QT?)UUTG~~H2UnOHP=)%x8Uc^1on<$QxQBt6`xNV@HQ%1iDRnyE znHcoQ)#i%2K;d`g&v7|qE#;?_eZ}kMHkZGpcrnX{xqU{e(7j;%=U0Dkt%1$Eg#tm_ ztgSzjns*0hhwMeV%UU^eOI=NYZI$Tlm5jgb3rB5F_5cVWLZ>z{thDfI+fJ{h zgy-G6U)jZf;p~Kx^RA5=PjM$|%35Q3c(;#M_N?U3T;H|~+Tb)t$_Eg!2W!>1)qf(% zxwx(Isel(hEap*un6n_SN-JmIs|c&_y67-b&TU;+O-nCd3>vQLD5d)w^FZIvdB0z9 z)ngw0)TogDC%_+eDJLa8z+L|Z5}}ow{%siAz*Y}5+0}5tzmnhdFRICJ@v(m-zp2#Z zx0B)RY)ZpK?sov_=dm|G)k;&cFDB4-+oA`j)Z<9u*1MObru1dpjpGqQ<_3~?DcgEI z6}=2(_Mq|2Ep3UfN%6ndn}0G%TA@{N6o)-tO54J`QQ{fbk#VBtlxA6#=Mf^nK&biK z06GeSbFX?-ke>p^4FFyNgf%#c|0-_$zhn4^;@9%`HSGrnK_2+m8rep3ocv`ESUxZ` z!G1d$CVs_T3J&|}(2J<2o98Y+S<>XKP7Z?ohA^`pN~3QbD%Ua>x+>vd7IziXW(zk} zgP4w<`N`a5vNT!r&Nzz&jk;>aATi95t@w9r^8O0g4mcD}*!Ci9ecaohY46`elIkdL z!=j@WFygvI@~%~Ng5g}R$rev8Ekj&9>2@2owX(W0~H1BuT7@OttqrY->rBwc}jWbCnHZW^WMfr@Pbf6S26jdIU@- zK0&^%G7Jwp?oApMC=6snQL0<^q`pYJtTT$@!Fp#PM&Y0YS;J==IDPiAR$K0Kma{CciF>&p!ebbBf-tiuz40Bt`SZp7!ji7vEqe$yr2kXGGJr zXYBA=x3Qb_f`G{#Z@c)00YM3u8i!I5DD%qtf%}L!R{~!?Xex@1O2{UvOg3j}R>r6A z=U2NHZK=999ld z8CfJW*$u;&lNE!5FunUo_SIjdAnEMp9$ z(iBZeqB7-03|{#h^3J*0R6y}eh2z=HRkvqJ_3nOHBr-hY(BK#3Jr(QP;vTwj^2o{_ z(X|~#@;6ip&2!+ni}w%T6{&J@Su80Aa_5J=RPkDpMdb6fVHr$Eexz`?0+AX@o#vTw zgVmnw_vIogCK^cI%!Le3_*7Eyxco&>Wh*r5#-{M3p(Ddw3n3-%xYdf1@IdVy2|UXr ztYd#N%8D#v%7tXrNEDYrRr)dJpXG7$fPh=PShq6MfTd^`|L|qIkBi&!V}ec9C|Nc> zIV*F%`RsXm{-(m*%roaU+MPuUFX0q$wfAn|85q0P(g+&O5u=M!GzLKl9nk4gW^5VLO6I=$lz^ay{UJJs^1G(%r!yDNjf zRz&T0BG49HUwwD|l>_LoyD7x^YAX7Jb@Cdcn-ndBR9*K&j2X=-Ub~iH#zlsjO1wv$ zc*Se`QLxa~*tl@$ez>!pR_%pHH>JSIKqq)R#rLx^BLp)$12tsbQMne780W7MKRd<> zQgNpld&`CQ>YC`Ur_xU8Pp7##nBSl1Om%Zh0RJ)^IRmKdKy3h~a)##5vf%h}6B(Bc zBZ&)Z_w%8HG69R_Biy+;=dw!aTHU=EnIJ5w*7cbSu$lj{>l0q8RHs_y+tKyfo@QYv zn2!{XcGK|?Pm#7!@j#1%TdyIDZej0rBaO2|R2hge=+lVWA#DX+pB^1x>uY>rbrv(g z#_3q^66q`rmHxpX=Y|Jh0t@kvIG~ThyX3q|RX`L5B1Gk^>cFC;KFyGk%cPcw9gke! zOr@;Fx~0ModaSxeND6u6$>sGE^7kjIW;EB}6DIt7Az%zY$2K}`NCeKYTCIJ4Ju5T& zLgMFIko0nU|3qCow#?V%PDosUsVv%v??kIRmep{UXz{377H53L-9%mZ^DfeU1T%^pmB)w zbHov#6Bb-%jj}PCfGHd-49!-;lvrpNQdW(MfG8=bW{f7ytI+Yo5m2!aDCshpxDsOF zMOdg>(P;ri?I4ca#rAb1=jTv&`7o*uB@^G^6q-lEEey3-@`3Y$jHfIcYlu?EaRSa* zeELWp^VL!@6U*{{3`0=reli7ko)4!vNjBUR1?^x+hul=tHDgWBMv(obcOcyXGycqm zc*Sdy*CY`LM`bPk>aDmNUPO>SCsrQ@Jh2$GJuc-L0gYXqmulY u^EH)osVTnT!J^%3fL{aSf{7tnrVvW!GnZqY{WM+m6L++ibA@B@ng0SmZm0$_-1PBRt1@}J3eZF(f_uc3Ixj%R`$;x`mn(v%rjyYyx?&#g5JH>Gd1Om}% z-2xkcKu7t3zr2%Fz&m`#c1FNIM|=!!UI&%+axDQbjytI9s)In~NwoV9PXMoJJa3u! zfI#$3l)ocw9`Efyphr|%VD|HJug^n) z>v|c%Aka030#0z~hM0GY8NP!BxusP#0s(r4D zMu^a!?)Sjn9F#s%Q7L6J`xJEw^mTc+!M5}~xPpNnQG2&+|Fy@BrW<)7Y;&b zTuNW(J#kwx)SLIaUzK|%an+*+HN5_z?F{g&v3)0=RYWlkt3uzS4q!h$TH`mftP+#% z&Fa?fO+;kb^RtzIahpPw#>eEC8O{}lf;3olIWEz0ciZyn*pz8S80iIxVVHu zx8qEpuX|<(d>b36u2dxXnfdPe;%vhO&z1v1*1DH-EsdcOYb>=AX8*(xyvq&SjIsBo zhl_}?Xg)A}FyW;-i4ugKbxV1b7yR{p7mk*=i`Ipa>JM+~eIAS?!fZosW{5)HBM$D$ zKK?ebySuY~mwX&67%*f=#V9lIXrKFgawm#CYnCc7 z3V!Y&ko^T#f(-o5=z~uOcT8l%-cO2nw}`3ns>y%2+AwY=*&vp2!O9b%)JUG5 z<3cA+hSLzA5^tP%-jF`*U}E}8!$`wC{nOiK+|Zqw1P3GC2~|k^+EsH-;6!~?y>TM3 zBJw#+1YoQXnK?Itf||&uO^LZ!BOP|vMjE)Z)=hW>dH&d&md_Wb@!tbrBadBLVeMX} zy;3K+;Ch7lTUGovI|$ch4TL-92f-9+2+X*!2GZ|}4Vv#H5N4+}LUuUqrOB_S)x70V z3r^lbz_DFGMT+pZ7Q3g2gp%{T=iQJV7VEVBEC*s4nkV@Z^;S%urzUl2RmENh4tjTC zM+D#izP|W%(oX_@?~M$w$Dsam|J5h0VLV}fK9TR! z+!ssIPora?g;#0hy3o}+f?h(Fhz)V1GhvAloc1b>cueQ+SGbM$9ZpQ(OR>2NH7EJg%}kFo#pb@>ExW63=j;2RH%CnZv)k)GH`5X~ve~C5QK`?TGEyL<@7qWA^-Z1*6-yUj!8 zzN}+udl_AUTT|H+h|$0%D^a}0IbhY4OdS2Fu7g;5ncYMbHS%*SeI-LiqBw-F^!?!2 zTzo5AijB)z?KeCy&-UGIlAY;0q1jUj7*L_1e%E3Wtg}Hv`Mkf{R=Rolw)-yGjG>)) zK#&Stgw<)ok&kM&JB{iM>i6d*ZfaW5>k1_H{DAEX0k{B{$j%cree46 zo{3l==KB&v_SA{Euz6CCD=q4voA ztehziBhB8|NIq)%39+2LZ-w&_y!&^sd^3h7^gPO!{3m^1((!TJ`hxrV$FWZy7*$Si zqvUnQ455eV>}=xuq@mONrU{VqS;%G1y_NBwx>3>H`paescOgZnUa4vDrIlX z3^8Hjv8_y8{+v2{l7BOwRnS{2sAw*f7b6;RYhGger`1|T4rp?nLpAo?#QO=iAk9@A)>yU}c>Q$XWe4;Ovp-;xNzJVi{+$9&3Ukn z366bnN^!;1Pf|U@!jMyCFMg2MOqjykm1!EmYWmUWz3Tlq6OXa2i`ubnINK!Mi`vYv zBn9|Qmte+o+bM|MxQW%(M2WV`cp|QxrU70aq&v|9UZsv~h&OeDnQH{P z-g(G-V7^jOL++HTc0rw*s!5xAa_M@4US>p}YqxI=!^ouJYsBaW1kcb(WjoKQ*q`g_@GdJ`6aT(Tbz5T(|IR_@uTY3%0u=Unfo(cHS;Y~ zb3k3Q+Y;_R@nqRzr8=*!2aK;7C;k}N%-ldXsk#S+<4f(OFRKlG)ZeP8XTZ5k+1kC! z+n9BnHT`nzsic_g%YIHR2MX^GGTca(lRMKc{$zu$zOdYpw}2NUe<+KJe68f)8N)0z zhsKcM<{{g|ELjQ%JHUs7U%mEsysFk)IdR6-9J$2;d)UTu^6}?^Gt_bI^|D^Y+&4s_ zJ8g;V+Agk)F%=Iwi8TG#V#qmcL@{2%4ie8FHcHb#H~yF&sj@r^H>! zbJS`J%w&>O_ufwgZ}#|I6wtjlRvY-4PPO`WZt=y5%nXNwY4scyEdifm?lMeC_^ov_ z`q|KG5y(;3y{;PRGV(>Yqxa{P=^$^7#;J>$Z9RH^MCP?cF3O^21l>rfsBwMF0P4xB ztmRo|WYB5^)@xA)%~83`Zd+DU`+mlJUVm&BHkSCvvIb$vt5N)rtL7as3fYo7{V_P| zow9zwYt5R2z!USTDbwtl56H?15J(;@#CU$UlY`61>64r7R54_w)7QMw;o4p79bNUg zs>STj$l)`ze2J>AdolXUR+~*9P?kZZ%cJE@`v) zB792@S+CT0Ba)hqcV+iE*kfQcG;sZ^v+(Y_9yq`wK?6kc=qk z<-OC$d%hWRhc5w>a!xZT>1k8}pY-MMlg@wP6d+id{*GIYGj)rJk&c}PrF)p}5vuj@ zLo*ApqxBWuwpWiozjzZsN@98~w(_vcnzkoFpZvYH^o4LQdy4%G~fmGX}^ROcz zA3f~@%OuhT8<+XtZeBP~2Hm58CzFSaF{I6(DH|G1qOFfl@@wnG@m;@rRt}@d*f24; z5pfHK60rnka(B}JnEub7A6}_JEbBL4ueP_uv6U|7KrHoMUwyE|#t*f&aQqX*wVrq` zkln8d+CAp!m1xzD0R z`ya>ry9!meop!%dt9`o)t$dIcLCw%<;XnE47?kRao08}Euw^u&kLtN(e76^4$3 zNi9TAT=}38@WnMGZ?qet!xv>CRO7!2M+B}^E%JCGHd~xwc)9MbhqH}$*+U|_PTseQ_j-Un809xW^5>INDd$pFl+qeK4 z;ej|Zw}*uxL@rjV1smD{cY0cHr=>qA`m)}P#cShnKv%)bTh1P1@y6;>uzNBi-&yrd zmuAOP1f+=JF%x<#PV=MQnu6>@6$BZX#2RrQ+#U~A2$ii7fe^iDkk@Mz)ECiL$W?Pi zUb}9c)BVw3I6pJIU0b3~K&bE4%PfpPxNKrC$a^7+ZSEdp}E(ZChdo zox%hk%G@Wxb)xd_3i2RS(SOBUEb_e~J^u}i&fHY9DHZf~&h+hT*_qew>a6%R>icY( z3N7=!86|7>OEFjDJOuX~8KoY!a+`4vDZyP)lCr1O<4RTW*hO&8kU7>&az*H%GZK6BmZW;L2t!%OMDye~ zhl%p}+j^D!XU43YJU9^3Dnt@zk{Dd&uZ*jJZ)3uzZw%ucbAs_EuRN()2oKwRIP3ze zGxS>?Juf06^2vYIl33f`s8VvZQcUXAt!NSch-=cdA$RNE<+d$t@~p7-teK=pR-VO? zajBj&BlW31OL7S{a`#G_EAQMl35;1L7-@3!q1LiVADO6k=X}>+G9l#~@W4q+n%%#vDqeQ~$OVO^mqQY!pqib6Vj$4M$>Mh?`VQ|`(s=T=f z{>Q!#Kk5tF_}9F{KP!6O-9$5`GxtP0pS^Ixfyg?W?lUatu9P7(RX)7gJT8K=Z%PWX z_Wihb7h@G)c;l4>IlHbLS3Zor0KEe^U3VZ`*sg$u=vr=nFw)e3ZdRk}^xPp>9J9)W z8S-mJI)Nuytrbh~LC8G;W&6a4_D9yucB;(S$EyEyCb@`PK*&I79)srf#r)XhPEjrS z&~V{2m-w34S^vh}vvb!(+a*5Bin80`b+7=-CjKuPV`@a2i zn*cZK?zF^f4f+~9G>Am`e#&80Flxq^rg9FQhyFbo|M%S9--1Ycavm@T)8BH8WqN&X~ z3o5As$qOV$567S1zGnQ~f>XY|%q0J50pIm&6kDwnq~qtfZdku@ zd3UXC>H^yDAUPP{e$0Cdp~i2uzwFSZng_%pMmjEP2A&r+IspTq+&{o*daf&cL_F@Z zy1?lR0ABglcZOM2x`U``ruOp7%UcU@G;jj$ow{V2%IED^yjA<)nTA=Abc!a^QEDJO zeRCe<+t@}1-^#x7B)UX3yGuzmxMsgKo6z~Pe&?g|?wmp=WzfGz3;8zH%Y+G^B-gP| zn(kHetcrmf`F~}w*a8WYPf`6$pL<34MQY^RsXS-|Cg2s`x8UxV44*vV)VXsRpXGTM z?lCI-C^V+R2p~?3;%5=mZBAnSJwIgqrbjB9e&`+YN>-3v zUk&88>h>7*e2kEu;a0~4*c-?^g9 z)G4DKGi5&UT$=GX3%mw*7q@qPha$qAZfC=Np=`)&0~l+U zUcI9fKnXxx8zzV+4r9PbThrENv&g?DI+E&pnqkt~`Y%T^smTR(x*$_U$He zZk3@(wB1V*j>nJ!SplRb!~@ZxUk&^mJli+Lci_2Dx3R{%U!t52sq|B7RS84I!L5gmsc$`_=CJ!Pq$-{0Uj&JSz~^*4W?qn-9sEYnYffA|{H1W);chIKiF66!W4B39ERLN-b_ih@)Hl2rV1&(LQAgLeMgRAqny(KUN?=@nxv_sqm8{PyYnuaeU!b@7_Vej(|3GfouZR5o$VN&V)u7 zy6Z#(q%UAd?^}vSF`F-y{ws<67w4>fKq|*( zKBB}y7GlH^&{tUiH&S9EKwxLGQj#@FS)ktQeC3L8 zys~J}ROL;c#1+n_*Gboof@pPJoG9NRbUeRsbFTiTo+bg7buXzsgrLG-XhXc3D<=(= zt=JX62nN<>ec4gWiBa)l(u6-)&-}{yo7MD3HaWoiEDWC^eTg&how zG$8=tzctePy|S}174)f%GezDA2$+Ay-~GDv^_zMLP7;EF+zvTWoNUTpV7S#2OloHx(=Q#n&3JvntDIaOI<+Hj9tp#FJ^bN~ zYk}V^-j0Q?h!|bvV%FiIPn06z)4v+vV@}W^xI_JkM?kciE;JEP#Hs1ZnBZ?)Ev{Esti8k}xF6GL5tJ$Qr?pX{eQF9;VS)m4r zo-LiH<-d9!jg~GeHNJdhT6annV!%7RqQCQUkY@$v#wH>?g-aX1QjXdSvGO81o-Tc^ zp1)I?(EywOS$b}BoJ6H73qEbAKY`0ijR=ZeR1NnFNo-b21Iik}(_RX1Uo+Gh^|RR$ zONS%uUGK1~LcBgKvBvW6@O2f_3Lx4%DWV*HPiMfR%&<#< z9d|r!m;23RTk2CIR{Rpq`RFr(b?yv2yQjK#3S@lARGSqXJDjxU7n${fllQipGl7@P zrT0_*MP>b-NTc7f^^639`iP@drRl&Zgi&?EEseOvs(U4L)@3zBXXB$V2qg2S;;{%n zyM7!n<8(OydQtcVP?*UOKTy&5?ajX(qjwNV5XhLpl&lP9JR}OvR!q(JY5X55KYtzC z!$Q&Xi~hq8jC4ii=|LbDb>L1MqJjX!0kX~n(4+eY_52*IL97<+#jQ-jY=}hapJ{fC zQ^L^5lN<(+xDUW<{E6^d6FBGBrkiFXplTg>pN`~gfw9w#?N6wgP^$)gN-H}~brPU- zX5e}SacCtY!0pLb1+355spl8DaTLg{O1o-Lgd$-RkLoTx=^8bC|f1Z}nYyLEV?b+mnZ^->PdIi>AGx3oN5YgnwGqLrI@{`htE>es+c* z-5HK6ovF}vuW3Si<=)j{mXnBF$ufu&BhQnCQQ58@DNCgF{?DeWPFle-{h{4%tUSsH zJBvT^_2{p;n})JGojPyI4D2s!hIN-4=herJ!*0yx-2_n)cMVx?1wV7TYl3GhQ(u&m z;@omnU0pnAkKzjm-&?7|b^$c*9m?o*&o%;D^VB-9&+jbJg(1k){gXI+Tk#Z|L1V|H z8xco0`?DEWR=Dx(Jr8zV_eW85^!L$Dv0U}aPsIX$qRgzFJ_>3j97Zw7- zj1==229C?uNJ^3u(UNa73j%#){eNry|EWxB;$435e)3AW7jVRA51*tIki&sMLzJ_2 zkB*V$iDuUl=aE$j)hIa^-TO&thys@y55B2lu(y zw)D@)xZ5?ZI85zM#Ogg(uImMV3iT>E2o1+>5aX4Ri4XT~V(v*6xWFt|tuH$FJ4pI% zkw9M`g#qKq8vhVuqvPUGHgCBO9hpf1dUlwc0? z4=J5u06mU89Lll3|LgRj>6vcE0w5SY5@X(UGdnXzNd|Yd%K3YLN8M88T9BQ2$m^f6 z5f(I;45@EyOVA1KXDb>SvF)X%##`5RvRm%-%cEd+_<6BjUU(I*06)5IxF=uB3#vR# zsZvwXimAoRK4mP8iD)0y`c?~nt05FPDc{f%+}Ev7tT2--U*~8W2IVs!SZ}`>_Kn%ZQPq^>c^?XnlOk*LD7F&u-RUywV7A>PID+xITX5jRs(Zi{a3;U*|iQ&tQL~ z`@2bOgZ})w*`=!;3?3doI&aONOCFswgDWH`8ONNPn({#-)a5jcg8JnEd)kb+mBqmc4mV?RAAC%V zW-#4Lfn{08xrMklK7HYRR03b+hOB#NPDi`)M3~{}&+@X#$n4IYa@(#&HICMMe%;pL zs5JviqwR;o&leG^J;8qEeII&)Do|J+WA5YCqr@X&T}J>UD0q|am(5({7|5fd8VV5aj=vB`18?vCqN@*?D>ySQ!EAjk|C*^ zBYW8$El@-w#$h?(=jnPS8!_3JJTs!t?=<4Uj^<9eo#}jVf1}g5tWHQPP21ioYkh-h z_5?15#u8tR3uvh@bk|)9Xz{AIb`7#@nYUFh4W{`&OsiEox@Kg7N6^q10p%f9IKeKOp_ zNLcpcX^++Wdu`*+w(*V%kv0X^{k-n~#r*)48iv(xAwuA8|%Hc=+Vg9GW&fIuFL#>VqS@vA9VPs8J8!1AX`N%`w~bDznMEknCtA1+w7pi+r6SeM3Zn`TjuQc@Ly#+ea}#90 z{xXC^C*d@Rmf|K0xWSUz9Etphc#w4>V4AO};?8{(HX&sTRgI-d+X@jrEV|L2ne zj%cqB0a6^0ePbV2f_gIs5HhAy{l{GF&BBM`vP@%FE)b}dB7=!&5ul`2B`iQ@1?VmU z$5SjN_wG`lB3=0(5k<`s>EDN1%&?%xXyX*A?dWcP=DX;nTh5&e-bhcC1 zJ*~&cceW#aOBnepfrx?!w5O-u$$M`l! z?eOyg+c;2iVT*IT3pGfG8`!jm?T$0It=d|PVka|~v@#P;o&d6s$#|K8(hO<4(`63> zN@%#I6)n_4M)C)#K%g|-aNWSHmu1a_7Ir;`Dtmwkw0|XFFcXLSu6yU;( zFP21szE<=7Cg}XHhBR~)xDwPIo}*~Y1SmnV|49`J3?4&5`L@L*90Ps5a-8X#dzw)VL8MG1VNmKR#^9Q>j?5`(IP+ZH6hi}9~1ywdwxM82%^-m2kUFY|si zt?tTcxtj7gpTd@^6j6z?rkeS0Gh8YMTn!cWB=v*Pg*v233EvS4i20}C8oM8beIZ_4_D;61S~B9I2GK_S zKHKTz%LqB$-o5cC`q%xw=;LggDqXQ?F5R{SZlhz*GUl2d#I%xI{O)0XU}^f^Vs4iD z{b;Jgk1&V;;g0z?yDfKSUi%IZbbY$<)lYMo_tp?Dk00f4oYor3cSmQna+frp&S~&O zSX02r100v7*}QL!&kIC~c@4m}Nhj7k$_trr0U3(|MzM1~Pd9;%zriiqTUs2?!23;9 z(6>u>q6Mysn7$s%3)=sMJE$nQ=_1>i|zb@_b&5 zNC-D)o3M~2a?)yS4IhZUy5zFceorRGp}<1O2}l%~B0h!mSx^g#E&eXEYp^_0SV z7WJkTl((F%Y{9W0lBMC0atrSx&1g0E(_RM(ww`CTWIu_1gzZH zt^Cm9DQo_R#nUM4R+E~j!0HP&0K)G(H6i`yJ-oAATi30UXy{DfcPUtHfhyE7M4Tv5%Be2Yd@;z z3#mYoEk^m0DZV%fAW9Q-`Hn0cRX?82*3z8$uER6c`ffz~yIKkV<=RmBugL&t-sG2W zpn?tMJ9s#3B|rA0y-9c}LQ59buxn}H6&YP|h(HU}Wz(peASZZLaspqEqlLHEEe-&M z0Vm81RyyiuJGW#l*Df5M?jMqh^+nxDRGd)({otYuIn`X;r+;5)w%*R(TOx-yrXs7u zTxjNp08hNtB>s9Fd<;dm_?f61#G|)0Zq=vaxQeZaM6o5#TE)SN^hYhnc!L;Pyg*k0 z__LsSr93Ldy~^hMX~7+3?nnkY2^0Ihce~b4&zrNnk6-m*xDM_+9tD_WRcuK4=6nNt zMR_<5KARp|qzD;n<3`KcyFunuDrZ5D0f}^Xob}AG8J(8%(WhCDvqC!&Ko04x;>Tz$ z?c=)pDuy}U3e$_*yo~qL8rp5N%^aWfEB1OUr_t20mUbu5btt`@1WzLH?E4)yW^Crl zm;XF&Q9@s7#yhpi*;F49>VBe`Z0dR@3tC~dUJ^Y9$eJRgV)?Amlcg`BHd_QC#XnZv zdwy(kZ2RHK-GuKwM*vJ`%#V2fj=QOM5Rn0S2=wIFxs5A z2!~jy;8g0Xlg@E&3NSaKWIwo%t*SM7#m6>X@;=^0N^gGuNnAl~S^IWc+X6nMW;p3b z5U5}AKf=v_HkSN`Lo!AvEhyHk``rz(KoV%I@E^$-^_~Yt7INjIS3n@ZJE|uDz?q^! zHwHRcoPkc2LmjRydgOhMR2S=+g@?(Epi`!WMEf@m~8qt!1yN@|JXRIexFL z0_`H{))0v1EylG(TGo_(4`FLd42Cp}YNfH|3|T9q3jK7|gOby2Z@eDLj^;aR?FI}x zVEy*DOwWaZe@gXr_p-}t&y?wWj;y(T`Jh({fHAleD%geQ_C}?mnQQ2@oh)A!7frtE zvTWj$ti)#gFb?6axq-4A!)*8rmRIQSjN{!ZM?Ovl7ew$4diIW19eHyR*gRR|-{_Pe zAh!unk*RvOP`Dkc_>fi2>t$_+{w}lC6`H-2*-EciGR4e=Pm3Qp*cmr&@yqgZ ztwRl9 zH!ujC+5$-~p1Z!xA_Y6!>v4eaAzfJ9YC9H210+o{BtB_}Ou-TD49|>`BYc3i;}@Qh zK>&y2qx)|s>b}~nb4x`KK zJ0sZrmjNNipP#EEJR+O_p$H)U9?|eyRze3Q9%yg66IBZ8>8eFj!sW$hmn0pAIyl<9Y;G47$@=@sen}Na)RDP7TS< zpWfF+p&ye4r@czc3a`K{<1%za)CIZFQ86~T!ysAbMOAMyVMY>BWwT zKxf+}d?jH_693*O&9<$q;s*nz|K?k_0CY5_alZwY@+xb80{jqieS67nUY~F3%6vcs z{F{#IyjSSKTIJnELXyjnWtAaI)fBsrEAC0tX4UGHlsix;Ncm(j(4kXP&k&+Et&i8W z)fsoU#41vwI0AcH-LZ>TM{@w`rg+pSRK6G5cj?MOJ3-NTxd89I++I=ba@hXkY|jj) zQu_ldme{FZ>1PwOZ^xmdmkN+Gkm})>g7nBHfM{Cqo!uqPj(R!WXw-!yeTAG=QJ5 zX8{YRXpX7wTpotN-wdu`ZuH~553DmL#aak5{#d(@7S2JT2g-ZQ0Ykf4WhgcM`%T*; zi5}HF3O8UICEB~Mq9tn6ylfTl67bURdvc3s&wJ zqaBdTEYWp;^Nb5Dk-N?i^!itBd>j@*N_S@Z2{oUO z`~aOgLPv?3|F&`S4l@ykO=RYz28DV38tSkH;R2NPd+tX7bWA=f#q#oV+0{0prLc+- zrC-S7%!SsaMW=a^KoP1>tqfnUi*dcN$_ZLv2abW;q1uSOOywW{&r*fK1il}w(&A;w_&%Xn7-1MY8%~a);i_B9B$a0!UrgFwb(oU# zDW(DeO9l#PzlF{eY9>VW8%)r=%mu$>I6|>@n3|dE@k|*|o?B6KvGK?_i^H4i&Q@=- zW$s}Wn_TEIH@z&ii)1?MkY|<$TR{shD`Zo z(>DTjhil2dDszun-u|=h5Y5YfW1DxF6|PVxPIpwl@0D7Qw~r-+7bGh5dvF9wH0EZN zeHfs;pb_Do_1&i4!DNnA$F;WAOAeG_J!@#t3K+JSM{27Ffhb=`zjUky4?hDS`@e<7 z7)tMgOoW5Xjmhf+{gV4Q4vTX|${GgeK97q3O5H0ZA3|o|6(QB?Z9R@G-PS92n~Jlv zoh{86XV+x>)TVHp6J#t+$z#;>DVh6_vih0x`>KN z51*6#j+%#R#)=6!fPwzkPQ1D93>o-j#qNSCbZhfIrNZ}ApeKJ7Pms|{wlT8`BDrEp ztTJ9 zPR>szM7seBMaxVEcoUyD4fFc9gqrLhWb?u7Kx8WX+EC@o9dgBCBV?Dw|BwKt3FQPE z{4N>y-k8%0#E&_MwDou~E@`I;BnO_)Z_Npo@Zz`hFUPuV@?`Fr&k#}kheBBY1hfB( zVmv>^TjL;9zH)c~dolTj`|vkB+RH#I1rYF+wO5kub1;@s`Jt+=C@*gXJuj71w01Q_ z(s28UuUzx?<=%6z`YLu;$8h>Oj#$m{F6@`K48kK1(l;ZEUu_eIs~UXvR)nW5kvoOc zy;8lbYJp>{(kpKQazOH4nW!>7c{h$3+-;|tp6~0;tyf9THxIc17BX8kjGpAx`}&;J z;?E}SdZ!!_9?p`vF)=>H8O23+QP9<{3T?IJKjAgM{yfC5hTTXbVN4u$K^caI<>-&` zROyl2Va1ibVShcX|02pm28i&71`S~ctv{_~#3=T7%bX(;Iq=c5l|b(m&D9T@-!EAf zR@+P``piCUJJEI@UxQlB%Gz-0WZFA z*s~Pp<081`=0^rFZ^o*83Pb9Qkw8lanVTtOZ4lY=UB8Tuxm0g|WoHyAVu1E&)2fYDsgshk zdx2~6yz8WJULe@G!kfNMGY?mer9*f7;jZqh?u{p830eltUA0}@{B6JH|A!cRC8E8W zQ|6(B@GnWSH>&b)y*fIvhsrrIrwSVW6d*LS{COFmTz)<9r_D2g`_BPgIVVBJ?xt5I z9K+JnJbQsENfbr1X5O+8-{T=cLu(Asq=wrcDf+o|G(HA zH1dF~s~neV8HsELDB)Ltqj^8z4FLga)%WuylF(){TI#<}?y!Tz+vrzulhO|TWeE-^ z060bLf@vU_hNb*mqB>Hs*?!%u)>rP%q^F`nCcV)oNC(th=1<#Dl?r zf$nM9NY_!}=vw9SPcFqd z#3LIiP&7w+Xr`w9?&U%RP7+#)y7y9hTn6gGD%!)HYaFg*VX7l}Z~eGiwN#L0H&meeDTL_9 zd94gdeo|wQOKft`Jjwrg#C{_OK;@*Od@V2R4I|TizaXrpk=3W$IVG^-^DTbmm~0{a zp3v0^_ZERS!xV+OSgV}Pw1(BoMMJZ9m49eZB${^t_493wsImYqB|jba%4w>qg-jPa zip=AHMChvWS#&-R1}591yW?&q6smB(tudPJ7&)K&cm%&_B}-bUeR%ZLOgS#bu1Zz^ zOi5$qdei1v*yjBljSifYZeOBff(4V4>4}G$l)kB7s?UG)r2MOHI71Gy;oUDw!vne>|kqD|Yw{q5F0uutB+fP)3R>n6>)9`=W_V6MwosXk^2A4o3b)lDiVu z1;4n9%lDQ%D8IRIt&4%b0+VT?C}8G$`qze2`r_0|p5Q7_or&B^c8?xu;#VeJa@eLH z4vRlU%FSk@98aCNaI}F>R(2xua?;S+P|7#bI1J6E(#Ln{T_A?+>@fs8 zT<<8;C^-yJ-jo0(`3Z6m+VM#z`^nED?-O81ggwxfiwBwo(a(Xaa~YE4Ck2a+$DXXg z9FN{m{}weXyL_L=kZ$iR%!kcx*^A@Z401Y;g$nr5flJO+&i5Jbu3%^euH_<}%(L7@ zND7*bwm`?Xz4@ICrqU&<=QDs1^nan=g2`8BPUtqFLku+`{iZ;veY$S1IoQMS-sB=Z9iJ)_NA175vf2 zz@JL0q7&9yXly@QW?L7zdIH3H9DrY&%wXvb0}qx9`WLkl3i!^zrK*lyTLc`MNgv-} zU-GmYGs58E(d!=&#>+o%a3C#au17{C%~YCeXsL=j2B7kYJ%K4R=1r+*^f6ohs2R*S zO<6ftU#(t`@9EYqw>!c~KE$Tk7xfH5^zTU6*{alR`J4=hN`%WAP>?tt)&&BlfCYZo z;LaP^wjzT^YLi~U^9Qsj%N5ku?;Z-=*aWNPJ{(s4`+L1_5e|A$Kyx^Z$LtH++h(d` zA%>c5pNSP7YvUGKfk`WMscor?BKP;Qq&gY%R^KhjxYTD$D?5!Ah46s-DI&`e3Fv9T z{%jg5r?jjX)bi&PhxL?@qV#@}RA-Dyo22a+TDoNpD`{A5`=_4(yYSzxcjRa>JJbHlNH&|h9eFKAt=>>?D=@0PKu$)ms z1eIcXd`CQbP8&K!;TAT%NG`JpJKZ-d^dH6BaDv2-0l9&W5_FViXn#v}$Jguvw_eoM zrD`*&dFM#I9eW$@iCp&0k3Zl0h2Y$Mji)xx7-Cevo33mcX>c8w?$7p&Ho0u|D*UV< zxwoE7k`c~{SQ_F2XR3adLNWhi4GjDrPaXx``IFvlX;lvc7+$&mND2RI^8Ej$@DT?P z$Nyfldd#|v5gev@R`2IO%6HN@zUzEP(oU%#HwKq?1RFB%e~Gx|${Y3+VANUfJ~rsP zhzTc5Tx<{+XyF89W&<5#ze;a`S5NW=Iv>@tAD6r32Q_99~AMT*#4ohfuc9M=9{vXfSdhCwkXIOPgkZP7dnZrzGUMwq@H>?Vv*jbh3h zmyJc6+cLBqO{WEH#HVdaTG$92g$Mz4^Zp;I5dU{;ku$RJ9d7<_)M@fhNPz{KLYpGX z%=J*xB3)}dN4hEg;#WFJ$y2yggDW)|m$dqFPO_bc#w)oq0SrjVG2oik6HIK^fzpE@ zn}j77FSuJE{as9cV1?UTAtzuRU#iMhsQ4LsG;4WpE`4MJUs*x{m zySKGpOsL1pCcK5|f%;}+mC+ef^PC?JM?l<%l9H!W-UDCXHZ(mDjdZLy z#lPUYVyM|E|N3Ly;!PWz{l;*|=O^X^7-x13WKE1Q+V_k^+sHZ}RMzyh~AiKaP3a3i~y`eZV$B+FRO%&;}GcTA*tzxO?#>%Q-~uj_aH?(Yc_2Vf4+ zMnCXf7FHK1=08sL7F#1*3SaZ}7h=r~^vZF_vp<^xdw(k+IX#Mr@19nj}d=VLMAt zG2=1ANcC&_!zBe{G~y((ZNKJjVq&$5k&VL+|A1Omi2i$sGSGjU?Ft7udf$ISj#9>+ z110#{|BH&~6Ag{@+*%o0e5A}25O5~XGwW@!Fvw-lLH!k+90fwnTW?+SGS!_r_2FFp z6*)6aCbN8t2Ht)N*&-)hKDQ7o8J;rjdL~}LdP!+}szQqwle4mMwwM~opI?EIfwxX) z?*p)Sdt4dv^)~FYy3Is?^hv*jRf&-SOLeI0fR3=a5!25&mXgN+RUC)Hganmx>>n>J z9!sCI$8`5dpNg{lk_T-4TJ#4Vyz0XTXi=U@hk|FJQxVyVR_tAM(m8L)^>5x!N1v^_ zJFQPQUI2Py566zy!C>7mosE>ZC%iJiX1~32ZD&=NmgHXA_Jw4PFT+~a1@ElSfdd+Q zDM)tWiOc7U?5g#(IvuOJfE-(*US&*Q8p)*f+LZqahx5y?^q<~>s&Mt%s((mRL(KN^ z3)-x%IB?_C_gJ?E7SB``;9WQquJg_TG$|?*D{ZQLHO_0iV$pjM-ez6S=0)QbuG@V; zHJ#TwwRTfkw*RZU)R%tz>M4>8xXa>@ zcZ(hgN{)mV5d39PuN?O|sNcHUw{Bf*Ae7(yVy(g8c3Q9vCo5v^xt)Kmv5C zWtkFJ6UEbGS_~k^zXE3;s2EpORo#!CI$(=limEcaSeXHErh|jf2Yx*rh|E773VLX{deys1Ze}0QNr$Y|TdAz_;Nt7!u(h zYPczaG^Ao*XzhH9%s5C|S$I-ry*(V8JWTwlL1e6OqNBFh&J&hzjfV!W*iRSD2`^f} za>xOqcE%>sejSA~50`=C&$l2z1WUqp&ND)jlMk51!0%`?+bpXW-ZA&fs#h!2X5bcT zYy8SR@948T7l;gj?@t`$dC8Mn2;|=1@%w2*OJ${$LgmOs!_r43ro7|HLuRvj5%7mC z%;QL+>uh{Akhh)!PycDF&|T*gS5a@SUvsZ+}5p)De`qY1jbu`pmC%Jh#4ihvur4T3d3C)lT{OEbX2}-2HGFIqbeeDgV@B zyM$tt<1)^($yPC8)n_A$OC%4^JD6)?{YP2z22t^y271Fh$`kfU*@#pF&@FON<<*%l zRAt^DME(&gEa~h5u)Ji)G(~zL}DzR|evmkjqVCzme^XFd-Fpr39`D4EBKX%R4P}vmg0|Nr)6-VV&xnzfTJ9__DR+dGrn z(tydw8*JAHQqHYZRbBsH7_kGNo+@e$=MUf_ut_A#ff~)~m1`uQ8DU%(5;i#C-a!Yb z@OQ^$IvA$#(ghXlOPz7lXhPGM6$LmQ%LD7-Qu~ysek;ri3%KaQl%MS4$|8-o3TF<< zTaiyiJ|iVPbQNDf0qs)YU5aVr6?T&Ojr*1_tbz7U_sr-82U?@I>=Z>ewi=g3SmOz+ z-cd?aHnhoWD!g!<*ptx99m1fZGpm%-Y8essxnw2CVEX542H58(f#>qNa*^1)VQrkH zzBD1*r33iMPH6@Vk6YK|%usux8g!N|F=+vzZwDn$PmjlHr(i;DiME}yRmj{MQy!gq z+&$*x-!Q(7{agm)HY0*7fIJ!jb7@K`-)4tRy5b>8#NJq7iTPGoP*Nhk5H1^Z3fjB4 zOm4-yC6L`w({8!(Ow)xQI-&7lv!gwVHADN#!4<~KGNjFQyDJ6u%ag$z(=(?*WZ3{) zV>S5dlJ5bHPP(g4HK4M#i6M{HFTW-^_4WFznaz1bZw&w&ABX&h_JWrnMd0YAsv-OB z&hkn%h7~a(XEs#+%6-ztAGg~vQ7ZqE25Fn$$up!rrEMx|Jg8XC5%Fe$yR&+q`a<9O zi}J4baU*NtgPMgH- zTSmm(K=fdRk<*H<$062r~r&Z!yK ztf@5yPWXo=AoA#M*^SG&pP!{S8k@P6T?#J8)W?kOQpzU;cCSB|qw~vmKv@b<_n37L!-zI9PMJOg#@ z*Mre|4w3Xmso-~FIGaqGsLzacgS!YuO3ilSRlo1&{+t&hF=n^xnQcE?H48L<1laC| z-5#Fjej)dBwY#!)J?Z23@I7y}hHVxWUON*VxIQccGNaA+EUwNlo3^EI*qi$Q`nubFUXNXHB(_4pI+`M zx@vetMK^#%wXSI?+v_gl2wT+yNi$#Q=KdR$7fzs~djVPD7;eRJu0tc3gvp!S>fs zd7-C~Je{_|@e^NkgfV))TO7V}^lhXr{IqO1-N&hZ3==Ve6m_IjeEcIvFQljCOGF?@ zO!`-DY)pV>-<4z9rjBsicY$^w-TF#uiD{r{Jd1%NOzf+xWmGLBp0&8HrM3)7-EddMqWtmiu=lG8}1W<2a+FOYXF(U5wQ(uDm^|P2SN}a{ryCR13gLb z$5V3;&bV*HD#9*BEC(@Awyg zVEp138{6On1TPk)q`v+lbOI1xfZT@e@@W_!Kcv`Z0fswsj^?^hB=QXV#ec0l7Fd4h z>6H9X5n_8erODku0F~`4>$4Pex#F7dllWqvapOwdoDy9um2hx52HCt~C0Oem5G+G} zKP}F{zQ7kIO7g_aK4<|(lACm|P83tXfg|P=Yz4hU3)i-{yJKQR3AWK)`kZU+=gl?w ziBR;Bt*s0{j@WM82*w;Ts)|J4td_os?4d$!-Dco0!s5M1`Hg3Gl~0=qgfEk8ieia^ zsTk=BcyBU$Xp&hxR#b8cDkaIh2=i6M&8}2zi#?Z>*jtPgXbGwsht2P&wV~&gunsQcn8e}WGJ6p319p^0lk;Z6dL$7u$K;5WBJT>G!YPRE!uAXmvp+oZu**96>-v%qf zjqtx0JWq_^@f4ATk0x*-4$)PH`_)k=3Km$WQ--Z(UoB|4^a)?j%r_8@l?}Ig5grC* zmJ;7>7Q7*f5;@Ot^Dx>dQRvBOk_nOF%7T$D#JD)`uAl0#iPMrX`@c_MU5l zqmqr0x=s}nPmr7X4J}V6+^UaxF{f2>9ofv@gNhk2Me&f*L$-X9tO;Eg^+rTQvanCh zX{1E9fuzJzceOV{ZBl6^Cj3e2D$~TD4Wl2QQr~;`afklY7i(glT_-IW#!PkqQ6S{R z{E}uH7Q=DHJ*VhmB?D~2-ar{CT`Ua^bd_z5bftw})XK;Ige2Pt&21cs3vb}PbyQJX zp*p8Dy5~4%xHpi#n;p`)!TqONV@u_A5nAnP#@N$y^(CFv)oEXc<*kD{5rnVs^7MQ8 z0!0e{jOVzDux=)yrG#jjd?0Y{M5smM4@7Z> zpxofJgTJ*A_`7BNc6AP3_OMivE9+0o>yiy43W(N(gjdHn9m!N5QR0ELPWx}%RJ2C; zZYkecEM%z}BLzL4A6El(h?|t3?C)NK7WZlI38c_95nFIFpN4ew0-ZC16UX%@Kl9w; zyE@{jwPY|0b0Yp(ow2l|nyAH{<)ca4QqgRF&r}J#cfzxEuZOG`mrvYgL?dONx6Tuj zWSh*`t#tzAi7g)X6~rAkMWgrh^h~@J^Ya^i^d7yRvGk&duv~1xJS5|D?H{<)3h{hmE)6zJ!NS`P&_b07IJ|=$S=4S-7U6lJ>3wjy{MsJB28U9ZZDo||4`ME_=~mD$X?m-Vhm~%#RAqET7YJR z>(Q4ecwSN*mu^ZYqL`s{F&{%UOhuFUe{^s0q3r`zA_&A3p18ZKDd7BqjDo8(qFtY# zku8+dRv`ohJnC2TW=kk}p!3K1CR@CLK%WP-MFzDM-G*K!qNZe9L^*6OFF}40ZH{l> zIJyqaMTnJVw9Soj(X?+0sX6_)U>XfCYql4!Kp2)=N;ptiv|y=(YT-H->k7&WQYR=DGrIz@p%S+%pNe9{`-dhXBisgM7g(`S$#3=&cf^K7BJUxG-om;d&AgKk zMDxTQBP?kmjELM!;>OCuX9TR^J?;#+TFw=|JjdT+J+2}bgPDc#dx8m~b@*RfV7OC* z$ZiaWk3$-WXlC@ua%o6VIs2TFLEg8{M^KZjmbW&kzbQe{c^_^G*Mxg&Ivq6Mg%fvu z+(ddMU`@d?5#n})$%i_CWFc!+lDx!^p<)HOg0GsWjYJ0-!<9J^%m! literal 22675 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 diff --git a/SCrawler.PluginProvider/Attributes/Attributes.vb b/SCrawler.PluginProvider/Attributes/Attributes.vb index e1b9aa2..1237982 100644 --- a/SCrawler.PluginProvider/Attributes/Attributes.vb +++ b/SCrawler.PluginProvider/Attributes/Attributes.vb @@ -36,8 +36,22 @@ Namespace Plugin.Attributes Public Property IsInformationLabel As Boolean = False '''

Label text alignment.
Default:
Public Property LabelTextAlign As Drawing.ContentAlignment = Drawing.ContentAlignment.TopCenter + Private _IsAuth As Boolean = False ''' This is an authorization property - Public Property IsAuth As Boolean = False + Public Property IsAuth As Boolean + Get + Return _IsAuth + End Get + Set(ByVal _IsAuth As Boolean) + Me._IsAuth = _IsAuth + If _IsAuth And String.IsNullOrEmpty(Category) Then + Category = CategoryAuth + ElseIf Not _IsAuth AndAlso Not String.IsNullOrEmpty(Category) AndAlso Category = CategoryAuth Then + Category = String.Empty + End If + End Set + End Property + Public Const CategoryAuth As String = "Authorization" Public Property Category As String = Nothing Public Property InheritanceName As String = Nothing ''' Initialize a new property option attribute diff --git a/SCrawler.PluginProvider/Interfaces/ISiteSettings.vb b/SCrawler.PluginProvider/Interfaces/ISiteSettings.vb index ba65151..7d96012 100644 --- a/SCrawler.PluginProvider/Interfaces/ISiteSettings.vb +++ b/SCrawler.PluginProvider/Interfaces/ISiteSettings.vb @@ -19,6 +19,7 @@ Namespace Plugin ReadOnly Property Site As String Property CMDEncoding As String Property EnvironmentPrograms As IEnumerable(Of String) + Property UserAgentDefault As String Sub EnvironmentProgramsUpdated() Property AccountName As String Property Temporary As Boolean diff --git a/SCrawler.PluginProvider/My Project/AssemblyInfo.vb b/SCrawler.PluginProvider/My Project/AssemblyInfo.vb index 5c197ea..b98d3e2 100644 --- a/SCrawler.PluginProvider/My Project/AssemblyInfo.vb +++ b/SCrawler.PluginProvider/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler.YouTube/Base/YouTubeSettings.vb b/SCrawler.YouTube/Base/YouTubeSettings.vb index 12504af..a70091d 100644 --- a/SCrawler.YouTube/Base/YouTubeSettings.vb +++ b/SCrawler.YouTube/Base/YouTubeSettings.vb @@ -361,6 +361,12 @@ Namespace API.YouTube.Base Throw New NotImplementedException("'GetFormat' is not available in 'FpsFormatProvider'") End Function End Class + + Public ReadOnly Property DefaultVideoHighlightFPS_H As XMLValue(Of Integer) + + Public ReadOnly Property DefaultVideoHighlightFPS_L As XMLValue(Of Integer) #End Region #Region "Defaults Audio" 0 AndAlso m.FPS > MyYouTubeSettings.DefaultVideoHighlightFPS_H Then _ + BackColor = MyColor.DeleteBack : ForeColor = MyColor.DeleteFore + If MyYouTubeSettings.DefaultVideoHighlightFPS_L > 0 AndAlso m.FPS < MyYouTubeSettings.DefaultVideoHighlightFPS_L Then _ + BackColor = MyColor.UpdateBack : ForeColor = MyColor.UpdateFore End If Dim sv% = m.Size / 1024 diff --git a/SCrawler.YouTube/My Project/AssemblyInfo.vb b/SCrawler.YouTube/My Project/AssemblyInfo.vb index 4acca89..8dce322 100644 --- a/SCrawler.YouTube/My Project/AssemblyInfo.vb +++ b/SCrawler.YouTube/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb b/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb index ef02e8f..f2c11fa 100644 --- a/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb +++ b/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler/API/Base/DeclaredNames.vb b/SCrawler/API/Base/DeclaredNames.vb index 2076ab4..34af8da 100644 --- a/SCrawler/API/Base/DeclaredNames.vb +++ b/SCrawler/API/Base/DeclaredNames.vb @@ -11,6 +11,9 @@ Namespace API.Base Friend Const Header_Authorization As String = "authorization" Friend Const Header_CSRFToken As String = "x-csrf-token" + Friend Const CAT_UserDefs As String = "New user defaults" + Friend Const CAT_Timers As String = "Timers" + Friend Const ConcurrentDownloadsCaption As String = "Concurrent downloads" Friend Const ConcurrentDownloadsToolTip As String = "The number of concurrent downloads." Friend Const SavedPostsUserNameCaption As String = "Saved posts user" diff --git a/SCrawler/API/Base/IUserData.vb b/SCrawler/API/Base/IUserData.vb index 14077f7..758571b 100644 --- a/SCrawler/API/Base/IUserData.vb +++ b/SCrawler/API/Base/IUserData.vb @@ -77,7 +77,7 @@ Namespace API.Base ''' Function Delete(Optional ByVal Multiple As Boolean = False, Optional ByVal CollectionValue As Integer = -1) As Integer Function EraseData(ByVal Mode As EraseMode) As Boolean - Function MoveFiles(ByVal CollectionName As String, ByVal SpecialCollectionPath As SFile) As Boolean + Function MoveFiles(ByVal CollectionName As String, ByVal SpecialCollectionPath As SFile, Optional ByVal NewUser As SplitCollectionUserInfo? = Nothing) As Boolean Function CopyFiles(ByVal DestinationPath As SFile, Optional ByVal e As ErrorsDescriber = Nothing) As Boolean Sub OpenFolder() Property DownloadTopCount As Integer? diff --git a/SCrawler/API/Base/SiteSettingsBase.vb b/SCrawler/API/Base/SiteSettingsBase.vb index 1e2b52e..c1448b1 100644 --- a/SCrawler/API/Base/SiteSettingsBase.vb +++ b/SCrawler/API/Base/SiteSettingsBase.vb @@ -34,6 +34,16 @@ Namespace API.Base Friend Property AccountName As String Implements ISiteSettings.AccountName Friend Property Temporary As Boolean = False Implements ISiteSettings.Temporary Friend Property DefaultInstance As ISiteSettings = Nothing Implements ISiteSettings.DefaultInstance + Protected _UserAgentDefault As String = String.Empty + Friend Overridable Property UserAgentDefault As String Implements ISiteSettings.UserAgentDefault + Get + Return _UserAgentDefault + End Get + Set(ByVal _UserAgentDefault As String) + Me._UserAgentDefault = _UserAgentDefault + If _AllowUserAgentUpdate And Not Responser Is Nothing And Not _UserAgentDefault.IsEmptyString Then Responser.UserAgent = _UserAgentDefault + End Set + End Property Protected _AllowUserAgentUpdate As Boolean = True Protected _SubscriptionsAllowed As Boolean = False Friend ReadOnly Property SubscriptionsAllowed As Boolean Implements ISiteSettings.SubscriptionsAllowed @@ -138,7 +148,6 @@ Namespace API.Base Friend Overridable Sub BeginInit() Implements ISiteSettings.BeginInit End Sub Friend Overridable Sub EndInit() Implements ISiteSettings.EndInit - If _AllowUserAgentUpdate And Not DefaultUserAgent.IsEmptyString And Not Responser Is Nothing Then Responser.UserAgent = DefaultUserAgent If CheckNetscapeCookiesOnEndInit Then Update_SaveCookiesNetscape(, True) End Sub #End Region diff --git a/SCrawler/API/Base/SplitCollectionUserInfo.vb b/SCrawler/API/Base/SplitCollectionUserInfo.vb new file mode 100644 index 0000000..4e9ec1b --- /dev/null +++ b/SCrawler/API/Base/SplitCollectionUserInfo.vb @@ -0,0 +1,28 @@ +' Copyright (C) Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace API.Base + Friend Structure SplitCollectionUserInfo + Friend UserOrig As UserInfo + Friend UserNew As UserInfo + Friend Changed As Boolean + Friend ReadOnly Property SameDrive As Boolean + Get + Return GetUserDrive(UserOrig) = GetUserDrive(UserNew) + End Get + End Property + Private Shared Function GetUserDrive(ByVal User As UserInfo) As String + Dim u As UserInfo = User + If u.File.IsEmptyString Then u.UpdateUserFile() + Return u.File.Segments.FirstOrDefault.StringToLower + End Function + Public Overrides Function ToString() As String + Return $"[{UserOrig.File.CutPath.PathWithSeparator}] -> [{UserNew.File.CutPath.PathWithSeparator}]" + End Function + End Structure +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.Designer.vb b/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.Designer.vb new file mode 100644 index 0000000..556a481 --- /dev/null +++ b/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.Designer.vb @@ -0,0 +1,111 @@ +' Copyright (C) Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace API.Base + + Partial Friend Class SplitCollectionUserInfoChangePathsForm : Inherits System.Windows.Forms.Form + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + Private components As System.ComponentModel.IContainer + + Private Sub InitializeComponent() + Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer + Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel + Dim LBL_INFO As System.Windows.Forms.Label + Me.LIST_USERS = New System.Windows.Forms.ListBox() + CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() + TP_MAIN = New System.Windows.Forms.TableLayoutPanel() + LBL_INFO = New System.Windows.Forms.Label() + CONTAINER_MAIN.ContentPanel.SuspendLayout() + CONTAINER_MAIN.SuspendLayout() + TP_MAIN.SuspendLayout() + Me.SuspendLayout() + ' + 'CONTAINER_MAIN + ' + ' + 'CONTAINER_MAIN.ContentPanel + ' + CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 261) + CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + CONTAINER_MAIN.LeftToolStripPanelVisible = False + CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) + CONTAINER_MAIN.Name = "CONTAINER_MAIN" + CONTAINER_MAIN.RightToolStripPanelVisible = False + CONTAINER_MAIN.Size = New System.Drawing.Size(384, 261) + CONTAINER_MAIN.TabIndex = 0 + CONTAINER_MAIN.TopToolStripPanelVisible = False + ' + 'TP_MAIN + ' + TP_MAIN.ColumnCount = 1 + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + TP_MAIN.Controls.Add(LBL_INFO, 0, 0) + TP_MAIN.Controls.Add(Me.LIST_USERS, 0, 1) + TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + TP_MAIN.Location = New System.Drawing.Point(0, 0) + TP_MAIN.Name = "TP_MAIN" + TP_MAIN.RowCount = 2 + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.Size = New System.Drawing.Size(384, 261) + TP_MAIN.TabIndex = 0 + ' + 'LBL_INFO + ' + LBL_INFO.Dock = System.Windows.Forms.DockStyle.Fill + LBL_INFO.Location = New System.Drawing.Point(3, 0) + LBL_INFO.Name = "LBL_INFO" + LBL_INFO.Size = New System.Drawing.Size(378, 50) + LBL_INFO.TabIndex = 0 + LBL_INFO.Text = "Check the user destination paths and change them if necessary." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Double-click to c" & + "hange." + LBL_INFO.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'LIST_USERS + ' + Me.LIST_USERS.Dock = System.Windows.Forms.DockStyle.Fill + Me.LIST_USERS.FormattingEnabled = True + Me.LIST_USERS.Location = New System.Drawing.Point(3, 53) + Me.LIST_USERS.Name = "LIST_USERS" + Me.LIST_USERS.Size = New System.Drawing.Size(378, 205) + Me.LIST_USERS.TabIndex = 1 + ' + 'SplitCollectionUserInfoChangePathsForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(384, 261) + Me.Controls.Add(CONTAINER_MAIN) + Me.Icon = Global.SCrawler.My.Resources.Resources.UsersIcon_32 + Me.KeyPreview = True + Me.MinimumSize = New System.Drawing.Size(400, 300) + Me.Name = "SplitCollectionUserInfoChangePathsForm" + Me.ShowInTaskbar = False + Me.Text = "Collection users" + CONTAINER_MAIN.ContentPanel.ResumeLayout(False) + CONTAINER_MAIN.ResumeLayout(False) + CONTAINER_MAIN.PerformLayout() + TP_MAIN.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + + Private WithEvents LIST_USERS As ListBox + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.resx b/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.resx new file mode 100644 index 0000000..152bcac --- /dev/null +++ b/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + False + + \ No newline at end of file diff --git a/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.vb b/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.vb new file mode 100644 index 0000000..1bc9c2e --- /dev/null +++ b/SCrawler/API/Base/SplitCollectionUserInfoChangePathsForm.vb @@ -0,0 +1,78 @@ +' Copyright (C) Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Forms +Imports PersonalUtilities.Functions.Messaging +Namespace API.Base + Friend Class SplitCollectionUserInfoChangePathsForm + Private WithEvents MyDefs As DefaultFormOptions + Friend ReadOnly Property Users As List(Of SplitCollectionUserInfo) + ''' + ''' Cancel = use initial
+ ''' Abort = abort operation
+ ''' OK = use changes + '''
+ Friend Sub New(ByVal _Users As IEnumerable(Of SplitCollectionUserInfo)) + InitializeComponent() + MyDefs = New DefaultFormOptions(Me, Settings.Design) + Users = New List(Of SplitCollectionUserInfo)(_Users) + End Sub + Private Sub SplitCollectionUserInfoChangePathsForm_Load(sender As Object, e As EventArgs) Handles Me.Load + With MyDefs + .MyViewInitialize() + .AddOkCancelToolbar() + LIST_USERS.Items.AddRange(Users.Cast(Of Object).ToArray) + .EndLoaderOperations() + .MyOkCancel.EnableOK = True + End With + End Sub + Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick + MyDefs.CloseForm() + End Sub + Private Sub MyDefs_ButtonCancelClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonCancelClick + Dim m As New MMessage("You have canceled the change. Do you want to process user(s) as is or cancel the operation?", "Change user paths", + {New MsgBoxButton("Initial", "Process users as is (IGNORE changes to this form)") With {.CallBackObject = DialogResult.Cancel}, + New MsgBoxButton("Process", "Process users as is (INCLUDE changes here)") With {.CallBackObject = DialogResult.OK}, + New MsgBoxButton("Abort", "Abort operation") With {.CallBackObject = DialogResult.Abort}, + New MsgBoxButton("Cancel", "Continue editing here") With {.CallBackObject = DialogResult.Retry}}, + vbExclamation) With {.ButtonsPerRow = 4} + Dim result As DialogResult = CInt(MsgBoxE(m).Button.CallBackObject) + If result = DialogResult.Retry Then + e.Handled = True + Exit Sub + Else + MyDefs.CloseForm(result) + End If + End Sub + Private Sub SplitCollectionUserInfoChangePathsForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed + Users.Clear() + End Sub + Private Sub LIST_USERS_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_USERS.MouseDoubleClick + Try + With LIST_USERS + If .SelectedIndex >= 0 Then + Dim obj As SplitCollectionUserInfo = .Items(.SelectedIndex) + Using f As New SplitCollectionUserInfoPathForm(obj) + f.ShowDialog() + If f.DialogResult = DialogResult.OK Then + obj = f.User + If obj.Changed Then + Users(.SelectedIndex) = obj + .Items(.SelectedIndex) = obj + .Refresh() + End If + End If + End Using + End If + End With + Catch ex As Exception + ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Change user paths") + End Try + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Base/SplitCollectionUserInfoPathForm.Designer.vb b/SCrawler/API/Base/SplitCollectionUserInfoPathForm.Designer.vb new file mode 100644 index 0000000..85d2148 --- /dev/null +++ b/SCrawler/API/Base/SplitCollectionUserInfoPathForm.Designer.vb @@ -0,0 +1,134 @@ +' Copyright (C) Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace API.Base + + Partial Friend Class SplitCollectionUserInfoPathForm : Inherits System.Windows.Forms.Form + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + Private components As System.ComponentModel.IContainer + + Private Sub InitializeComponent() + Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer + Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel + Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SplitCollectionUserInfoPathForm)) + Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Me.TXT_PATH_CURR = New PersonalUtilities.Forms.Controls.TextBoxExtended() + Me.TXT_PATH_NEW = New PersonalUtilities.Forms.Controls.TextBoxExtended() + CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() + TP_MAIN = New System.Windows.Forms.TableLayoutPanel() + CONTAINER_MAIN.ContentPanel.SuspendLayout() + CONTAINER_MAIN.SuspendLayout() + TP_MAIN.SuspendLayout() + CType(Me.TXT_PATH_CURR, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TXT_PATH_NEW, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'CONTAINER_MAIN + ' + ' + 'CONTAINER_MAIN.ContentPanel + ' + CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(484, 84) + CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + CONTAINER_MAIN.LeftToolStripPanelVisible = False + CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) + CONTAINER_MAIN.Name = "CONTAINER_MAIN" + CONTAINER_MAIN.RightToolStripPanelVisible = False + CONTAINER_MAIN.Size = New System.Drawing.Size(484, 84) + CONTAINER_MAIN.TabIndex = 0 + CONTAINER_MAIN.TopToolStripPanelVisible = False + ' + 'TP_MAIN + ' + TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] + TP_MAIN.ColumnCount = 1 + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + TP_MAIN.Controls.Add(Me.TXT_PATH_CURR, 0, 0) + TP_MAIN.Controls.Add(Me.TXT_PATH_NEW, 0, 1) + TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + TP_MAIN.Location = New System.Drawing.Point(0, 0) + TP_MAIN.Name = "TP_MAIN" + TP_MAIN.RowCount = 3 + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.Size = New System.Drawing.Size(484, 84) + TP_MAIN.TabIndex = 0 + ' + 'TXT_PATH_CURR + ' + Me.TXT_PATH_CURR.CaptionText = "Current" + Me.TXT_PATH_CURR.CaptionWidth = 50.0R + Me.TXT_PATH_CURR.Dock = System.Windows.Forms.DockStyle.Fill + Me.TXT_PATH_CURR.Location = New System.Drawing.Point(4, 4) + Me.TXT_PATH_CURR.Name = "TXT_PATH_CURR" + Me.TXT_PATH_CURR.Size = New System.Drawing.Size(476, 22) + Me.TXT_PATH_CURR.TabIndex = 0 + Me.TXT_PATH_CURR.TextBoxReadOnly = True + ' + 'TXT_PATH_NEW + ' + ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image) + ActionButton1.Name = "Refresh" + ActionButton1.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image) + ActionButton2.Name = "Open" + ActionButton2.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open + Me.TXT_PATH_NEW.Buttons.Add(ActionButton1) + Me.TXT_PATH_NEW.Buttons.Add(ActionButton2) + Me.TXT_PATH_NEW.CaptionText = "New" + Me.TXT_PATH_NEW.CaptionWidth = 50.0R + Me.TXT_PATH_NEW.Dock = System.Windows.Forms.DockStyle.Fill + Me.TXT_PATH_NEW.Location = New System.Drawing.Point(4, 33) + Me.TXT_PATH_NEW.Name = "TXT_PATH_NEW" + Me.TXT_PATH_NEW.Size = New System.Drawing.Size(476, 22) + Me.TXT_PATH_NEW.TabIndex = 1 + ' + 'SplitCollectionUserInfoPathForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(484, 84) + Me.Controls.Add(CONTAINER_MAIN) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = Global.SCrawler.My.Resources.Resources.UsersIcon_32 + Me.KeyPreview = True + Me.MaximizeBox = False + Me.MaximumSize = New System.Drawing.Size(500, 123) + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(500, 123) + Me.Name = "SplitCollectionUserInfoPathForm" + Me.ShowInTaskbar = False + Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide + Me.Text = "User paths" + CONTAINER_MAIN.ContentPanel.ResumeLayout(False) + CONTAINER_MAIN.ResumeLayout(False) + CONTAINER_MAIN.PerformLayout() + TP_MAIN.ResumeLayout(False) + CType(Me.TXT_PATH_CURR, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TXT_PATH_NEW, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + + Private WithEvents TXT_PATH_CURR As PersonalUtilities.Forms.Controls.TextBoxExtended + Private WithEvents TXT_PATH_NEW As PersonalUtilities.Forms.Controls.TextBoxExtended + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Base/SplitCollectionUserInfoPathForm.resx b/SCrawler/API/Base/SplitCollectionUserInfoPathForm.resx new file mode 100644 index 0000000..59c4986 --- /dev/null +++ b/SCrawler/API/Base/SplitCollectionUserInfoPathForm.resx @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE + QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb + ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb + +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv + qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN + v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA + prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ + qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY + HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 + qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG + VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP + WQwhyWIyJIUW5NqyPb7oCVtIlhVTwYf8nv7/t2zJagel9KmqKsIACYL9RjI8UHz5zshougZr/AEvbxEP + aZCDBY3VslixaJvX3wzkkDiOwbZtDRGA5vdNAg+TL27qgmt5XkBG/gTdAG7Gt+3PP9oOaEGFCVEC6rp+ + 5g9MfM/c5e4OsEZMZkQEtGL5H2DdZ5JRArDwPA+iKII0TfkC9vroC9j5vq8JTWw3WzWgLMtZGIaa0MR8 + vlAD8PYlSaIJTTiOowY0p0Bc19XEJo6HE59FAPuMzyAINKGJ1XLFZxHALtMrnkBXOIQIIIQ8YvF/KrgB + cMaRN0UdBBkAAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/SCrawler/API/Base/SplitCollectionUserInfoPathForm.vb b/SCrawler/API/Base/SplitCollectionUserInfoPathForm.vb new file mode 100644 index 0000000..32e2272 --- /dev/null +++ b/SCrawler/API/Base/SplitCollectionUserInfoPathForm.vb @@ -0,0 +1,68 @@ +' Copyright (C) Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Forms +Imports PersonalUtilities.Forms.Controls.Base +Imports SCrawler.DownloadObjects.STDownloader +Namespace API.Base + Friend Class SplitCollectionUserInfoPathForm + Private WithEvents MyDefs As DefaultFormOptions + Friend User As SplitCollectionUserInfo + Private ReadOnly UserNewPathDef As String + Friend Sub New(ByVal _User As SplitCollectionUserInfo) + InitializeComponent() + MyDefs = New DefaultFormOptions(Me, Settings.Design) + User = _User + UserNewPathDef = User.UserNew.File.CutPath.PathWithSeparator + End Sub + Private Sub SplitCollectionUserInfoPathForm_Load(sender As Object, e As EventArgs) Handles Me.Load + With MyDefs + .MyViewInitialize() + .AddOkCancelToolbar() + + TXT_PATH_CURR.Text = User.UserOrig.File.CutPath.PathWithSeparator + TXT_PATH_NEW.Text = UserNewPathDef + + .MyFieldsCheckerE = New FieldsChecker + .MyFieldsCheckerE.AddControl(Of String)(TXT_PATH_NEW, "New path") + .MyFieldsCheckerE.EndLoaderOperations() + + .EndLoaderOperations() + End With + End Sub + Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick + If MyDefs.MyFieldsChecker.AllParamsOK Then MyDefs.CloseForm() + End Sub + Private Sub TXT_PATH_NEW_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) Handles TXT_PATH_NEW.ActionOnButtonClick + Select Case e.DefaultButton + Case ActionButton.DefaultButtons.Refresh : TXT_PATH_NEW.Text = UserNewPathDef + Case ActionButton.DefaultButtons.Open + Using ff As New Editors.GlobalLocationsChooserForm With {.MyInitialLocation = TXT_PATH_NEW.Text} + ff.ShowDialog() + If ff.DialogResult = DialogResult.OK Then + Dim dest As DownloadLocation = ff.MyDestination + If Not dest.Path.IsEmptyString Then + Dim ph As PathMoverHandler = Editors.GlobalLocationsChooserForm.ModelHandler(dest.Model) + If Not ph Is Nothing Then TXT_PATH_NEW.Text = ph.Invoke(User.UserNew, dest.Path.CSFileP).ToString + End If + End If + End Using + End Select + End Sub + Private Sub TXT_PATH_NEW_ActionOnTextChanged(sender As Object, e As EventArgs) Handles TXT_PATH_NEW.ActionOnTextChanged + If Not MyDefs.Initializing Then + Dim f As SFile = TXT_PATH_NEW.Text.CSFileP + If Not f.IsEmptyString Then + User.UserNew.SpecialPath = f + User.UserNew.UpdateUserFile() + User.Changed = Not User.UserNew.File.CutPath.PathWithSeparator = UserNewPathDef + End If + End If + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Base/UserDataBase.vb b/SCrawler/API/Base/UserDataBase.vb index ee823b4..154f7e8 100644 --- a/SCrawler/API/Base/UserDataBase.vb +++ b/SCrawler/API/Base/UserDataBase.vb @@ -950,7 +950,10 @@ BlockNullPicture: LogError(ex, "user information loading error") End Try End Sub - Friend Overridable Sub UpdateUserInformation() Implements IUserData.UpdateUserInformation + Friend Overridable Overloads Sub UpdateUserInformation() Implements IUserData.UpdateUserInformation + UpdateUserInformation(False) + End Sub + Friend Overridable Overloads Sub UpdateUserInformation(ByVal DisableUserInfoUpdate As Boolean) Try UpdateDataFiles() MyFileSettings.Exists(SFO.Path) @@ -1001,7 +1004,7 @@ BlockNullPicture: x.Save(MyFileSettings) End Using - If Not IsSavedPosts Then Settings.UpdateUsersList(User, True) + If Not IsSavedPosts And Not DisableUserInfoUpdate Then Settings.UpdateUsersList(User, True) Catch ex As Exception LogError(ex, "user information saving error") End Try @@ -1934,7 +1937,18 @@ BlockNullPicture: Return 0 End If End Function - Friend Overridable Function MoveFiles(ByVal __CollectionName As String, ByVal __SpecialCollectionPath As SFile) As Boolean Implements IUserData.MoveFiles + Friend Function SplitCollectionGetNewUserInfo() As SplitCollectionUserInfo + Dim u As New SplitCollectionUserInfo With {.UserOrig = User, .UserNew = User} + With u.UserNew + .CollectionName = String.Empty + .SpecialCollectionPath = Nothing + .UserModel = UsageModel.Default + .CollectionModel = UsageModel.Default + .UpdateUserFile() + End With + Return u + End Function + Friend Overridable Function MoveFiles(ByVal __CollectionName As String, ByVal __SpecialCollectionPath As SFile, Optional ByVal NewUser As SplitCollectionUserInfo? = Nothing) As Boolean Implements IUserData.MoveFiles Dim UserBefore As UserInfo = User Dim Removed As Boolean = True Dim _TurnBack As Boolean = False @@ -1950,6 +1964,7 @@ BlockNullPicture: User.SpecialCollectionPath = String.Empty User.UserModel = UsageModel.Default User.CollectionModel = UsageModel.Default + If NewUser.HasValue Then User.SpecialPath = NewUser.Value.UserNew.SpecialPath Else Settings.Users.Remove(Me) Removed = True diff --git a/SCrawler/API/Facebook/SiteSettings.vb b/SCrawler/API/Facebook/SiteSettings.vb index 0439de1..f246609 100644 --- a/SCrawler/API/Facebook/SiteSettings.vb +++ b/SCrawler/API/Facebook/SiteSettings.vb @@ -11,6 +11,7 @@ Imports SCrawler.Plugin Imports SCrawler.Plugin.Attributes Imports PersonalUtilities.Tools.Web.Clients Imports PersonalUtilities.Functions.RegularExpressions +Imports DN = SCrawler.API.Base.DeclaredNames Namespace API.Facebook Friend Class SiteSettings : Inherits ThreadsNet.SiteSettings @@ -31,11 +32,11 @@ Namespace API.Facebook End Property #End Region #Region "Defaults" - + Friend ReadOnly Property ParsePhotoBlock As PropertyValue - + Friend ReadOnly Property ParseVideoBlock As PropertyValue - + Friend ReadOnly Property ParseStoriesBlock As PropertyValue #End Region #End Region diff --git a/SCrawler/API/Instagram/SiteSettings.vb b/SCrawler/API/Instagram/SiteSettings.vb index eb02e4b..ac8fa19 100644 --- a/SCrawler/API/Instagram/SiteSettings.vb +++ b/SCrawler/API/Instagram/SiteSettings.vb @@ -14,6 +14,7 @@ Imports PersonalUtilities.Functions.RegularExpressions Imports PersonalUtilities.Tools.Web.Clients Imports PersonalUtilities.Tools.Web.Cookies Imports Download = SCrawler.Plugin.ISiteSettings.Download +Imports DN = SCrawler.API.Base.DeclaredNames Namespace API.Instagram Friend Class SiteSettings : Inherits SiteSettingsBase @@ -54,6 +55,9 @@ Namespace API.Instagram End Function End Class #End Region +#Region "Categories" + Private Const CAT_DOWN As String = "Download data" +#End Region #Region "Authorization properties" Friend Const Header_IG_APP_ID As String = "x-ig-app-id" Friend Const Header_IG_WWW_CLAIM As String = "x-ig-www-claim" @@ -143,10 +147,19 @@ Namespace API.Instagram Friend ReadOnly Property USE_GQL As PropertyValue #End Region #Region "Download properties" + + Private ReadOnly Property DownDetectorValue As PropertyValue + + Private ReadOnly Property DownDetectorValueProvider As IFormatProvider + + Private ReadOnly Property DownDetectorValueAddToLog As PropertyValue Friend Const TimersUrgentTip As String = vbCr & "It is highly recommended not to change the default value." Friend ReadOnly Property RequestsWaitTimer_Any As PropertyValue @@ -154,33 +167,33 @@ Namespace API.Instagram + AllowNull:=False, Category:=DN.CAT_Timers), PXML, ControlNumber(20), PClonable> Friend ReadOnly Property RequestsWaitTimer As PropertyValue Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider + AllowNull:=False, LeftOffset:=120, Category:=DN.CAT_Timers), PXML, ControlNumber(21), PClonable> Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider + AllowNull:=False, Category:=DN.CAT_Timers), PXML, ControlNumber(22), PClonable> Friend ReadOnly Property SleepTimerOnPostsLimit As PropertyValue Private ReadOnly Property SleepTimerOnPostsLimitProvider As IFormatProvider - + Friend ReadOnly Property GetTimeline As PropertyValue - + Friend ReadOnly Property GetReels As PropertyValue - + Friend ReadOnly Property GetStories As PropertyValue - + Friend ReadOnly Property GetStoriesUser As PropertyValue - + Friend ReadOnly Property GetTagged As PropertyValue + Friend ReadOnly Property DownloadTimeline As PropertyValue Private ReadOnly Property DownloadTimeline_Def As PropertyValue - + Friend ReadOnly Property DownloadReels As PropertyValue Private ReadOnly Property DownloadReels_Def As PropertyValue - + Friend ReadOnly Property DownloadStories As PropertyValue Private ReadOnly Property DownloadStories_Def As PropertyValue - + Friend ReadOnly Property DownloadStoriesUser As PropertyValue Private ReadOnly Property DownloadStoriesUser_Def As PropertyValue - + Friend ReadOnly Property DownloadTagged As PropertyValue Private ReadOnly Property DownloadTagged_Def As PropertyValue #End Region @@ -352,8 +365,11 @@ Namespace API.Instagram platform = .Value(Header_Platform_Verion) End If '.Add(Header_IG_WWW_CLAIM, 0) + .Add("Origin", "https://www.instagram.com") + .Add("authority", "www.instagram.com") .Add("Dnt", 1) - .Add("Dpr", 1) + '.Add("Dpr", 1) + .Remove("Dpr") .Add("Sec-Ch-Ua-Mobile", "?0") .Add("Sec-Ch-Ua-Model", """""") .Add("Sec-Ch-Ua-Platform", """Windows""") @@ -396,6 +412,9 @@ Namespace API.Instagram DownloadTagged = New PropertyValue(False) DownloadTagged_Def = New PropertyValue(DownloadTagged.Value, GetType(Boolean)) + DownDetectorValue = New PropertyValue(20) + DownDetectorValueProvider = New TimersChecker(-1) + DownDetectorValueAddToLog = New PropertyValue(False) RequestsWaitTimer_Any = New PropertyValue(1000) RequestsWaitTimer_AnyProvider = New TimersChecker(0) RequestsWaitTimer = New PropertyValue(1000) @@ -413,7 +432,7 @@ Namespace API.Instagram TaggedNotifyLimit = New PropertyValue(200) TaggedNotifyLimitProvider = New TaggedNotifyLimitChecker - DownloadingErrorDate = New PropertyValue(Now.AddYears(10), GetType(Date)) + DownloadingErrorDate = New PropertyValue(Now.AddYears(-10), GetType(Date)) LastDownloadDate = New PropertyValue(Now.AddDays(-1)) LastRequestsCount = New PropertyValue(0) LastRequestsCountLabel = New PropertyValue(String.Empty, GetType(String)) @@ -456,16 +475,85 @@ Namespace API.Instagram End Function #End Region #Region "Downloading" + Private ____DownloadStarted As Boolean = False + Private ____AvailableRequested As Boolean = False + Private ____AvailableSilent As Boolean = True + Private ____AvailableChecked As Boolean = False + Private ____AvailableResult As Boolean = False + Friend Overrides Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean + If MyBase.Available(What, Silent) Then + If CInt(DownDetectorValue.Value) >= 0 Then + If ____DownloadStarted Then + ____AvailableRequested = True + ____AvailableSilent = Silent + Return True + Else + Return AvailableImpl(What, Silent) + End If + Else + Return True + End If + Else + Return False + End If + End Function +#Disable Warning IDE0060 + Private Function AvailableImpl(ByVal What As Download, ByVal Silent As Boolean) As Boolean +#Enable Warning + Try + AvailableText = String.Empty + If CInt(DownDetectorValue.Value) = -1 Then + Return True + Else + Dim dl As List(Of DownDetector.Data) = DownDetector.GetData("instagram") + If dl.ListExists Then + dl = dl.Take(4).ToList + Dim avg% = dl.Average(Function(d) d.Value) + If avg > CInt(DownDetectorValue.Value) Then + AvailableText = "Over the past hour, Instagram has received an average of " & + avg.NumToString(New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral}) & " outage reports:" & vbCr & + dl.ListToString(vbCr) + If CBool(DownDetectorValueAddToLog.Value) Then MyMainLOG = AvailableText + If Silent Then + Return False + Else + Return MsgBoxE({$"{AvailableText}{vbCr}{vbCr}Do you want to continue parsing Instagram data?", + "There are outage reports on Instagram"}, vbYesNo) = vbYes + End If + End If + End If + Return True + End If + Catch ex As Exception + Return ErrorsDescriber.Execute(EDP.SendToLog + EDP.ReturnValue, ex, "[API.Instagram.SiteSettings.Available]", True) + End Try + End Function Friend Property SkipUntilNextSession As Boolean = False Friend Overrides Function ReadyToDownload(ByVal What As Download) As Boolean - Return ActiveJobs < 2 AndAlso Not SkipUntilNextSession AndAlso ReadyForDownload AndAlso BaseAuthExists() AndAlso DownloadTimeline.Value + If ActiveJobs < 2 AndAlso Not SkipUntilNextSession AndAlso ReadyForDownload AndAlso BaseAuthExists() AndAlso CBool(DownloadTimeline.Value) Then + If ____DownloadStarted And ____AvailableRequested Then + ____AvailableResult = AvailableImpl(What, ____AvailableSilent) + ____AvailableChecked = True + ____AvailableRequested = False + Return ____AvailableResult + ElseIf ____AvailableChecked Then + Return ____AvailableResult + Else + Return True + End If + Else + Return False + End If End Function Private ActiveJobs As Integer = 0 Private ActiveSessionDate As Date + Private ActiveSessionRequestsExists As Boolean = False Private _NextWNM As UserData.WNM = UserData.WNM.Notify Private _NextTagged As Boolean = True Friend Overrides Sub DownloadStarted(ByVal What As Download) + If ActiveJobs = 0 Then ActiveSessionRequestsExists = False ActiveJobs += 1 + If What = Download.Main Then ____DownloadStarted = True If ActiveJobs = 1 Then ActiveSessionDate = Now If Not HH_IG_WWW_CLAIM_IS_ZERO AndAlso ( @@ -498,6 +586,7 @@ Namespace API.Instagram If _NextWNM = UserData.WNM.SkipTemp Or _NextWNM = UserData.WNM.SkipCurrent Then _NextWNM = UserData.WNM.Notify _NextTagged = .TaggedCheckSession MyLastRequestsCount = .RequestsCountSession + If .RequestsCountSession > 0 Then ActiveSessionRequestsExists = True _FieldsChangerSuspended = True HH_IG_WWW_CLAIM.Value = Responser.Headers.Value(Header_IG_WWW_CLAIM) HH_CSRF_TOKEN.Value = Responser.Headers.Value(Header_CSRF_TOKEN) @@ -507,9 +596,16 @@ Namespace API.Instagram Friend Overrides Sub DownloadDone(ByVal What As Download) _NextWNM = UserData.WNM.Notify _NextTagged = True - RefreshMyLastRequests(Now) + If ActiveSessionRequestsExists Then RefreshMyLastRequests(Now) ActiveJobs -= 1 SkipUntilNextSession = False + If What = Download.Main Then ____DownloadStarted = False + If ActiveJobs = 0 Then + ____AvailableRequested = False + ____AvailableChecked = False + ____AvailableSilent = True + ____AvailableResult = False + End If End Sub #End Region #Region "Settings" diff --git a/SCrawler/API/Instagram/UserData.vb b/SCrawler/API/Instagram/UserData.vb index a71b593..b00fa96 100644 --- a/SCrawler/API/Instagram/UserData.vb +++ b/SCrawler/API/Instagram/UserData.vb @@ -862,15 +862,20 @@ NextPageBlock: Protected DefaultParser_IgnorePass As Boolean = False Private ReadOnly DefaultParser_PostUrlCreator_Default As Func(Of PostKV, String) = Function(post) $"https://www.instagram.com/p/{post.Code}/" Protected DefaultParser_PostUrlCreator As Func(Of PostKV, String) = Function(post) $"https://www.instagram.com/p/{post.Code}/" + Protected DefaultParser_Pinned As Func(Of IEnumerable(Of EContainer), Integer, Boolean) = Nothing + Protected DefaultParser_SkipPost As Func(Of IEnumerable(Of EContainer), Integer, PostKV, Boolean) = Nothing Protected Function DefaultParser(ByVal Items As IEnumerable(Of EContainer), ByVal Section As Sections, ByVal Token As CancellationToken, Optional ByVal SpecFolder As String = Nothing, Optional ByVal State As UStates = UStates.Unknown, Optional ByVal Attempts As Integer = 0) As Boolean ThrowAny(Token) - If Items.Count > 0 Then + If Items.ListExists Then Dim PostIDKV As PostKV Dim Pinned As Boolean Dim PostDate$, PostOriginUrl$ - Dim before% + Dim i%, before% + Dim usePinFunc As Boolean = Not DefaultParser_Pinned Is Nothing + Dim skipPostFuncExists As Boolean = Not DefaultParser_SkipPost Is Nothing + Dim nn As EContainer If SpecFolder.IsEmptyString Then Select Case Section Case Sections.Tagged : SpecFolder = TaggedFolder @@ -879,14 +884,21 @@ NextPageBlock: End Select End If ProgressPre.ChangeMax(Items.Count) - For Each nn In Items + For i = 0 To Items.Count - 1 + nn = Items(i) ProgressPre.Perform() With If(Not DefaultParser_ElemNode Is Nothing, nn.ItemF(DefaultParser_ElemNode), nn) If .ListExists Then PostIDKV = New PostKV(.Value("code"), .Value("id"), Section) PostOriginUrl = DefaultParser_PostUrlCreator(PostIDKV) - Pinned = .Contains("timeline_pinned_user_ids") - If Not DefaultParser_IgnorePass AndAlso PostKvExists(PostIDKV) Then + 'Pinned = .Contains("timeline_pinned_user_ids") + If usePinFunc Then + Pinned = DefaultParser_Pinned.Invoke(Items, i) + Else + Pinned = If(.Item("timeline_pinned_user_ids")?.Count, 0) > 0 + End If + If skipPostFuncExists AndAlso DefaultParser_SkipPost.Invoke(Items, i, PostIDKV) Then + ElseIf Not DefaultParser_IgnorePass AndAlso PostKvExists(PostIDKV) Then If Not Section = Sections.Timeline OrElse Not Pinned Then Return False Else _TempPostsList.Add(PostIDKV.ID) diff --git a/SCrawler/API/Mastodon/EditorExchangeOptions.vb b/SCrawler/API/Mastodon/EditorExchangeOptions.vb index 6e1576f..a218601 100644 --- a/SCrawler/API/Mastodon/EditorExchangeOptions.vb +++ b/SCrawler/API/Mastodon/EditorExchangeOptions.vb @@ -14,6 +14,7 @@ Namespace API.Mastodon Friend Overrides Property DownloadModelProfile As Boolean Friend Overrides Property DownloadModelSearch As Boolean Friend Overrides Property DownloadModelForceApply As Boolean + Friend Overrides Property DownloadModelLikes As Boolean Friend Sub New(ByVal s As SiteSettings) MyBase.New(s) End Sub diff --git a/SCrawler/API/Mastodon/SiteSettings.vb b/SCrawler/API/Mastodon/SiteSettings.vb index 5b86e6e..76dbafd 100644 --- a/SCrawler/API/Mastodon/SiteSettings.vb +++ b/SCrawler/API/Mastodon/SiteSettings.vb @@ -63,15 +63,15 @@ Namespace API.Mastodon End Sub #End Region #Region "Other properties" - + Friend ReadOnly Property GifsDownload As PropertyValue - + Friend ReadOnly Property GifsSpecialFolder As PropertyValue - + Friend ReadOnly Property GifsPrefix As PropertyValue Private ReadOnly Property GifStringChecker As IFormatProvider - + Friend ReadOnly Property UseMD5Comparison As PropertyValue diff --git a/SCrawler/API/OnlyFans/SiteSettings.vb b/SCrawler/API/OnlyFans/SiteSettings.vb index 59f7991..0922b9c 100644 --- a/SCrawler/API/OnlyFans/SiteSettings.vb +++ b/SCrawler/API/OnlyFans/SiteSettings.vb @@ -13,18 +13,22 @@ Imports PersonalUtilities.Forms Imports PersonalUtilities.Tools.Web.Clients Imports PersonalUtilities.Tools.Web.Cookies Imports PersonalUtilities.Functions.RegularExpressions +Imports DN = SCrawler.API.Base.DeclaredNames Namespace API.OnlyFans Friend Class SiteSettings : Inherits SiteSettingsBase #Region "Declarations" +#Region "Categories" + Private Const CAT_OFS As String = "OF-Scraper support" +#End Region #Region "Options" - + Friend ReadOnly Property DownloadTimeline As PropertyValue - + Friend ReadOnly Property DownloadStories As PropertyValue - + Friend ReadOnly Property DownloadHighlights As PropertyValue - + Friend ReadOnly Property DownloadChatMedia As PropertyValue #End Region #Region "Headers" @@ -32,16 +36,16 @@ Namespace API.OnlyFans Private Const HeaderUserID As String = "User-Id" Friend Const HeaderXBC As String = "X-Bc" Friend Const HeaderAppToken As String = "App-Token" - + Friend ReadOnly Property HH_USER_ID As PropertyValue - + Private ReadOnly Property HH_X_BC As PropertyValue - + Private ReadOnly Property HH_APP_TOKEN As PropertyValue + InheritanceName:=SettingsCLS.HEADER_DEF_sec_ch_ua, IsAuth:=True), PClonable, PXML(OnlyForChecked:=True)> Private ReadOnly Property HH_BROWSER As PropertyValue - + Friend ReadOnly Property UserAgent As PropertyValue Private Sub UpdateHeader(ByVal PropertyName As String, ByVal Value As String) Dim hName$ = String.Empty @@ -82,20 +86,21 @@ Namespace API.OnlyFans End Property + "Change this value only if you know what you are doing.", IsAuth:=True), PXML, PClonable> Friend ReadOnly Property UseOldAuthRules As PropertyValue - + Friend ReadOnly Property DynamicRulesUpdateInterval As PropertyValue Private ReadOnly Property DynamicRulesUpdateIntervalProvider As IFormatProvider + "Change this value only if you know what you are doing.", IsAuth:=True), PXML, PClonable> Friend ReadOnly Property DynamicRules As PropertyValue #End Region #Region "OFScraper" Private ReadOnly Property OFScraperPath_XML As PropertyValue - + Friend ReadOnly Property OFScraperPath As PropertyValue Get If Not DefaultInstance Is Nothing Then @@ -106,7 +111,7 @@ Namespace API.OnlyFans End Get End Property Private ReadOnly Property OFScraperMP4decrypt_XML As PropertyValue - + Friend ReadOnly Property OFScraperMP4decrypt As PropertyValue Get If Not DefaultInstance Is Nothing Then @@ -118,7 +123,7 @@ Namespace API.OnlyFans End Property Friend Const KeyModeDefault_Default As String = "cdrm" Private ReadOnly Property KeyModeDefault_XML As PropertyValue - + Friend ReadOnly Property KeyModeDefault As PropertyValue Get If Not DefaultInstance Is Nothing Then @@ -134,6 +139,8 @@ Namespace API.OnlyFans Friend Sub New(ByVal AccName As String, ByVal Temp As Boolean) MyBase.New("OnlyFans", ".onlyfans.com", AccName, Temp, My.Resources.SiteResources.OnlyFansIcon_32, My.Resources.SiteResources.OnlyFansPic_32) + _AllowUserAgentUpdate = False + With Responser .Accept = "application/json, text/plain, */*" .AutomaticDecompression = Net.DecompressionMethods.GZip diff --git a/SCrawler/API/Reddit/M3U8.vb b/SCrawler/API/Reddit/M3U8.vb index c064beb..4fbd52e 100644 --- a/SCrawler/API/Reddit/M3U8.vb +++ b/SCrawler/API/Reddit/M3U8.vb @@ -8,6 +8,7 @@ ' but WITHOUT ANY WARRANTY Imports System.Net Imports System.Threading +Imports SCrawler.API.Base Imports SCrawler.API.Reddit.M3U8_Declarations Imports PersonalUtilities.Tools Imports PersonalUtilities.Tools.Web @@ -61,15 +62,18 @@ Namespace API.Reddit Private ReadOnly ProgressExists As Boolean Private ReadOnly Property ProgressPre As PreProgress Private ReadOnly UsePreProgress As Boolean + Private ReadOnly Media As UserMedia #End Region - Private Sub New(ByVal URL As String, ByVal OutFile As SFile, ByVal Progress As MyProgress, ByVal UsePreProgress As Boolean) + Private Sub New(ByVal URL As String, ByVal Media As UserMedia, ByVal OutFile As SFile, ByVal Progress As MyProgress, ByVal UsePreProgress As Boolean) PlayListURL = URL + Me.Media = Media BaseURL = RegexReplace(URL, BaseUrlPattern) Video = New List(Of String) Audio = New List(Of String) Me.OutFile = OutFile Me.OutFile.Name = "PlayListFile" Me.OutFile.Extension = "mp4" + If Media.Post.Date.HasValue Then Me.OutFile.Name = Media.Post.Date.Value.ToString("yyyyMMdd_HHmmss") Me.Progress = Progress ProgressExists = Not Me.Progress Is Nothing ProgressPre = New PreProgress(Progress) @@ -202,9 +206,9 @@ Namespace API.Reddit End Function #End Region #Region "Statics" - Friend Shared Function Download(ByVal URL As String, ByVal f As SFile, ByVal Token As CancellationToken, + Friend Shared Function Download(ByVal URL As String, ByVal Media As UserMedia, ByVal f As SFile, ByVal Token As CancellationToken, ByVal Progress As MyProgress, ByVal UsePreProgress As Boolean) As SFile - Using m As New M3U8(URL, f, Progress, UsePreProgress) : Return m.Download(Token) : End Using + Using m As New M3U8(URL, Media, f, Progress, UsePreProgress) : Return m.Download(Token) : End Using End Function #End Region #Region "IDisposable Support" diff --git a/SCrawler/API/Reddit/SiteSettings.vb b/SCrawler/API/Reddit/SiteSettings.vb index fff9d0c..56c6bcf 100644 --- a/SCrawler/API/Reddit/SiteSettings.vb +++ b/SCrawler/API/Reddit/SiteSettings.vb @@ -58,7 +58,6 @@ Namespace API.Reddit Return {AuthUserName.Value, AuthPassword.Value, ApiClientID.Value, ApiClientSecret.Value}.All(Function(v$) Not v.IsEmptyString) End Get End Property - #End Region #Region "Other" diff --git a/SCrawler/API/Reddit/UserData.vb b/SCrawler/API/Reddit/UserData.vb index a6ac46a..254d83a 100644 --- a/SCrawler/API/Reddit/UserData.vb +++ b/SCrawler/API/Reddit/UserData.vb @@ -225,6 +225,7 @@ Namespace API.Reddit #End Region #Region "Download Overrides" Friend Overrides Sub DownloadData(ByVal Token As CancellationToken) + Err429Count = 0 _CrossPosts.Clear() If CreatedByChannel And Settings.FromChannelDownloadTopUse And Settings.FromChannelDownloadTop > 0 Then _ DownloadTopCount = Settings.FromChannelDownloadTop.Value @@ -287,6 +288,7 @@ Namespace API.Reddit End Sub #End Region #Region "Download Functions (User, Channel)" + Private Err429Count As Integer = 0 Private _TotalPostsDownloaded As Integer = 0 Private ReadOnly _CrossPosts As List(Of String) Private Const SiteGfycatKey As String = "gfycat" @@ -375,6 +377,7 @@ Namespace API.Reddit Loop While Not _completed End Sub Private Sub DownloadDataChannel(ByVal POST As String, ByVal Token As CancellationToken) + Const savedPostsSleepTimer% = 2000 Dim eObj% = 0 Dim round% = 0 Dim URL$ = String.Empty @@ -392,12 +395,14 @@ Namespace API.Reddit If IsSavedPosts Then URL = $"https://www.reddit.com/user/{TrueName}/saved.json?after={POST}" + If Not POST.IsEmptyString Then Thread.Sleep(savedPostsSleepTimer) Else URL = $"https://reddit.com/r/{TrueName}/{View}.json?allow_quarantined=true&allow_over18=1&include=identity&after={POST}&dist=25&sort={View}&t={Period}&layout=classic" End If ThrowAny(Token) Dim r$ = Responser.GetResponse(URL) + If IsSavedPosts Then Err429Count = 0 If Not r.IsEmptyString Then Using w As EContainer = JsonDocument.Parse(r).XmlIfNothing If w.Count > 0 Then @@ -458,8 +463,12 @@ Namespace API.Reddit End If _completed = True Catch ex As Exception - If ProcessException(ex, Token, $"channel data downloading error [{URL}]",, eObj) = HttpStatusCode.InternalServerError Then + Dim errValue% = ProcessException(ex, Token, $"{IIf(IsSavedPosts, "saved posts", "channel")} data downloading error [{URL}]",, eObj) + If errValue = HttpStatusCode.InternalServerError Then If round = 2 Then eObj = HttpStatusCode.InternalServerError + ElseIf errValue = 429 And round = 0 Then + Thread.Sleep(savedPostsSleepTimer) + round += 1 Else _completed = True End If @@ -975,7 +984,7 @@ Namespace API.Reddit Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID, .UserID = _UserID}} If t = UTypes.Picture Or t = UTypes.GIF Then m.File = CreateFileFromUrl(m.URL) Else m.File = Nothing If ReplacePreview And m.URL.Contains("preview") And Not t = UTypes.Picture Then m.URL = $"https://i.redd.it/{m.File.File}" - If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, DateTrueProvider(IsChannel), Nothing) Else m.Post.Date = Nothing + If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, DateTrueProvider(IsChannel Or IsSavedPosts), Nothing) Else m.Post.Date = Nothing Return m End Function Private Function TryFile(ByVal URL As String) As Boolean @@ -1027,7 +1036,7 @@ Namespace API.Reddit Return URL.Contains(SiteRedGifsKey) End Function Protected Overrides Function DownloadM3U8(ByVal URL As String, ByVal Media As UserMedia, ByVal DestinationFile As SFile, ByVal Token As CancellationToken) As SFile - Return M3U8.Download(URL, DestinationFile, Token, Progress, Not IsSingleObjectDownload) + Return M3U8.Download(URL, Media, DestinationFile, Token, Progress, Not IsSingleObjectDownload) End Function Protected Overrides Function ChangeFileNameByProvider(ByVal f As SFile, ByVal m As UserMedia) As SFile If Not IsChannel Or Not SaveToCache Then @@ -1057,8 +1066,11 @@ Namespace API.Reddit ElseIf .StatusCode = HttpStatusCode.InternalServerError Then '500 If Not IsNothing(EObj) AndAlso IsNumeric(EObj) AndAlso CInt(EObj) = HttpStatusCode.InternalServerError Then Return 1 Return HttpStatusCode.InternalServerError + ElseIf .StatusCode = 429 And IsSavedPosts And Err429Count = 0 Then + Err429Count += 1 + Return 429 ElseIf .StatusCode = 429 AndAlso - ((Not IsSavedPosts And CBool(MySiteSettings.UseTokenForTimelines.Value)) Or (IsSavedPosts And MySiteSettings.UseTokenForSavedPosts.Value)) AndAlso + ((Not IsSavedPosts And CBool(MySiteSettings.UseTokenForTimelines.Value)) Or (IsSavedPosts And CBool(MySiteSettings.UseTokenForSavedPosts.Value))) AndAlso Not MySiteSettings.CredentialsExists Then '429 MyMainLOG = $"{ToStringForLog()}: [{CInt(Responser.StatusCode)}] You should use OAuth authorization or disable " & IIf(IsSavedPosts, "token usage for downloading saved posts", "the use of token and cookies for downloading timelines") diff --git a/SCrawler/API/Redgifs/SiteSettings.vb b/SCrawler/API/Redgifs/SiteSettings.vb index 5f4fe7f..798f76b 100644 --- a/SCrawler/API/Redgifs/SiteSettings.vb +++ b/SCrawler/API/Redgifs/SiteSettings.vb @@ -18,9 +18,9 @@ Namespace API.RedGifs Friend Class SiteSettings : Inherits SiteSettingsBase #Region "Declarations" - + Friend ReadOnly Property Token As PropertyValue - + Private ReadOnly Property UserAgent As PropertyValue Friend ReadOnly Property TokenLastDateUpdated As PropertyValue Private Const TokenName As String = "authorization" @@ -107,7 +107,9 @@ Namespace API.RedGifs Friend Overrides Sub Update() If _SiteEditorFormOpened Then Dim NewToken$ = AConvert(Of String)(Token.Value, AModes.Var, String.Empty) - If Not _LastTokenValue = NewToken Then TokenLastDateUpdated.Value = Now + If Not _LastTokenValue = NewToken And Not NewToken.IsEmptyString Then TokenLastDateUpdated.Value = Now + If Responser.CookiesExists AndAlso MsgBoxE({"RedGifs doesn't require cookies! Do you still want to use cookies?", "RedGifs cookies"}, + vbExclamation,,, {"Use", "Don't use"}) = 1 Then Responser.Cookies.Clear() End If MyBase.Update() End Sub diff --git a/SCrawler/API/ThreadsNet/SiteSettings.vb b/SCrawler/API/ThreadsNet/SiteSettings.vb index acd7017..69dd25e 100644 --- a/SCrawler/API/ThreadsNet/SiteSettings.vb +++ b/SCrawler/API/ThreadsNet/SiteSettings.vb @@ -13,6 +13,7 @@ Imports PersonalUtilities.Tools.Web.Clients Imports PersonalUtilities.Tools.Web.Cookies Imports PersonalUtilities.Functions.RegularExpressions Imports IG = SCrawler.API.Instagram.SiteSettings +Imports DN = SCrawler.API.Base.DeclaredNames Namespace API.ThreadsNet Friend Class SiteSettings : Inherits SiteSettingsBase @@ -75,14 +76,14 @@ Namespace API.ThreadsNet #Region "Other properties" Friend ReadOnly Property RequestsWaitTimer_Any As PropertyValue Private ReadOnly Property RequestsWaitTimer_AnyProvider As IFormatProvider + "It becomes unchecked when the site returns an error.", Category:="Download"), PXML> Friend ReadOnly Property DownloadData_Impl As PropertyValue #End Region #End Region diff --git a/SCrawler/API/ThreadsNet/UserData.vb b/SCrawler/API/ThreadsNet/UserData.vb index 1009f97..e1a1eb4 100644 --- a/SCrawler/API/ThreadsNet/UserData.vb +++ b/SCrawler/API/ThreadsNet/UserData.vb @@ -17,6 +17,10 @@ Imports PersonalUtilities.Tools.Web.Clients.EventArguments Imports IGS = SCrawler.API.Instagram.SiteSettings Namespace API.ThreadsNet Friend Class UserData : Inherits Instagram.UserData +#Region "XML names" + Private Const Name_MaxLastDownDate As String = "MaxLastDownDate" + Private Const Name_FirstLoadingDone As String = "FirstLoadingDone" +#End Region #Region "Declarations" Private ReadOnly Property MySettings As SiteSettings Get @@ -29,9 +33,20 @@ Namespace API.ThreadsNet Return ValidateBaseTokens() And Not ID.IsEmptyString End Get End Property + Private Property MaxLastDownDate As Date? = Nothing + Private Property FirstLoadingDone As Boolean = False #End Region #Region "Loader" Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) + With Container + If Loading Then + MaxLastDownDate = AConvert(Of Date)(.Value(Name_MaxLastDownDate), DateTimeDefaultProvider, Nothing) + FirstLoadingDone = .Value(Name_FirstLoadingDone).FromXML(Of Boolean)(False) + Else + .Add(Name_MaxLastDownDate, AConvert(Of String)(MaxLastDownDate, DateTimeDefaultProvider, String.Empty)) + .Add(Name_FirstLoadingDone, FirstLoadingDone.BoolToInteger) + End If + End With End Sub #End Region #Region "Exchange" @@ -49,6 +64,7 @@ Namespace API.ThreadsNet DefaultParser_PostUrlCreator = Function(post) $"https://www.threads.net/@{NameTrue}/post/{post.Code}" _ResponserAutoUpdateCookies = True _ResponserAddResponseReceivedHandler = True + DefaultParser_Pinned = AddressOf IsPinnedPost End Sub #End Region #Region "Download functions" @@ -66,7 +82,27 @@ Namespace API.ThreadsNet Responser.Method = "POST" LoadSavePostsKV(True) ResetBaseTokens() + Dim setMaxPostDate As Action(Of List(Of UserMedia)) = + Sub(ByVal l As List(Of UserMedia)) + With (From c As UserMedia In l Where c.Post.Date.HasValue Select c.Post.Date.Value) + If .ListExists Then MaxLastDownDate = .Max : _ForceSaveUserInfo = True + End With + End Sub + If FirstLoadingDone Then + If Not MaxLastDownDate.HasValue And _ContentList.Count > 0 Then setMaxPostDate.Invoke(_ContentList) + Else + If _ContentList.Count > 0 Then + FirstLoadingDone = True + If Not MaxLastDownDate.HasValue Then setMaxPostDate.Invoke(_ContentList) + End If + End If + If FirstLoadingDone Then + DefaultParser_SkipPost = Nothing + Else + DefaultParser_SkipPost = AddressOf SkipPost + End If DownloadData(String.Empty, Token) + If _TempMediaList.Count > 0 Then FirstLoadingDone = True : setMaxPostDate.Invoke(_TempMediaList) Catch ex As Exception errorFound = True Throw ex @@ -78,6 +114,21 @@ Namespace API.ThreadsNet End Try End If End Sub + Private Function IsPinnedPost(ByVal Items As IEnumerable(Of EContainer), ByVal Index As Integer) As Boolean + Try + If MaxLastDownDate.HasValue Then + Dim d As Date? = AConvert(Of Date)(Items(Index).ItemF(DefaultParser_ElemNode_Default).Value("taken_at"), UnixDate32Provider, Nothing) + If d.HasValue Then Return d.Value < MaxLastDownDate.Value + End If + Return Not FirstLoadingDone + Catch ex As Exception + LogError(ex, "IsPinnedPost") + Return Not FirstLoadingDone + End Try + End Function + Private Function SkipPost(ByVal Items As IEnumerable(Of EContainer), ByVal Index As Integer, ByVal Post As PostKV) As Boolean + Return PostKvExists(Post) + End Function Protected Overrides Sub UpdateResponser() If Not Responser Is Nothing AndAlso Not Responser.Disposed Then RemoveHandler Responser.ResponseReceived, AddressOf Responser_ResponseReceived @@ -166,7 +217,6 @@ Namespace API.ThreadsNet With .Headers .Clear() .Add("dnt", 1) - .Add("drp", 1) .Add(HttpHeaderCollection.GetSpecialHeader(MyHeaderTypes.Authority, "www.threads.net")) .Add(HttpHeaderCollection.GetSpecialHeader(MyHeaderTypes.Origin, "https://www.threads.net")) .Add("Sec-Ch-Ua-Model", "") diff --git a/SCrawler/API/Twitter/Declarations.vb b/SCrawler/API/Twitter/Declarations.vb index ac2a3fa..46d4de1 100644 --- a/SCrawler/API/Twitter/Declarations.vb +++ b/SCrawler/API/Twitter/Declarations.vb @@ -15,6 +15,7 @@ Namespace API.Twitter Friend Const TwitterSiteKey As String = "AndyProgram_Twitter" Friend ReadOnly DateProvider As ADateTime = GetDateProvider() Friend ReadOnly VideoSizeRegEx As RParams = RParams.DMS("\d+x(\d+)", 1, EDP.ReturnValue) + Friend ReadOnly StatusRegEx As RParams = RParams.DM(".*?(twitter|x)\.com/\S+/status/\d+", 0, EDP.ReturnValue) Private Function GetDateProvider() As ADateTime Dim n As DateTimeFormatInfo = CultureInfo.GetCultureInfo("en-us").DateTimeFormat.Clone n.FullDateTimePattern = "ddd MMM dd HH:mm:ss +ffff yyyy" diff --git a/SCrawler/API/Twitter/EditorExchangeOptions.vb b/SCrawler/API/Twitter/EditorExchangeOptions.vb index 60f6a78..c6a9e1c 100644 --- a/SCrawler/API/Twitter/EditorExchangeOptions.vb +++ b/SCrawler/API/Twitter/EditorExchangeOptions.vb @@ -28,16 +28,20 @@ Namespace API.Twitter Friend Overridable Property MediaModelAllowNonUserTweets As Boolean = False + ToolTip:="Download the data using the 'https://x.com/UserName/media' command.", LeftOffset:=DefaultOffset)> Friend Overridable Property DownloadModelMedia As Boolean = False + ToolTip:="Download the data using the 'https://x.com/UserName' command.", LeftOffset:=DefaultOffset)> Friend Overridable Property DownloadModelProfile As Boolean = False + ToolTip:="Download the data using the 'https://x.com/search?q=from:UserName+include:nativeretweets' command.", LeftOffset:=DefaultOffset)> Friend Overridable Property DownloadModelSearch As Boolean = False + + Friend Overridable Property DownloadModelLikes As Boolean = False @@ -73,6 +77,7 @@ Namespace API.Twitter DownloadModelMedia = dm.Contains(DModels.Media) DownloadModelProfile = dm.Contains(DModels.Profile) DownloadModelSearch = dm.Contains(DModels.Search) + DownloadModelLikes = dm.Contains(DModels.Likes) End If End If MySettings = u.HOST.Source diff --git a/SCrawler/API/Twitter/SiteSettings.vb b/SCrawler/API/Twitter/SiteSettings.vb index c559af8..28f1a92 100644 --- a/SCrawler/API/Twitter/SiteSettings.vb +++ b/SCrawler/API/Twitter/SiteSettings.vb @@ -16,32 +16,37 @@ Namespace API.Twitter Friend Class SiteSettings : Inherits SiteSettingsBase #Region "Declarations" +#Region "Categories" + Private Const CAT_DOWN As String = "Downloading" +#End Region #Region "Other properties" + "Otherwise the appropriate download model will be selected right from the start.", Category:=DN.CAT_UserDefs), PXML, PClonable> Friend ReadOnly Property UseAppropriateModel As PropertyValue #Region "End points" - + Friend Property UseNewEndPointSearch As PropertyValue - + Friend Property UseNewEndPointProfiles As PropertyValue #End Region #Region "Limits" - + Friend Property AbortOnLimit As PropertyValue - + Friend Property DownloadAlreadyParsed As PropertyValue #End Region - + Friend ReadOnly Property MediaModelAllowNonUserTweets As PropertyValue - + Friend ReadOnly Property GifsDownload As PropertyValue - + Friend ReadOnly Property GifsSpecialFolder As PropertyValue - + Friend ReadOnly Property GifsPrefix As PropertyValue Private ReadOnly Property GifStringChecker As IFormatProvider @@ -63,17 +68,17 @@ Namespace API.Twitter Throw New NotImplementedException("[GetFormat] is not available in the context of [GifStringProvider]") End Function End Class - + Friend ReadOnly Property UseMD5Comparison As PropertyValue + ControlToolTip:=DN.ConcurrentDownloadsToolTip, AllowNull:=False, LeftOffset:=120, Category:=CAT_DOWN), PXML, TaskCounter, PClonable> Friend ReadOnly Property ConcurrentDownloads As PropertyValue Private ReadOnly Property MyConcurrentDownloadsProvider As IFormatProvider #End Region #End Region Friend Sub New(ByVal AccName As String, ByVal Temp As Boolean) - MyBase.New(TwitterSite, "twitter.com", AccName, Temp, My.Resources.SiteResources.TwitterIcon_32, My.Resources.SiteResources.TwitterIcon_32.ToBitmap) + MyBase.New(TwitterSite, "x.com", AccName, Temp, My.Resources.SiteResources.TwitterIcon_32, My.Resources.SiteResources.TwitterIcon_32.ToBitmap) LimitSkippedUsers = New List(Of UserDataBase) @@ -97,7 +102,7 @@ Namespace API.Twitter MyConcurrentDownloadsProvider = New ConcurrentDownloadsProvider UserRegex = RParams.DMS(String.Format(UserRegexDefaultPattern, "/(twitter|x).com/"), 2) - UrlPatternUser = "https://twitter.com/{0}" + UrlPatternUser = "https://x.com/{0}" ImageVideoContains = "twitter" CheckNetscapeCookiesOnEndInit = True UseNetscapeCookies = True @@ -106,7 +111,7 @@ Namespace API.Twitter Return New UserData End Function Friend Overrides Function GetUserPostUrl(ByVal User As UserDataBase, ByVal Media As UserMedia) As String - Return $"https://twitter.com/{User.Name}/status/{Media.Post.ID}" + Return $"https://x.com/{User.Name}/status/{Media.Post.ID}" End Function Friend Overrides Function BaseAuthExists() As Boolean Return Responser.CookiesExists diff --git a/SCrawler/API/Twitter/UserData.vb b/SCrawler/API/Twitter/UserData.vb index a439655..a732213 100644 --- a/SCrawler/API/Twitter/UserData.vb +++ b/SCrawler/API/Twitter/UserData.vb @@ -33,6 +33,7 @@ Namespace API.Twitter Media = 1 Profile = 2 Search = 5 + Likes = 10 End Enum Private FirstDownloadComplete As Boolean = False Friend Property DownloadModelForceApply As Boolean = False @@ -41,6 +42,7 @@ Namespace API.Twitter Friend Property GifsDownload As Boolean = True Friend Property GifsSpecialFolder As String = String.Empty Friend Property GifsPrefix As String = String.Empty + Private ReadOnly LikesPosts As List(Of String) Private ReadOnly _DataNames As List(Of String) Private ReadOnly Property MySettings As SiteSettings Get @@ -74,6 +76,7 @@ Namespace API.Twitter If .DownloadModelMedia Then DownloadModel += DownloadModels.Media If .DownloadModelProfile Then DownloadModel += DownloadModels.Profile If .DownloadModelSearch Then DownloadModel += DownloadModels.Search + If .DownloadModelLikes Then DownloadModel += DownloadModels.Likes End With End If End Sub @@ -81,6 +84,7 @@ Namespace API.Twitter #Region "Initializer, loader" Friend Sub New() _DataNames = New List(Of String) + LikesPosts = New List(Of String) End Sub Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) With Container @@ -142,21 +146,32 @@ Namespace API.Twitter } End Function Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) - If MySettings.LIMIT_ABORT Then - Throw New TwitterLimitException(Me) - Else - If IsSavedPosts Then - If _ContentList.Count > 0 Then _DataNames.ListAddList(_ContentList.Select(Function(c) c.Post.ID), LAP.ClearBeforeAdd, LAP.NotContainsOnly) - DownloadData_SavedPosts(Token) + Try + If MySettings.LIMIT_ABORT Then + Throw New TwitterLimitException(Me) Else - If _ContentList.Count > 0 Then _DataNames.ListAddList(_ContentList.Select(Function(c) c.File.File), LAP.ClearBeforeAdd, LAP.NotContainsOnly) - DownloadData_Timeline(Token) + If IsSavedPosts Then + If _ContentList.Count > 0 Then _DataNames.ListAddList(_ContentList.Select(Function(c) c.Post.ID), LAP.ClearBeforeAdd, LAP.NotContainsOnly) + DownloadData_SavedPosts(Token) + Else + LikesPosts.Clear() + If _ContentList.Count > 0 Then _DataNames.ListAddList(_ContentList.Select(Function(c) c.File.File), LAP.ClearBeforeAdd, LAP.NotContainsOnly) + DownloadData_Timeline(Token) + If LikesPosts.Count > 0 Then + _ReparseLikes = True + ReparseMissing(Token) + _ReparseLikes = False + End If + End If End If - End If + Finally + _ReparseLikes = False + End Try End Sub Private Sub DownloadData_Timeline(ByVal Token As CancellationToken) Dim URL$ = String.Empty Dim tCache As CacheKeeper = Nothing + Dim likesDetected As Boolean = False Try Const entry$ = "entry" Dim PostID$ = String.Empty @@ -199,6 +214,7 @@ Namespace API.Twitter If Not _TempPostsList.Contains(PostID) Then _TempPostsList.Add(PostID) + ElseIf dirIndx = 3 Then ElseIf isPins Then Return False Else @@ -211,9 +227,22 @@ Namespace API.Twitter If tmpUserId.IsEmptyString Then tmpUserId = nn.ItemF({"extended_entities", "media", 0, sourceIdPredicate}).XmlIfNothingValue. IfNullOrEmpty(nn.Value("user_id")).IfNullOrEmpty(nn.Value("user_id_str")).IfNullOrEmpty("/") - If Not ParseUserMediaOnly OrElse + If (Not ParseUserMediaOnly Or dirIndx = 3) OrElse (dirIndx = 0 AndAlso MediaModelAllowNonUserTweets) OrElse - (Not ID.IsEmptyString AndAlso tmpUserId = ID) Then ObtainMedia(nn, PostID, PostDate) + (Not ID.IsEmptyString AndAlso tmpUserId = ID) Then + If dirIndx = 3 Then + Dim lUrl$ = nn.ItemF({"content", "itemContent", "tweet_results", "result", "legacy", "entities", "media", 0}, "expanded_url").XmlIfNothingValue + If Not lUrl.IsEmptyString Then + lUrl = RegexReplace(lUrl, StatusRegEx) + If Not lUrl.IsEmptyString Then + If Not _TempPostsList.Contains(lUrl) Then _TempPostsList.Add(lUrl) Else Return False + LikesPosts.ListAddValue(lUrl, LNC) + End If + End If + Else + ObtainMedia(nn, PostID, PostDate) + End If + End If End If Return True End Function @@ -225,6 +254,8 @@ Namespace API.Twitter For Each dir As SFile In dirs dirIndx += 1 + If dirIndx = 3 Then likesDetected = True + ExistsDetected = False If Not dir.IsEmptyString Then @@ -287,17 +318,22 @@ Namespace API.Twitter End If End If Else - For pIndx = 0 To IIf(dirIndx < 2, 1, 0) + For pIndx = 0 To IIf(dirIndx < 2 Or dirIndx = 3, 1, 0) optionalNode = Nothing Select Case dirIndx - Case 0, 1 + Case 0, 1, 3 rootNode = j({"data", "user", "result", "timeline_v2", "timeline", "instructions"}) If rootNode.ListExists Then - p = If(pIndx = 0, pinNode, timelineNode) - isPins = pIndx = 0 + If dirIndx = 3 Then + p = entriesNode + isPins = False + Else + p = If(pIndx = 0, pinNode, timelineNode) + isPins = pIndx = 0 + End If optionalNode = rootNode - rootNode = rootNode.Find(p, False) - If rootNode.ListExists Then rootNode = rootNode.Find(entriesNode, False) + rootNode = rootNode.Find(p, dirIndx = 3) + If dirIndx <> 3 And rootNode.ListExists Then rootNode = rootNode.Find(entriesNode, dirIndx = 3) End If Case Else isPins = False @@ -369,12 +405,12 @@ Namespace API.Twitter ProcessException(ex, Token, $"data downloading error [{URL}]") Finally If Not tCache Is Nothing Then tCache.Dispose() - If _TempPostsList.Count > 0 Then _TempPostsList.Sort() + If _TempPostsList.Count > 0 And Not likesDetected Then _TempPostsList.Sort() End Try End Sub Private Sub DownloadData_SavedPosts(ByVal Token As CancellationToken) Try - Dim f As SFile = GetDataFromGalleryDL("https://twitter.com/i/bookmarks", Settings.Cache, True, Token) + Dim f As SFile = GetDataFromGalleryDL("https://x.com/i/bookmarks", Settings.Cache, True, Token) Dim files As List(Of SFile) = SFile.GetFiles(f, "*.txt") If files.ListExists Then ResetFileNameProvider(Math.Max(files.Count.ToString.Length, 3)) @@ -417,21 +453,24 @@ Namespace API.Twitter #End Region #Region "Obtain media" Private Sub ObtainMedia(ByVal e As EContainer, ByVal PostID As String, ByVal PostDate As String, Optional ByVal State As UStates = UStates.Unknown, - Optional ByVal Attempts As Integer = 0) + Optional ByVal Attempts As Integer = 0, Optional ByVal SpecialFolder As String = Nothing) Dim s As EContainer = e({"extended_entities", "media"}) If If(s?.Count, 0) = 0 Then s = e({"retweeted_status", "extended_entities", "media"}) If If(s?.Count, 0) = 0 Then s = e({"retweeted_status_result", "result", "legacy", "extended_entities", "media"}) If If(s?.Count, 0) > 0 Then Dim mUrl$ + Dim media As UserMedia For Each m As EContainer In s - If Not CheckVideoNode(m, PostID, PostDate, State) Then + If Not CheckVideoNode(m, PostID, PostDate, State, SpecialFolder) Then mUrl = m.Value("media_url").IfNullOrEmpty(m.Value("media_url_https")) If Not mUrl.IsEmptyString Then Dim dName$ = UrlFile(mUrl) If Not dName.IsEmptyString AndAlso Not _DataNames.Contains(dName) Then _DataNames.Add(dName) - _TempMediaList.ListAddValue(MediaFromData(mUrl, PostID, PostDate, GetPictureOption(m), State, UTypes.Picture, Attempts), LNC) + media = MediaFromData(mUrl, PostID, PostDate, GetPictureOption(m), State, UTypes.Picture, Attempts) + If Not SpecialFolder.IsEmptyString Then media.SpecialFolder = SpecialFolder + _TempMediaList.ListAddValue(media, LNC) End If End If End If @@ -439,15 +478,17 @@ Namespace API.Twitter End If End Sub Private Function CheckVideoNode(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String, - Optional ByVal State As UStates = UStates.Unknown) As Boolean + Optional ByVal State As UStates = UStates.Unknown, Optional ByVal SpecialFolder As String = Nothing) As Boolean Try - If CheckForGif(w, PostID, PostDate, State) Then Return True + If CheckForGif(w, PostID, PostDate, State, SpecialFolder) Then Return True Dim URL$ = GetVideoNodeURL(w) If Not URL.IsEmptyString Then Dim f$ = UrlFile(URL) If Not f.IsEmptyString AndAlso Not _DataNames.Contains(f) Then _DataNames.Add(f) - _TempMediaList.ListAddValue(MediaFromData(URL, PostID, PostDate,, State, UTypes.Video), LNC) + Dim m As UserMedia = MediaFromData(URL, PostID, PostDate,, State, UTypes.Video) + If Not SpecialFolder.IsEmptyString Then m.SpecialFolder = SpecialFolder + _TempMediaList.ListAddValue(m, LNC) End If Return True End If @@ -458,7 +499,7 @@ Namespace API.Twitter End Try End Function Private Function CheckForGif(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String, - Optional ByVal State As UStates = UStates.Unknown) As Boolean + Optional ByVal State As UStates = UStates.Unknown, Optional ByVal SpecialFolder As String = Nothing) As Boolean Try Dim gifUrl As Predicate(Of EContainer) = Function(e) Not e.Value("content_type").IsEmptyString AndAlso e.Value("content_type").Contains("mp4") AndAlso @@ -477,9 +518,13 @@ Namespace API.Twitter If Not ff.IsEmptyString Then If GifsDownload And Not _DataNames.Contains(ff) Then m = MediaFromData(url, PostID, PostDate,, State, UTypes.Video) + If Not SpecialFolder.IsEmptyString Then m.SpecialFolder = SpecialFolder f = m.File If Not f.IsEmptyString And Not GifsPrefix.IsEmptyString Then f.Name = $"{GifsPrefix}{f.Name}" : m.File = f - If Not GifsSpecialFolder.IsEmptyString Then m.SpecialFolder = $"{GifsSpecialFolder}*" + If Not GifsSpecialFolder.IsEmptyString Then + If Not m.SpecialFolder.IsEmptyString Then m.SpecialFolder &= "\" + m.SpecialFolder &= $"{GifsSpecialFolder}*" + End If _TempMediaList.ListAddValue(m, LNC) End If Return True @@ -621,11 +666,12 @@ Namespace API.Twitter .AutoClear = True, .AutoReset = True, .CommandPermanent = $"chcp {BatchExecutor.UnicodeEncoding}", - .FileExchanger = confCache + .FileExchanger = confCache, + .DebugMode = True } tgdl.FileExchanger.DeleteCacheOnDispose = False tgdl.FileExchanger.DeleteRootOnDispose = False - For i As Byte = 0 To 2 + For i As Byte = 0 To 3 dir = rootDir.NewPath dir.Exists(SFO.Path, True, EDP.ThrowException) outList.Add(dir) @@ -633,9 +679,10 @@ Namespace API.Twitter command = $"""{Settings.GalleryDLFile}"" --verbose --no-download --no-skip --config ""{conf}"" --write-pages " command &= GdlGetIdFilterString() Select Case i - Case 0 : command &= $"https://twitter.com/{Name}/media" : process = dm.Contains(DownloadModels.Media) - Case 1 : command &= $"https://twitter.com/{Name}" : process = dm.Contains(DownloadModels.Profile) - Case 2 : command &= $"-o search-endpoint=graphql https://twitter.com/search?q=from:{Name}+include:nativeretweets" : process = dm.Contains(DownloadModels.Search) + Case 0 : command &= $"https://x.com/{Name}/media" : process = dm.Contains(DownloadModels.Media) + Case 1 : command &= $"https://x.com/{Name}" : process = dm.Contains(DownloadModels.Profile) + Case 2 : command &= $"-o search-endpoint=graphql https://x.com/search?q=from:{Name}+include:nativeretweets" : process = dm.Contains(DownloadModels.Search) + Case 3 : command &= $"https://x.com/{Name}/likes" : process = dm.Contains(DownloadModels.Likes) Case Else : process = False End Select '#If DEBUG Then @@ -687,13 +734,14 @@ Namespace API.Twitter End Function #End Region #Region "ReparseMissing" + Private _ReparseLikes As Boolean = False Protected Overrides Sub ReparseMissing(ByVal Token As CancellationToken) - Const SinglePostPattern$ = "https://twitter.com/{0}/status/{1}" + Const SinglePostPattern$ = "https://x.com/{0}/status/{1}" Dim rList As New List(Of Integer) Dim URL$ = String.Empty Dim cache As CacheKeeper = Nothing Try - If ContentMissingExists Then + If ContentMissingExists Or (_ReparseLikes And LikesPosts.Count > 0) Then Dim m As UserMedia Dim PostDate$ Dim nodes As List(Of String()) = GetContainerSubnodes() @@ -702,22 +750,29 @@ Namespace API.Twitter Dim f As SFile Dim i%, ii% Dim files As List(Of SFile) + Dim lim% + Dim specFolder$ = IIf(_ReparseLikes, "Likes", String.Empty) ResetFileNameProvider() If IsSingleObjectDownload Then cache = Settings.Cache + ElseIf _ReparseLikes Then + cache = CreateCache() Else cache = New CacheKeeper(DownloadContentDefault_GetRootDir.CSFilePS) cache.CacheDeleteError = CacheDeletionError(cache) End If - ProgressPre.ChangeMax(_ContentList.Count) - For i = 0 To _ContentList.Count - 1 + If _ReparseLikes Then lim = LikesPosts.Count Else lim = _ContentList.Count + ProgressPre.ChangeMax(lim) + For i = 0 To lim - 1 ProgressPre.Perform() - If _ContentList(i).State = UStates.Missing Then - m = _ContentList(i) - If Not m.Post.ID.IsEmptyString Or (IsSingleObjectDownload And Not m.URL_BASE.IsEmptyString) Then + If _ReparseLikes OrElse _ContentList(i).State = UStates.Missing Then + m = If(_ReparseLikes, Nothing, _ContentList(i)) + If Not m.Post.ID.IsEmptyString Or (IsSingleObjectDownload And Not m.URL_BASE.IsEmptyString) Or _ReparseLikes Then ThrowAny(Token) If IsSingleObjectDownload Then URL = m.URL_BASE + ElseIf _ReparseLikes Then + URL = LikesPosts(i) Else URL = String.Format(SinglePostPattern, Name, m.Post.ID) End If @@ -737,7 +792,7 @@ Namespace API.Twitter If .ListExists Then PostDate = String.Empty If .Contains("created_at") Then PostDate = .Value("created_at") Else PostDate = String.Empty - ObtainMedia(.Self, m.Post.ID, PostDate, UStates.Missing, m.Attempts) + ObtainMedia(.Self, m.Post.ID, PostDate, UStates.Missing, m.Attempts, specFolder) rList.ListAddValue(i, LNC) End If End With @@ -759,7 +814,7 @@ Namespace API.Twitter ProcessException(ex, Token, $"ReparseMissing error [{URL}]") Finally If Not cache Is Nothing And Not IsSingleObjectDownload Then cache.Dispose() - If rList.Count > 0 Then + If rList.Count > 0 And Not _ReparseLikes Then For i% = rList.Count - 1 To 0 Step -1 : _ContentList.RemoveAt(rList(i)) : Next rList.Clear() End If @@ -856,7 +911,7 @@ Namespace API.Twitter #End Region #Region "IDisposable support" Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If Not disposedValue And disposing Then _DataNames.Clear() + If Not disposedValue And disposing Then _DataNames.Clear() : LikesPosts.Clear() MyBase.Dispose(disposing) End Sub #End Region diff --git a/SCrawler/API/UserDataBind.vb b/SCrawler/API/UserDataBind.vb index 2de6cd9..d8f4ef4 100644 --- a/SCrawler/API/UserDataBind.vb +++ b/SCrawler/API/UserDataBind.vb @@ -558,7 +558,7 @@ Namespace API End Sub #End Region #Region "Move, Merge" - Friend Overrides Function MoveFiles(ByVal __CollectionName As String, ByVal __SpecialCollectionPath As SFile) As Boolean + Friend Overrides Function MoveFiles(ByVal __CollectionName As String, ByVal __SpecialCollectionPath As SFile, Optional ByVal NewUser As SplitCollectionUserInfo? = Nothing) As Boolean Throw New NotImplementedException("Move files is not available in the collection context") End Function Friend Overloads Sub MergeData(ByVal Merging As Boolean) @@ -601,7 +601,19 @@ Namespace API "Operation canceled", MsgBoxStyle.Critical) Return False Else - _Item.MoveFiles(String.Empty, Nothing) + Dim uObj As SplitCollectionUserInfo? = DirectCast(_Item, UserDataBase).SplitCollectionGetNewUserInfo + If uObj.Value.SameDrive Then + uObj = Nothing + Else + Using f As New SplitCollectionUserInfoChangePathsForm({uObj}) + f.ShowDialog() + Select Case f.DialogResult + Case DialogResult.OK : If f.Users(0).Changed Then uObj = f.Users(0) Else uObj = Nothing + Case DialogResult.Abort : Return False + End Select + End Using + End If + _Item.MoveFiles(String.Empty, Nothing, uObj) MainFrameObj.ImageHandler(_Item) AddRemoveBttDeleteHandler(_Item, False) RaiseEvent OnUserRemoved(_Item) @@ -618,7 +630,7 @@ Namespace API End If Dim m As New MMessage($"Collection [{CollectionName} (number of profiles: {Count})] may contain data" & vbCr & "Are you sure you want to delete the collection and all of its files?", MsgTitle, - {New MsgBoxButton("Delete") With {.ToolTip = "Delete the collection and all files", .KeyCode = Keys.Enter}, + {New MsgBoxButton("Delete", "Delete the collection and all files") With {.KeyCode = Keys.Enter}, New MsgBoxButton("Split") With { .ToolTip = "Users will be removed from the collection and will be displayed in the program as separate users." & vbCr & "All user data will remain.", @@ -653,12 +665,31 @@ Namespace API MsgBoxE({$"Collection [{CollectionName}] data merged{vbCr}Unable to split merged collection{vbCr}Operation canceled", MsgTitle}, vbExclamation) Return 0 Else - Collections.ForEach(Sub(ByVal c As IUserData) - If c.MoveFiles(String.Empty, Nothing) Then - UserListLoader.UpdateUser(Settings.GetUser(c), True) - MainFrameObj.ImageHandler(c) - End If - End Sub) + Dim uu As New List(Of SplitCollectionUserInfo)(Collections.Select(Function(uuu As UserDataBase) uuu.SplitCollectionGetNewUserInfo)) + If uu.All(Function(uuu) uuu.SameDrive) Then + uu.Clear() + Else + Using colPaths As New SplitCollectionUserInfoChangePathsForm(uu) + colPaths.ShowDialog() + Select Case colPaths.DialogResult + Case DialogResult.OK + If colPaths.Users.Any(Function(uuu) uuu.Changed) Then + uu = New List(Of SplitCollectionUserInfo)(colPaths.Users) + Else + uu.Clear() + End If + Case DialogResult.Abort : Return 0 + End Select + End Using + End If + Collections.ListForEach(Sub(ByVal c As IUserData, ByVal indx As Integer) + Dim uObj As SplitCollectionUserInfo? = Nothing + If uu.Count > 0 AndAlso indx.ValueBetween(0, uu.Count - 1) AndAlso uu(indx).Changed Then uObj = uu(indx) + If c.MoveFiles(String.Empty, Nothing, uObj) Then + UserListLoader.UpdateUser(Settings.GetUser(c), True) + MainFrameObj.ImageHandler(c) + End If + End Sub) If Collections.All(Function(c) c.CollectionName.IsEmptyString) Then Settings.Users.Remove(Me) Collections.Clear() diff --git a/SCrawler/Download/Automation/AutoDownloader.vb b/SCrawler/Download/Automation/AutoDownloader.vb index fa4cbe4..32ee52f 100644 --- a/SCrawler/Download/Automation/AutoDownloader.vb +++ b/SCrawler/Download/Automation/AutoDownloader.vb @@ -21,6 +21,7 @@ Namespace DownloadObjects Specified = 3 Groups = 4 End Enum + Friend Const NoPauseMode As Integer = -100 Friend Enum PauseModes As Integer Disabled = -2 Enabled = -1 diff --git a/SCrawler/Download/Automation/AutoDownloaderEditorForm.Designer.vb b/SCrawler/Download/Automation/AutoDownloaderEditorForm.Designer.vb index aee5ea9..430c934 100644 --- a/SCrawler/Download/Automation/AutoDownloaderEditorForm.Designer.vb +++ b/SCrawler/Download/Automation/AutoDownloaderEditorForm.Designer.vb @@ -28,9 +28,10 @@ Namespace DownloadObjects Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(AutoDownloaderEditorForm)) Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim TP_NOTIFY As System.Windows.Forms.TableLayoutPanel Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim TP_NOTIFY As System.Windows.Forms.TableLayoutPanel Dim ActionButton4 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton5 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TT_MAIN As System.Windows.Forms.ToolTip Me.DEF_GROUP = New SCrawler.DownloadObjects.Groups.GroupDefaults() Me.OPT_SPEC = New System.Windows.Forms.RadioButton() @@ -178,9 +179,14 @@ Namespace DownloadObjects ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image) ActionButton1.Name = "Edit" ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image) - ActionButton2.Name = "Clear" + ActionButton2.Name = "Info" + ActionButton2.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Info + ActionButton2.ToolTipText = "Open group" + ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image) + ActionButton3.Name = "Clear" Me.TXT_GROUPS.Buttons.Add(ActionButton1) Me.TXT_GROUPS.Buttons.Add(ActionButton2) + Me.TXT_GROUPS.Buttons.Add(ActionButton3) Me.TXT_GROUPS.CaptionText = "Groups" Me.TXT_GROUPS.CaptionWidth = 50.0R Me.TXT_GROUPS.Dock = System.Windows.Forms.DockStyle.Fill @@ -260,9 +266,9 @@ Namespace DownloadObjects ' 'TXT_TIMER ' - ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image) - ActionButton3.Name = "Refresh" - Me.TXT_TIMER.Buttons.Add(ActionButton3) + ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image) + ActionButton4.Name = "Refresh" + Me.TXT_TIMER.Buttons.Add(ActionButton4) Me.TXT_TIMER.CaptionText = "Timer" Me.TXT_TIMER.CaptionToolTipEnabled = True Me.TXT_TIMER.CaptionToolTipText = "Timer (in minutes)" @@ -275,9 +281,9 @@ Namespace DownloadObjects ' 'NUM_DELAY ' - ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image) - ActionButton4.Name = "Refresh" - Me.NUM_DELAY.Buttons.Add(ActionButton4) + ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image) + ActionButton5.Name = "Refresh" + Me.NUM_DELAY.Buttons.Add(ActionButton5) Me.NUM_DELAY.CaptionText = "Delay" Me.NUM_DELAY.CaptionToolTipEnabled = True Me.NUM_DELAY.CaptionToolTipText = "Startup delay" diff --git a/SCrawler/Download/Automation/AutoDownloaderEditorForm.resx b/SCrawler/Download/Automation/AutoDownloaderEditorForm.resx index bdebe69..e2ab359 100644 --- a/SCrawler/Download/Automation/AutoDownloaderEditorForm.resx +++ b/SCrawler/Download/Automation/AutoDownloaderEditorForm.resx @@ -189,6 +189,18 @@ + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAFQSURBVFhH7ZfNDcIwFIMZoXcm + YBtGYRHECIgTR1ZhBsS9YoJgQ1Poi5sfqhIOWPqkqvV7dWlI0oVzriry5Dd5HSS0PFwasAEn0AJn4Dle + o6fpykaVHYDNwB7YG6ZgzWiQrABosAbqaXNh7bprN1AyAAp3b42msuva9ooGYIFpELA931D2FI+VxzAI + gTIdAEb+7KpBz+p4RclQyifoXwdKwgAwcMAl3/mEAOz9GJgokQGyR/sHr8CzlwFwgU+vCuagUQE4gSjz + HGxUAM5iyiyxUp4IJ5QEAYomHCvlidCiJAigjKNYKU8M6B/g9wJUH4TV/4ZFE5GV8kSQE1HRVGylPBHC + qbh0MbJSnhH0YtQFyFqOiZXyCOLLMQVDckNCrJRHEN+QeMGY3JJZKY8hb0vmxQLTYAplm1IvFNbblnuh + Qb0Pk3exGZjv06wW8uT3cIs7jQnSONrSxH0AAAAASUVORK5CYII= + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -203,22 +215,6 @@ Show a simple notification instead of a user notification. This means that if any user data has been downloaded with the plan, a simple notification will be shown with the number of users downloaded. The 'Image' and 'User icon' parameters will be ignored. - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 - JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE - QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb - ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb - +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv - qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN - v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA - prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ - qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY - HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 - qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG - VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - @@ -234,6 +230,22 @@ The 'Image' and 'User icon' parameters will be ignored. HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE + QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb + ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb + +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv + qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN + v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA + prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ + qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY + HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 + qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG + VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/SCrawler/Download/Automation/AutoDownloaderEditorForm.vb b/SCrawler/Download/Automation/AutoDownloaderEditorForm.vb index eaebf45..0a8390c 100644 --- a/SCrawler/Download/Automation/AutoDownloaderEditorForm.vb +++ b/SCrawler/Download/Automation/AutoDownloaderEditorForm.vb @@ -134,11 +134,26 @@ Namespace DownloadObjects Private Sub TXT_GROUPS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_GROUPS.ActionOnButtonClick Select Case Sender.DefaultButton Case ActionButton.DefaultButtons.Edit - Using f As New LabelsForm(MyGroups, (From g As DownloadGroup In Settings.Groups Where Not g.IsViewFilter Select g.Name)) With {.Text = "Groups", .Icon = My.Resources.GroupByIcon_16} + Using f As New LabelsForm(MyGroups, (From g As DownloadGroup In Settings.Groups Where Not g.IsViewFilter Select g.Name)) With { + .Text = "Groups (F3 to edit)", + .Icon = My.Resources.GroupByIcon_16, + .IsGroups = True + } f.ShowDialog() If f.DialogResult = DialogResult.OK Then MyGroups.ListAddList(f.LabelsList, LAP.ClearBeforeAdd) : TXT_GROUPS.Text = MyGroups.ListToString End Using Case ActionButton.DefaultButtons.Clear : MyGroups.Clear() + Case ActionButton.DefaultButtons.Info + Try + If MyGroups.Count > 0 Then + Dim i% = Settings.Groups.IndexOf(MyGroups(0)) + If i >= 0 Then + Using gf As New GroupEditorForm(Settings.Groups(i)) : gf.ShowDialog() : End Using + End If + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Show group") + End Try End Select End Sub Private Sub ChangeEnabled() Handles OPT_DISABLED.CheckedChanged, diff --git a/SCrawler/Download/Automation/SchedulerEditorForm.vb b/SCrawler/Download/Automation/SchedulerEditorForm.vb index 1bb045b..112514c 100644 --- a/SCrawler/Download/Automation/SchedulerEditorForm.vb +++ b/SCrawler/Download/Automation/SchedulerEditorForm.vb @@ -8,6 +8,8 @@ ' but WITHOUT ANY WARRANTY Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Toolbars +Imports PersonalUtilities.Forms.Controls.Base +Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Tools Imports ECI = PersonalUtilities.Forms.Toolbars.EditToolbar.ControlItem Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons @@ -235,6 +237,25 @@ Namespace DownloadObjects Private Function GetSchedulerFiles() As List(Of SFile) Return SFile.GetFiles(SettingsFolderName.CSFileP, $"{Scheduler.FileNameDefault}*.xml",, EDP.ReturnValue) End Function + Private Class SchedulerList : Inherits SimpleListForm(Of String) + Friend Sub New(ByVal Source As IEnumerable(Of String), Optional ByRef DesignXML As EContainer = Nothing) + MyBase.New(Source, DesignXML) + End Sub + Protected Overrides Sub MyForm_Load(sender As Object, e As EventArgs) + MyBase.MyForm_Load(sender, e) + CMB_DATA.Button(ADB.Add).ToolTipText = "Create a new scheduler" + CMB_DATA.Button(ADB.SaveAs).ToolTipText = "Clone an existing scheduler and save it as a new one" + CMB_DATA.Button(ADB.Delete).ToolTipText = "Delete the selected scheduler" + CMB_DATA.Buttons.UpdateButtonsPositions() + End Sub + Protected Overrides Sub CMB_DATA_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) + If e.DefaultButton = ADB.SaveAs Then + AddNewItem(e, e.Key, e.KeyEventArgs) + Else + MyBase.CMB_DATA_ActionOnButtonClick(Sender, e) + End If + End Sub + End Class Private Sub BTT_SETTINGS_Click(sender As Object, e As EventArgs) Handles BTT_SETTINGS.Click Const msgTitle$ = "Change scheduler" Try @@ -244,7 +265,7 @@ Namespace DownloadObjects If .ListExists Then .ForEach(Sub(ff) l.Add(ff, ff.Name.Replace(Scheduler.FileNameDefault, String.Empty).StringTrimStart("_").IfNullOrEmpty(defName))) End With If l.Count > 0 Then - Using chooser As New SimpleListForm(Of String)(l.Values.Cast(Of String), Settings.Design) With { + Using chooser As New SchedulerList(l.Values.Cast(Of String), Settings.Design) With { .DesignXMLNodeName = "SchedulerChooserForm", .Icon = ImageRenderer.GetIcon(My.Resources.ScriptPic_32, EDP.ReturnValue), .FormText = "Schedulers", @@ -256,17 +277,56 @@ Namespace DownloadObjects Dim f As SFile Dim selectedName$ Dim addedObj$ = String.Empty + Dim addedObjIsClone As Boolean = False + Dim createSchedulerPath As Func(Of String, SFile) = Function(n) $"{SettingsFolderName}\{Scheduler.FileNameDefault}_{n.StringRemoveWinForbiddenSymbols}.xml" .ClearButtons() - .Buttons = {ADB.Add, ADB.Delete} + .Buttons = {ADB.Add, ADB.SaveAs, ADB.Delete} AddHandler .AddClick, Sub(ByVal obj As Object, ByVal args As SimpleListFormEventArgs) If addedObj.IsEmptyString Then addedObj = InputBoxE("Enter a new scheduler name:", msgTitle) args.Result = Not addedObj.IsEmptyString - If args.Result Then args.Item = addedObj + If args.Result Then + If l.Values.Count > 0 AndAlso l.Values.ListIndexOf(Function(n) n.StringToLower = addedObj.StringToLower) >= 0 Then + args.Result = False + MsgBoxE({$"A scheduler named '{addedObj}' already exists", msgTitle}, vbCritical) + Else + args.Item = addedObj + addedObjIsClone = Not args.ButtonEventArgs Is Nothing AndAlso + TypeOf args.ButtonEventArgs Is ActionButtonEventArgs AndAlso + DirectCast(args.ButtonEventArgs, ActionButtonEventArgs).DefaultButton = ADB.SaveAs + If addedObjIsClone Then + Dim cloneF As SFile = createSchedulerPath.Invoke(addedObj) + If Not cloneF.Exists And Settings.Automation.File.Exists Then + Using x As New XmlFile(Settings.Automation.File, Protector.Modes.All, False) With {.AllowSameNames = True, .XmlReadOnly = True} + x.LoadData() + x.Save(cloneF, EDP.SendToLog) + End Using + End If + End If + End If + End If Else MsgBoxE({"You can only create one scheduler at a time", "Create a new scheduler"}, vbCritical) End If End Sub + AddHandler .DeleteClick, Sub(ByVal obj As Object, ByVal args As SimpleListFormEventArgs) + Dim n$ = AConvert(Of String)(args.Item, String.Empty) + If Not n.IsEmptyString Then + If MsgBoxE({$"Are you sure you want to delete the '{n}' scheduler?", msgTitle}, vbExclamation,,, + {"Process", "Cancel"}) = 0 Then + Dim delF As SFile = createSchedulerPath.Invoke(n) + If delF.Exists AndAlso delF.Delete Then + args.Result = True + If l.ContainsKey(delF) Then + l.Remove(delF) + Else + Dim delIndx% = l.ListIndexOf(Function(dd) dd.Value = n) + If delIndx >= 0 Then l.Remove(l.Keys(delIndx)) + End If + End If + End If + End If + End Sub If Settings.Automation.File.Name = Scheduler.FileNameDefault Then .DataSelectedIndexes.Add(0) Else @@ -279,7 +339,7 @@ Namespace DownloadObjects If selectedName = defName Then f = Settings.Automation.FileDefault Else - f = $"{SettingsFolderName}\{Scheduler.FileNameDefault}_{selectedName.StringRemoveWinForbiddenSymbols}.xml" + f = createSchedulerPath.Invoke(selectedName) End If If Not Settings.Automation.File = f AndAlso Settings.Automation.Reset(f, False) Then Settings.Automation.File = f diff --git a/SCrawler/Download/Groups/DownloadGroup.vb b/SCrawler/Download/Groups/DownloadGroup.vb index a3d711c..914f25e 100644 --- a/SCrawler/Download/Groups/DownloadGroup.vb +++ b/SCrawler/Download/Groups/DownloadGroup.vb @@ -20,6 +20,7 @@ Namespace DownloadObjects.Groups Private Const Name_FilterViewMode As String = "FilterViewMode" Private Const Name_FilterGroupUsers As String = "FilterGroupUsers" Private Const Name_FilterShowGroupsInsteadLabels As String = "FilterShowGroupsInsteadLabels" + Private Const Name_FilterShowAllUsers As String = "FilterShowAllUsers" #End Region #Region "Declarations" #Region "Controls" @@ -36,6 +37,7 @@ Namespace DownloadObjects.Groups Friend Property FilterViewMode As ViewModes = ViewModes.IconLarge Friend Property FilterGroupUsers As Boolean = True Friend Property FilterShowGroupsInsteadLabels As Boolean = True + Friend Property FilterShowAllUsers As Boolean = False #End Region Private File As SFile = Nothing Friend Overrides Property Name As String @@ -144,13 +146,15 @@ Namespace DownloadObjects.Groups FilterViewMode = e.Value(Name_FilterViewMode).FromXML(Of Integer)(ViewModes.IconLarge) FilterGroupUsers = e.Value(Name_FilterGroupUsers).FromXML(Of Boolean)(True) FilterShowGroupsInsteadLabels = e.Value(Name_FilterShowGroupsInsteadLabels).FromXML(Of Boolean)(True) + FilterShowAllUsers = e.Value(Name_FilterShowAllUsers).FromXML(Of Boolean)(False) End If End Sub Protected Overrides Function Export(ByVal e As EContainer) As EContainer MyBase.Export(e) e.AddRange({New EContainer(Name_FilterViewMode, CInt(FilterViewMode)), New EContainer(Name_FilterGroupUsers, FilterGroupUsers.BoolToInteger), - New EContainer(Name_FilterShowGroupsInsteadLabels, FilterShowGroupsInsteadLabels.BoolToInteger)}) + New EContainer(Name_FilterShowGroupsInsteadLabels, FilterShowGroupsInsteadLabels.BoolToInteger), + New EContainer(Name_FilterShowAllUsers, FilterShowAllUsers.BoolToInteger)}) Return e End Function #End Region @@ -166,6 +170,7 @@ Namespace DownloadObjects.Groups FilterViewMode = .FilterViewMode FilterGroupUsers = .FilterGroupUsers FilterShowGroupsInsteadLabels = .FilterShowGroupsInsteadLabels + FilterShowAllUsers = .FilterShowAllUsers End If End With End If diff --git a/SCrawler/Download/Groups/GroupListForm.vb b/SCrawler/Download/Groups/GroupListForm.vb index 23a5c70..bb5e32d 100644 --- a/SCrawler/Download/Groups/GroupListForm.vb +++ b/SCrawler/Download/Groups/GroupListForm.vb @@ -117,6 +117,8 @@ Namespace DownloadObjects.Groups RefillList() If Not IsViewFilter Then Settings.Groups.BeginUpdate() + If IsViewFilter And LIST_GROUPS.Items.Count > 0 Then .MyOkCancel.EnableOK = True : _LatestSelected = 0 + .DelegateClosingChecker = False .EndLoaderOperations() diff --git a/SCrawler/Editors/GlobalSettingsForm.vb b/SCrawler/Editors/GlobalSettingsForm.vb index 8369f70..2ca3930 100644 --- a/SCrawler/Editors/GlobalSettingsForm.vb +++ b/SCrawler/Editors/GlobalSettingsForm.vb @@ -19,6 +19,7 @@ Namespace Editors Friend Property HeadersChanged As Boolean = False Friend Property PictureChanged As Boolean = False Friend Property EnvironmentProgramsChanged As Boolean = False + Friend Property UserAgentChanged As Boolean = False Friend Sub New() InitializeComponent() MyDefs = New DefaultFormOptions(Me, Settings.Design) @@ -183,6 +184,7 @@ Namespace Editors "Do you really want to continue?", "Increasing download tasks"}, vbExclamation,,, {"Confirm", $"Set to default ({SettingsCLS.DefaultMaxDownloadingTasks})", "Cancel"}) + If CInt(TXT_MAX_JOBS_USERS.Value) > SettingsCLS.DefaultMaxDownloadingTasks Then Select Case a.Invoke("users", TXT_MAX_JOBS_USERS.Value) Case 1 : TXT_MAX_JOBS_USERS.Value = SettingsCLS.DefaultMaxDownloadingTasks @@ -213,6 +215,25 @@ Namespace Editors "If this case, the functionality of SCrawler will be limited, and some sites will not work at all.", "Environment missing"}, vbExclamation,,, {"Process", "Cancel"}) = 1 Then Exit Sub + If Not .GlobalPath.Value.PathWithSeparator = TXT_GLOBAL_PATH.Text.CSFilePS Or Not .CollectionsPath.Value = TXT_COLLECTIONS_PATH.Text Then + If Not Plugin.Hosts.SettingsHostCollection.UpdateHostPath_CheckDownloader Then Exit Sub + If MsgBoxE({"You have changed the global path or collections folder!" & vbCr & vbCr & + $"Global path ({IIf(.GlobalPath.Value.PathWithSeparator = TXT_GLOBAL_PATH.Text.CSFilePS, "not changed", "CHANGED")})" & vbCr & + $"Current: { .GlobalPath.Value}" & vbCr & + $"New: {TXT_GLOBAL_PATH.Text}" & vbCr & vbCr & + $"Collections folder ({IIf(.CollectionsPath.Value = TXT_COLLECTIONS_PATH.Text, "not changed", "CHANGED")})" & vbCr & + $"Current: { .CollectionsPath.Value}" & vbCr & + $"New: {TXT_COLLECTIONS_PATH.Text}" & vbCr & vbCr & + "Are you sure you want to continue?", + "Global path changed"}, vbExclamation,,, {"Process", "Cancel"}) = 0 Then + If Not Plugin.Hosts.SettingsHostCollection.UpdateHostPath(.GlobalPath, TXT_GLOBAL_PATH.Text.CSFileP, + .CollectionsPath, TXT_COLLECTIONS_PATH.Text) Then _ + MsgBoxE({"Something went wrong while updating the global paths.", "Global path changed"}, vbCritical) + Else + Exit Sub + End If + End If + Dim detector As Func(Of IXMLValue, Boolean) = Function(hh) hh.ChangesDetected .BeginUpdate() @@ -225,7 +246,7 @@ Namespace Editors .ChannelsMaxJobsCount.Value = TXT_MAX_JOBS_CHANNELS.Value .CheckUpdatesAtStart.Value = CH_CHECK_VER_START.Checked .UserAgent.Value = TXT_USER_AGENT.Text - DefaultUserAgent = TXT_USER_AGENT.Text + UserAgentChanged = .UserAgent.ChangesDetected .ImgurClientID.Value = TXT_IMGUR_CLIENT_ID.Text 'Design .ProgramText.Value = TXT_PRG_TITLE.Text diff --git a/SCrawler/Editors/LabelsForm.vb b/SCrawler/Editors/LabelsForm.vb index 5888b0b..b43955e 100644 --- a/SCrawler/Editors/LabelsForm.vb +++ b/SCrawler/Editors/LabelsForm.vb @@ -27,6 +27,7 @@ Friend Class LabelsForm End Property Friend Property WithDeleteButton As Boolean = False Private ReadOnly AddNoParsed As Boolean = False + Friend Property IsGroups As Boolean = False Friend Sub New(ByVal LabelsArr As IEnumerable(Of String), Optional ByVal AddNoParsed As Boolean = True) InitializeComponent() Me.AddNoParsed = AddNoParsed @@ -65,7 +66,15 @@ Friend Class LabelsForm End Try End Sub Private Sub LabelsForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown - If e.KeyCode = Keys.Insert And _Source Is Nothing Then AddNewLabel() : e.Handled = True + Dim b As Boolean = True + If e.KeyCode = Keys.Insert And _Source Is Nothing Then + AddNewLabel() + ElseIf e.KeyCode = Keys.F3 And IsGroups Then + EditSelectedGroup() + Else + b = False + End If + If b Then e.Handled = True End Sub Private Sub LabelsForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed LabelsList.Clear() @@ -101,4 +110,20 @@ Friend Class LabelsForm End If End If End Sub + Private Sub EditSelectedGroup() + Try + If CMB_LABELS.Count > 0 And CMB_LABELS.SelectedIndex >= 0 Then + Dim gName$ = CMB_LABELS.Value + Dim i% + If Not gName.IsEmptyString Then + i = Settings.Groups.IndexOf(gName) + If i >= 0 Then + Using f As New DownloadObjects.Groups.GroupEditorForm(Settings.Groups(i)) : f.ShowDialog() : End Using + End If + End If + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Show group") + End Try + End Sub End Class \ No newline at end of file diff --git a/SCrawler/Editors/SiteEditorForm.vb b/SCrawler/Editors/SiteEditorForm.vb index da467a3..053cd03 100644 --- a/SCrawler/Editors/SiteEditorForm.vb +++ b/SCrawler/Editors/SiteEditorForm.vb @@ -7,6 +7,7 @@ ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY Imports SCrawler.Plugin +Imports SCrawler.Plugin.Attributes Imports SCrawler.Plugin.Hosts Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Controls @@ -15,13 +16,13 @@ Imports PersonalUtilities.Tools.Web.Cookies Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons Namespace Editors Friend Class SiteEditorForm - Private ReadOnly LBL_AUTH As Label - Private ReadOnly LBL_OTHER As Label Private WithEvents MyDefs As DefaultFormOptions Private WithEvents SpecialButton As Button Private Property Cookies As CookieKeeper Private ReadOnly CookiesControlsInteraction As List(Of PropertyValueHost) Private CookiesChanged As Boolean = False + Private Const OtherOptionsText As String = "Other Parameters" + Private ReadOnly LabelControls As List(Of Label) #Region "Providers" Private Class SavedPostsChecker : Inherits AccountsNameChecker Friend ReadOnly PathControl As TextBoxExtended @@ -138,6 +139,108 @@ Namespace Editors Return Nothing End Function End Class +#End Region +#Region "CatReorder" + Private Class CatReorder : Implements IDisposable + Private ReadOnly Items As Dictionary(Of String, List(Of PropertyValueHost)) + Private Const EmptyCat As String = "----" + Friend Sub New() + Items = New Dictionary(Of String, List(Of PropertyValueHost)) + End Sub + Friend ReadOnly Property Count As Integer + Get + Return Items.Count + End Get + End Property + Friend Sub Add(ByVal Item As PropertyValueHost) + Dim category$ = Item.Category.IfNullOrEmpty(EmptyCat) + If Items.ContainsKey(category) Then + Items(category).Add(Item) + Else + Items.Add(category, New List(Of PropertyValueHost) From {Item}) + End If + End Sub + Friend Overloads Shared Sub AddToTable(ByRef Form As SiteEditorForm, ByVal cnt As Control, ByVal _height As Integer, + ByRef h As Integer, ByRef c As Integer) + With Form.TP_SITE_PROPS + .RowStyles.Add(New RowStyle(SizeType.Absolute, _height)) + .RowCount += 1 + .Controls.Add(cnt, 0, .RowStyles.Count - 1) + End With + h += _height + c += 1 + End Sub + Friend Overloads Sub AddToTable(ByRef Form As SiteEditorForm, ByRef h As Integer, ByRef c As Integer, ByRef offset As Integer) + If Items.Count > 0 Then + Dim iCount% = Items.Count + Dim otherOptionsCat As KeyValuePair(Of String, List(Of PropertyValueHost)) = Nothing + Dim otherOptionsCatExists As Boolean = False + Dim AuthCat As KeyValuePair(Of String, List(Of PropertyValueHost)) = Nothing + Dim AuthCatExists As Boolean = False + If Items.Count > 1 Then + Dim catIndx% = Items.ListIndexOf(Function(cc) Not cc.Key.IsEmptyString AndAlso (cc.Key = EmptyCat Or cc.Key = OtherOptionsText)) + If catIndx >= 0 Then + otherOptionsCat = New KeyValuePair(Of String, List(Of PropertyValueHost))(Items.Keys(catIndx), Items(Items.Keys(catIndx))) + otherOptionsCatExists = True + Items.Remove(otherOptionsCat.Key) + End If + catIndx = Items.ListIndexOf(Function(cc) Not cc.Key.IsEmptyString AndAlso (cc.Key = PropertyOption.CategoryAuth)) + If catIndx >= 0 Then + AuthCat = New KeyValuePair(Of String, List(Of PropertyValueHost))(Items.Keys(catIndx), Items(Items.Keys(catIndx))) + AuthCatExists = True + Items.Remove(AuthCat.Key) + End If + End If + If AuthCatExists Then AddToTable(Form, iCount, AuthCat, h, c, offset) + For Each obj As KeyValuePair(Of String, List(Of PropertyValueHost)) In Items + AddToTable(Form, iCount, obj, h, c, offset) + Next + If otherOptionsCatExists Then AddToTable(Form, iCount, otherOptionsCat, h, c, offset) + End If + End Sub + Private Overloads Sub AddToTable(ByRef Form As SiteEditorForm, ByVal ItemsCount As Integer, + ByVal obj As KeyValuePair(Of String, List(Of PropertyValueHost)), + ByRef h As Integer, ByRef c As Integer, ByRef offset As Integer) + If ItemsCount > 1 And obj.Value.Count > 0 Then + Dim category$ = obj.Key.IfNullOrEmpty(OtherOptionsText) + If category = EmptyCat Then category = OtherOptionsText + Form.LabelControls.Add(New Label With {.Text = category, + .TextAlign = ContentAlignment.MiddleCenter, + .Dock = DockStyle.Fill}) + AddToTable(Form, Form.LabelControls.Last, 25, h, c) + End If + If obj.Value.Count > 0 Then + For Each prop As PropertyValueHost In obj.Value + With prop + If .CookieValueExtractorExists Then Form.CookiesControlsInteraction.Add(prop) + .CreateControl(Form.TT_MAIN) + AddToTable(Form, .Control, .ControlHeight, h, c) + If .LeftOffset > offset Then offset = .LeftOffset + If Not .Options.AllowNull Or Not .ProviderFieldsChecker Is Nothing Then _ + Form.MyDefs.MyFieldsCheckerE.AddControl(.Control, .Options.ControlText, .Type, + .Options.AllowNull, .ProviderFieldsChecker) + End With + Next + End If + End Sub +#Region "IDisposable Support" + Private disposedValue As Boolean = False + Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean) + If Not disposedValue Then + If disposing And Items.Count > 0 Then Items.Clear() + disposedValue = True + End If + End Sub + Protected Overrides Sub Finalize() + Dispose(False) + MyBase.Finalize() + End Sub + Friend Overloads Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub +#End Region + End Class #End Region Private ReadOnly PropertyValid As Predicate(Of PropertyValueHost) = Function(p) (Not p.IsHidden Or SiteSettingsShowHiddenControls) And Not p.Options Is Nothing Private ReadOnly Property Host As SettingsHost @@ -148,8 +251,7 @@ Namespace Editors Host = h CookiesControlsInteraction = New List(Of PropertyValueHost) If Not Host.Responser Is Nothing Then Cookies = Host.Responser.Cookies.Copy - LBL_AUTH = New Label With {.Text = "Authorization", .TextAlign = ContentAlignment.MiddleCenter, .Dock = DockStyle.Fill} - LBL_OTHER = New Label With {.Text = "Other Parameters", .TextAlign = ContentAlignment.MiddleCenter, .Dock = DockStyle.Fill} + LabelControls = New List(Of Label) Host.BeginEdit() End Sub Private Sub SiteEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load @@ -191,13 +293,6 @@ Namespace Editors Dim offset% = PropertyValueHost.LeftOffsetDefault Dim h% = 0, c% = 0 - Dim AddTpControl As Action(Of Control, Integer) = Sub(ByVal cnt As Control, ByVal _height As Integer) - TP_SITE_PROPS.RowStyles.Add(New RowStyle(SizeType.Absolute, _height)) - TP_SITE_PROPS.RowCount += 1 - TP_SITE_PROPS.Controls.Add(cnt, 0, TP_SITE_PROPS.RowStyles.Count - 1) - h += _height - c += 1 - End Sub If Host.Responser Is Nothing Then h -= 28 @@ -214,41 +309,17 @@ Namespace Editors Dim laAdded As Boolean = False Dim loAdded As Boolean = False - Dim pArr() As Boolean - If .PropList.Exists(Function(p) If(p.Options?.IsAuth, False)) Then pArr = {True, False} Else pArr = {False} If .PropList.Exists(Function(p) p.ControlNumber >= 0) Then .PropList.Sort() - For Each pAuth As Boolean In pArr + Using pc As New CatReorder For Each prop As PropertyValueHost In .PropList - If PropertyValid.Invoke(prop) Then - With prop - If .Options.IsAuth = pAuth Then - - If .CookieValueExtractorExists Then CookiesControlsInteraction.Add(prop) - - If pArr.Length = 2 Then - Select Case pAuth - Case True - If Not laAdded Then AddTpControl(LBL_AUTH, 25) : laAdded = True - Case False - If Not loAdded Then AddTpControl(LBL_OTHER, 25) : loAdded = True - End Select - End If - - .CreateControl(TT_MAIN) - AddTpControl(.Control, .ControlHeight) - If .LeftOffset > offset Then offset = .LeftOffset - If Not .Options.AllowNull Or Not .ProviderFieldsChecker Is Nothing Then _ - MyDefs.MyFieldsCheckerE.AddControl(.Control, .Options.ControlText, .Type, - .Options.AllowNull, .ProviderFieldsChecker) - End If - End With - End If + If PropertyValid.Invoke(prop) Then pc.Add(prop) Next - Next + If pc.Count > 0 Then pc.AddToTable(Me, h, c, offset) + End Using End If SpecialButton = .GetSettingsButtonInternal - If Not SpecialButton Is Nothing Then AddTpControl(SpecialButton, 28) + If Not SpecialButton Is Nothing Then CatReorder.AddToTable(Me, SpecialButton, 28, h, c) TP_SITE_PROPS.BaseControlsPadding = New Padding(offset, 0, 0, 0) offset += PaddingE.GetOf({TP_SITE_PROPS}).Left TXT_PATH.CaptionWidth = offset @@ -290,8 +361,7 @@ Namespace Editors If Host.PropList.Count > 0 Then Host.PropList.ForEach(Sub(p) p.DisposeControl()) If Not SpecialButton Is Nothing Then SpecialButton.Dispose() CookiesControlsInteraction.Clear() - LBL_AUTH.Dispose() - LBL_OTHER.Dispose() + LabelControls.ListClearDispose Host.EndEdit() If Not Cookies Is Nothing Then Cookies.Dispose() End Sub @@ -317,6 +387,13 @@ Namespace Editors Next End If + If TXT_PATH.Text.IsEmptyString Then TXT_PATH.Text = .PathGenerate.CSFilePS + If Not .Path.PathWithSeparator = TXT_PATH.Text Then + If Not SettingsHostCollection.UpdateHostPath_CheckDownloader Then Exit Sub + If Not SettingsHostCollection.UpdateHostPath(.Self, .Path, TXT_PATH.Text.CSFileP, True) Then _ + MsgBoxE({"Something went wrong while updating the site path.", "Site path changed"}, vbCritical) + End If + SiteDefaultsFunctions.SetPropByChecker(TP_SITE_PROPS, Host) If TXT_PATH.IsEmptyString Then .Path = Nothing Else .Path = TXT_PATH.Text .SavedPostsPath = TXT_PATH_SAVED_POSTS.Text diff --git a/SCrawler/MainFrame.vb b/SCrawler/MainFrame.vb index f9006e5..b3c3241 100644 --- a/SCrawler/MainFrame.vb +++ b/SCrawler/MainFrame.vb @@ -325,9 +325,10 @@ CloseResume: TrayIcon.Visible = .CloseToTray If f.EnvironmentProgramsChanged Then Settings.UpdateEnvironmentPrograms() If f.FeedParametersChanged And Not MyFeed Is Nothing Then MyFeed.UpdateSettings() - If f.HeadersChanged Then + If f.HeadersChanged Or (f.UserAgentChanged And Not Settings.UserAgent.IsEmptyString) Then Settings.BeginUpdate() - Settings.Plugins.ForEach(Sub(p) p.Settings.UpdateInheritance()) + If f.UserAgentChanged Then Settings.UpdatePluginsUserAgent(False) + If f.HeadersChanged Then Settings.Plugins.ForEach(Sub(p) p.Settings.UpdateInheritance()) Settings.EndUpdate() End If UpdateSilentButtons() @@ -781,6 +782,7 @@ CloseResume: f.FilterViewMode = Settings.ViewMode f.FilterGroupUsers = Settings.GroupUsers f.FilterShowGroupsInsteadLabels = Settings.ShowGroupsInsteadLabels + f.FilterShowAllUsers = Settings.ShowAllUsers f.Name = fName Settings.Groups.Add(f, isFilter, True) MsgBoxE({$"The '{fName}' {IIf(isFilter, "filter", "group")} has been saved", $"Save {IIf(isFilter, "filter", "group")}"}) @@ -825,8 +827,11 @@ CloseResume: Settings.ViewMode.Value = .FilterViewMode Settings.GroupUsers.Value = .FilterGroupUsers Settings.ShowGroupsInsteadLabels.Value = .FilterShowGroupsInsteadLabels + Settings.ShowAllUsers.Value = .FilterShowAllUsers End With ApplyViewPattern(Settings.ViewMode.Value, True) + Else + Settings.ShowAllUsers.Value = False End If Settings.AdvancedFilter.Copy(filter) Settings.AdvancedFilter.UpdateFile() diff --git a/SCrawler/MainMod.vb b/SCrawler/MainMod.vb index f95ee96..b9ec1d0 100644 --- a/SCrawler/MainMod.vb +++ b/SCrawler/MainMod.vb @@ -80,7 +80,6 @@ Friend Module MainMod Friend ReadOnly SessionDateTimeProvider As New ADateTime("yyyyMMdd_HHmmss") Friend ReadOnly FeedVideoLengthProvider As New ADateTime("hh\:mm\:ss") With {.TimeParseMode = ADateTime.TimeModes.TimeSpan} Friend ReadOnly LogConnector As New LogHost - Friend DefaultUserAgent As String = String.Empty Friend SiteSettingsShowHiddenControls As Boolean = False #Region "NonExistingUsersLog" Friend ReadOnly NonExistingUsersLog As New TextSaver($"LOGs\NonExistingUsers.txt") With {.LogMode = True, .AutoSave = True} diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index c9017bd..7403443 100644 --- a/SCrawler/My Project/AssemblyInfo.vb +++ b/SCrawler/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler/PluginsEnvironment/Hosts/PropertyValueHost.vb b/SCrawler/PluginsEnvironment/Hosts/PropertyValueHost.vb index 24795d4..aa998d9 100644 --- a/SCrawler/PluginsEnvironment/Hosts/PropertyValueHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/PropertyValueHost.vb @@ -54,6 +54,7 @@ Namespace Plugin.Hosts #Region "Control" Friend Property Control As Control Friend Property ControlNumber As Integer = -1 + Friend Property Category As String = String.Empty Friend ReadOnly Property ControlHeight As Integer Get If Not Control Is Nothing Then @@ -333,6 +334,8 @@ Namespace Plugin.Hosts If DirectCast(Member, PropertyInfo).PropertyType Is GetType(PropertyValue) Then UpdateMember() Options = Member.GetCustomAttribute(Of PropertyOption)() + Category = If(Options?.Category, String.Empty) + If Category.IsEmptyString Then Category = If(Member.GetCustomAttribute(Of ComponentModel.CategoryAttribute)?.Category, String.Empty) IsTaskCounter = Not Member.GetCustomAttribute(Of TaskCounter)() Is Nothing IsHidden = If(Member.GetCustomAttribute(Of HiddenControlAttribute)?.IsHidden, False) With Member.GetCustomAttribute(Of PXML) diff --git a/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb b/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb index 2517607..5a7371d 100644 --- a/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb @@ -219,10 +219,10 @@ Namespace Plugin.Hosts Friend ReadOnly Property DownloadImages As XMLValue(Of Boolean) Friend ReadOnly Property DownloadVideos As XMLValue(Of Boolean) Private ReadOnly _Path As XMLValue(Of SFile) - Friend Property Path(Optional ByVal SetProp As Boolean = True) As SFile + Friend Property Path(Optional ByVal SetProp As Boolean = True, Optional ByVal GetActualValue As Boolean = False) As SFile Get - If _Path.IsEmptyString Then - Dim tmpPath As SFile = SFile.GetPath($"{Settings.GlobalPath.Value.PathWithSeparator}{Source.Site}") + If Not GetActualValue And _Path.IsEmptyString Then + Dim tmpPath As SFile = PathGenerate() If SetProp Then _Path.Value = tmpPath Else Return tmpPath End If Return _Path.Value @@ -231,6 +231,9 @@ Namespace Plugin.Hosts _Path.Value = NewPath End Set End Property + Friend Function PathGenerate() As SFile + Return SFile.GetPath($"{Settings.GlobalPath.Value.PathWithSeparator}{Source.Site}") + End Function Friend Const SavedPostsFolderName As String = "!Saved" Private ReadOnly _SavedPostsPath As XMLValue(Of SFile) Friend Property SavedPostsPath(Optional ByVal GetAny As Boolean = True) As SFile diff --git a/SCrawler/PluginsEnvironment/Hosts/SettingsHostCollection.vb b/SCrawler/PluginsEnvironment/Hosts/SettingsHostCollection.vb index 18101ce..a485b1f 100644 --- a/SCrawler/PluginsEnvironment/Hosts/SettingsHostCollection.vb +++ b/SCrawler/PluginsEnvironment/Hosts/SettingsHostCollection.vb @@ -25,6 +25,7 @@ Namespace Plugin.Hosts Private ReadOnly Hosts As List(Of SettingsHost) Private ReadOnly HostsUnavailableIndexes As List(Of Integer) Private ReadOnly HostsXml As List(Of XmlFile) + Private Const NoPauseMode As Integer = DownloadObjects.AutoDownloader.NoPauseMode #Region "Controls" Private WithEvents BTT_SETTINGS As ToolStripMenuItem Private BTT_SETTINGS_SEP_1 As ToolStripSeparator @@ -226,8 +227,7 @@ Namespace Plugin.Hosts ''' 1 - error ''' Private Function Hosts_Deleted_MoveAcc(ByVal Obj As SettingsHost) As Integer - Const np% = -100 - Dim p As PauseModes = np + Dim p As PauseModes = NoPauseMode Dim changedUsers As New List(Of String) Try With Settings @@ -294,10 +294,10 @@ Namespace Plugin.Hosts .UpdateUsersList() End If Else - p = np + p = NoPauseMode End If Else - p = np + p = NoPauseMode End If End With Return 0 @@ -309,11 +309,13 @@ Namespace Plugin.Hosts End If Return ErrorsDescriber.Execute(EDP.SendToLog, ex, msg, 1) Finally - If p <> np Then Settings.Automation.Pause = p + If p <> NoPauseMode Then Settings.Automation.Pause = p End Try End Function - Friend Shared Sub UpdateUserAccount(ByRef ChangingUser As UserInfo, ByVal HostOld As SettingsHost, ByVal HostNew As SettingsHost, - ByVal UpdateUserInTheList As Boolean, Optional ByRef UserIndex As Integer = -1) + Friend Shared Function UpdateUserAccount(ByRef ChangingUser As UserInfo, ByVal HostOld As SettingsHost, ByVal HostNew As SettingsHost, + ByVal UpdateUserInTheList As Boolean, Optional ByRef UserIndex As Integer = -1, + Optional ByVal ForceCollections As Boolean = False) As Boolean + Dim result As Boolean = False With Settings UserIndex = .UsersList.IndexOf(ChangingUser) If UserIndex = -1 Then @@ -322,16 +324,17 @@ Namespace Plugin.Hosts Dim processUserPath As Boolean Dim samePath As Boolean = HostOld.Path(False) = HostNew.Path(False) With ChangingUser - If Not samePath AndAlso .SpecialPath.IsEmptyString AndAlso .SpecialCollectionPath.IsEmptyString Then + If (Not samePath Or ForceCollections) AndAlso .SpecialPath.IsEmptyString AndAlso .SpecialCollectionPath.IsEmptyString Then processUserPath = False If .IncludedInCollection Then If Not .IsVirtual Then .SpecialCollectionPath = .GetCollectionRootPath + result = True Else - processUserPath = True + If Not samePath Then processUserPath = True End If End If - If Not .IncludedInCollection Or processUserPath Then .SpecialPath = .File.CutPath.PathWithSeparator + If Not .IncludedInCollection Or processUserPath Then .SpecialPath = .File.CutPath.PathWithSeparator : result = True End If End With ChangingUser.AccountName = HostNew.AccountName @@ -339,7 +342,108 @@ Namespace Plugin.Hosts If UpdateUserInTheList Then .UsersList(UserIndex) = ChangingUser End If End With - End Sub + Return result + End Function + Friend Shared Function UpdateHostPath_CheckDownloader() As Boolean + If Downloader.Working Then + MsgBoxE({"You cannot change global paths while the downloader is working!", "Changing paths"}, vbCritical) + Return False + Else + Return True + End If + End Function + Friend Overloads Shared Function UpdateHostPath(ByVal PathOld As SFile, ByVal PathNew As SFile, + ByVal ColNameOld As String, ByVal ColNameNew As String) As Boolean + Dim p As PauseModes = NoPauseMode + Try + If UpdateHostPath_CheckDownloader() Then Return False + If Not AEquals(Of String)(PathOld.PathWithSeparator, PathNew.PathWithSeparator) Or Not AEquals(Of String)(ColNameOld, ColNameNew) Then + p = Settings.Automation.Pause + Settings.Automation.Pause = PauseModes.Unlimited + With Settings.Plugins + If .Count > 0 Then + Dim h As SettingsHost + For Each plugin As PluginHost In .Self + If plugin.Settings.Count > 0 Then + For Each h In plugin.Settings + If Not UpdateHostPath(h, PathOld, PathNew, False, False, Not ColNameOld = ColNameNew) Then Return False + Next + End If + Next + End If + End With + End If + Return True + Catch ex As Exception + Return ErrorsDescriber.Execute(EDP.SendToLog, ex, "[SettingsHostCollection.UpdateHostPath]", False) + Finally + If p <> NoPauseMode Then Settings.Automation.Pause = p + End Try + End Function + Friend Overloads Shared Function UpdateHostPath(ByVal Host As SettingsHost, ByVal PathOld As SFile, ByVal PathNew As SFile, + Optional ByVal Abs As Boolean = True, + Optional ByVal PauseDownloader As Boolean = True, + Optional ByVal ForceCollections As Boolean = False) As Boolean + Dim p As PauseModes = NoPauseMode + Try + If UpdateHostPath_CheckDownloader() Then Return False + If Not PathNew.IsEmptyString And Settings.UsersList.Count > 0 Then + Dim hp As SFile = Host.Path(False, True) + Dim diffPaths As Boolean = (Abs And hp.PathWithSeparator = PathOld.PathWithSeparator) Or + (Not Abs And hp.PathWithSeparator.StartsWith(PathOld.PathWithSeparator)) + If Not hp.IsEmptyString AndAlso (diffPaths Or ForceCollections) Then + If PauseDownloader Then + p = Settings.Automation.Pause + Settings.Automation.Pause = PauseModes.Unlimited + End If + Dim checkAccName As Func(Of UserInfo, Boolean) = Function(u) _ + ( + (Host.AccountName.IsEmptyString Or Host.AccountName = SettingsHost.NameAccountNameDefault) And + (u.AccountName.IsEmptyString Or u.AccountName = SettingsHost.NameAccountNameDefault) + ) Or + (Host.AccountName = u.AccountName) + Dim tUser As UserInfo, tUserNew As UserInfo + Dim tUserBase As UserDataBase + Dim i% + Dim newHost As SettingsHost = Nothing + Dim userListUpdated As Boolean = False + For i = 0 To Settings.UsersList.Count - 1 + tUser = Settings.UsersList(i) + tUserNew = tUser + If tUser.Plugin = Host.Key And checkAccName.Invoke(tUser) Then + If newHost Is Nothing Then + newHost = Host.Clone + newHost.AccountName = Host.AccountName + If Abs Then + newHost.Path = PathNew + Else + newHost.Path = $"{PathNew.PathWithSeparator}{Host.Source.Site}".CSFileP + End If + End If + If UpdateUserAccount(tUserNew, Host, newHost, False,, ForceCollections) Then + tUserBase = Settings.GetUser(tUser) + If Not tUserBase Is Nothing Then tUserBase.User = tUserNew : tUserBase.UpdateUserInformation(True) + Settings.UsersList(i) = tUserNew + userListUpdated = True + End If + End If + Next + newHost.DisposeIfReady(False) + If userListUpdated Then Settings.UpdateUsersList() + If Abs Then + Host.Path = PathNew + Else + Host.Path = $"{PathNew.PathWithSeparator}{Host.Source.Site}".CSFileP + End If + End If + End If + Return True + Catch ex As Exception + Return ErrorsDescriber.Execute(EDP.SendToLog, ex, "[SettingsHostCollection.UpdateHostPath(HOST)]", False) + Finally + If p <> NoPauseMode Then Settings.Automation.Pause = p + End Try + End Function #End Region #Region "Count, Item" Friend ReadOnly Property Count As Integer Implements IMyEnumerator(Of SettingsHost).MyEnumeratorCount diff --git a/SCrawler/SCrawler.vbproj b/SCrawler/SCrawler.vbproj index 4b5f446..d565a15 100644 --- a/SCrawler/SCrawler.vbproj +++ b/SCrawler/SCrawler.vbproj @@ -173,6 +173,19 @@ + + + SplitCollectionUserInfoChangePathsForm.vb + + + Form + + + SplitCollectionUserInfoPathForm.vb + + + Form + @@ -518,6 +531,12 @@ InternalSettingsForm.vb + + SplitCollectionUserInfoChangePathsForm.vb + + + SplitCollectionUserInfoPathForm.vb + My.Resources ResXFileCodeGenerator diff --git a/SCrawler/SettingsCLS.vb b/SCrawler/SettingsCLS.vb index 11cc414..f67a475 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -54,6 +54,14 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable a.Invoke(CurlFile) Plugins.ForEach(Sub(p) p.Settings.UpdateEnvironmentPrograms(EnvironmentProgramsList, CMDEncoding.Value)) End Sub + Friend Sub UpdatePluginsUserAgent(Optional ByVal InvokeUpdate As Boolean = True) + If Not UserAgent.IsEmptyString Then + If InvokeUpdate Then BeginUpdate() + Dim __userAgent$ = UserAgent + Plugins.ForEach(Sub(p) p.Settings.ListForEach(Sub(ps, psi) ps.Source.UserAgentDefault = __userAgent)) + If InvokeUpdate Then EndUpdate() + End If + End Sub Friend Class ProgramFile Friend Const File_FFMPEG As String = "ffmpeg.exe" Friend Const File_YTDLP As String = "yt-dlp.exe" @@ -244,7 +252,6 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable MaxUsersJobsCount = New XMLValue(Of Integer)("MaxJobsCount", DefaultMaxDownloadingTasks, MyXML, n) UserAgent = New XMLValue(Of String)("UserAgent",, MyXML, n) If Not SettingsReoranized Then UserAgent.Value = New XMLValue(Of String)("UserAgent",, MyXML).Value 'URGENT: remove this line - If Not UserAgent.IsEmptyString Then DefaultUserAgent = UserAgent ImgurClientID = New XMLValue(Of String)("ImgurClientID", String.Empty, MyXML, {Name_Node_Sites}) 'Basis: new version @@ -462,6 +469,7 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable Plugins.AddRange(tmpPluginList) End If UpdateEnvironmentPrograms() + UpdatePluginsUserAgent(False) #End Region Labels = New LabelsKeeper(MyXML) @@ -1001,7 +1009,7 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable Friend ReadOnly Property CollectionsPathF As SFile Get If GlobalPath.IsEmptyString Then - Throw New ArgumentNullException("GlobalPath", "GlobalPath not set") + Throw New ArgumentNullException("GlobalPath", "Global path not set") Else Return SFile.GetPath($"{GlobalPath.Value.PathWithSeparator}{CollectionsPath.Value}") End If