From 6ab00c3b1e5d283191d24e9204b393ce60be217d Mon Sep 17 00:00:00 2001 From: postscriptum Date: Sun, 22 Feb 2026 22:33:19 +0200 Subject: [PATCH] add few flarum v2 notes --- .../flarum-v2-fof-redis-extension-setup.gmi | 83 ++++++++++++++++++ .../dashboard-status.png | Bin 0 -> 13214 bytes .../flarum-v2-fof-upload-extension-setup.gmi | 64 ++++++++++++++ .../group-permissions.png | Bin 0 -> 31252 bytes .../web-form-buttons.png | Bin 0 -> 3956 bytes public/uk/index.gmi | 2 + public/uk/install-flarum-v2-on-linux.gmi | 4 +- public/uk/my-first-impressions-of-flarum.gmi | 4 +- 8 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 public/uk/flarum-v2-fof-redis-extension-setup.gmi create mode 100644 public/uk/flarum-v2-fof-redis-extension-setup/dashboard-status.png create mode 100644 public/uk/flarum-v2-fof-upload-extension-setup.gmi create mode 100644 public/uk/flarum-v2-fof-upload-extension-setup/group-permissions.png create mode 100644 public/uk/flarum-v2-fof-upload-extension-setup/web-form-buttons.png diff --git a/public/uk/flarum-v2-fof-redis-extension-setup.gmi b/public/uk/flarum-v2-fof-redis-extension-setup.gmi new file mode 100644 index 0000000..b0d270f --- /dev/null +++ b/public/uk/flarum-v2-fof-redis-extension-setup.gmi @@ -0,0 +1,83 @@ +# Flarum v2: активація драйвера Redis (FoF/redis) + +Вирішив зробити повний бекап файлів без стиснення: + +``` bash +tar -cvf archive_name.tar /var/www +``` + +і помітив, що тека `/var/www/flarum/storage/sessions` вщент захаращена! + +Ймовірно, це через доступність нашого форуму через I2P, для якого характерні разові візити і відповідно - створення нових сесій. + +Так як мені не подобається шатати цим SSD, вирішив заморочитись і поставити розширення FoF/redis: +=> https://github.com/FriendsOfFlarum/redis + +За одно делегувати йому так звані "черги" (queue) та інші тимчасовості, що гальмують відгук форуму (враховуючи, що він і досі крутиться на SQLite) + +## Redis + +``` bash +apt install redis-server +``` + +У файлі конфігурації сервера `/etc/redis/redis.conf` вимкнув зайвий сокет IPv6: + +``` /etc/redis/redis.conf +bind 127.0.0.1 +#-::1 +``` + +Перевірив статус: + +``` bash +# systemctl restart redis-server +# ss -tulnp | grep redis +tcp LISTEN 0 511 127.0.0.1:6379 +``` + +## FoF/redis + +Flarum версії 2 (beta) тому поставив з репозиторію: + +``` bash +composer require fof/redis:2.x-dev +composer update +php flarum migrate +php flarum cache:clear +``` + +У файлі `/var/www/flarum/extend.php`: + +``` /var/www/flarum/extend.php +return [ + new FoF\Redis\Extend\Redis([ + 'host' => '127.0.0.1', + 'password' => null, + 'port' => 6379, + 'database' => 1 + ]) +]; +``` + +Тепер дані зберігаються в пам'яті: + +=> flarum-v2-fof-redis-extension-setup/dashboard-status.png Статус в контрольній панелі FoF/redis (скріншот) + +* рушій ще не оновив до 7 бети, бо у нас локальний форк для підтримки e-mail без DNS + +Теку сесій можна почистити: + +``` bash +rm /var/www/flarum/storage/sessions/* +``` + +## Посилання + +=> https://devzone.org.ua/post/flarum-v2-aktyvatsiia-drayvera-redis-fofredis Веб-адаптація цього матеріалу з коментарями на DevZone + +### Дивіться також + +=> install-flarum-v2-on-linux.gmi Встановлення Flarum v2 в Linux +=> my-first-impressions-of-flarum.gmi Мої перші враження від Flarum +=> flarum-v2-fof-upload-extension-setup.gmi Flarum v2: встановлення модуля локальних вкладень для повідомлень FoF/upload \ No newline at end of file diff --git a/public/uk/flarum-v2-fof-redis-extension-setup/dashboard-status.png b/public/uk/flarum-v2-fof-redis-extension-setup/dashboard-status.png new file mode 100644 index 0000000000000000000000000000000000000000..6a7d0dade04de65bb662794b2b3a895cf619a835 GIT binary patch literal 13214 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 literal 0 HcmV?d00001 diff --git a/public/uk/flarum-v2-fof-upload-extension-setup.gmi b/public/uk/flarum-v2-fof-upload-extension-setup.gmi new file mode 100644 index 0000000..cb21a23 --- /dev/null +++ b/public/uk/flarum-v2-fof-upload-extension-setup.gmi @@ -0,0 +1,64 @@ +# Flarum v2: встановлення модуля локальних вкладень для повідомлень FoF/upload + +Нарешті, вийшла тестова редакція відомого плагіну FoF/Upload для гілки Flarum v2.0: +=> https://github.com/FriendsOfFlarum/upload + +Цей плагін зручний тим, що працює з файловою системою сервера і не потрібно слати ремут-реквести на фото-хостинги з локальних мереж типу Yggdrasil, де цінується приватність і такі картинки просто блокуються наприклад через PAC: +=> safe-yggdrasil-websites-browsing-with-yggstack.gmi Безпечний перегляд сайтів Yggdrasil з Yggstack + +З коробки Flarum цієї фічі не має і раніше я руками завантажував зображення в `/var/www/flarum/..` і посилався на їх відносні URI. Тепер це питання вирішено. + +## Елементи інтерфейсу + +Кнопки знаходяться в лівому нижньому куті форми створення/редагування дописів: + +=> flarum-v2-fof-upload-extension-setup/web-form-buttons.png Кнопки FoF/upload (скріншот) + +## Процес встановлення + +Оскільки у нас форк, довелось додати до `composer.json` опцію `"canonical": false` + +``` composer.json +"repositories": [ + { + "type": "path", + "url": "/var/www/flarum-framework/*/*", + "canonical": false + } +] +``` + +Встановлення відбувалось командами: + +``` bash +composer require fof/upload:2.x-dev +composer update +php flarum migrate +php flarum cache:clear +``` + +Більше нічого не робив: в адмінці з'явились відповідні налаштування, де вказав такі дозволи: + +=> flarum-v2-fof-upload-extension-setup/group-permissions.png Дозволи FoF/upload (скріншот) + +## Бекапи + +Поки роблю через кронтаб: + +``` +# crontab -e + +@daily /usr/bin/rsync -av --delete /var/www/flarum/public/assets/files /path/to/daily +@weekly /usr/bin/rsync -av --delete /var/www/flarum/public/assets/files /path/to/weekly +@monthly /usr/bin/rsync -av --delete /var/www/flarum/public/assets/files /path/to/monthly +``` + +## Посилання + +=> https://devzone.org.ua/post/flarum-v2-vstanovlennia-modulia-lokalnykh-vkladen-dlia-povidomlen-fofupload Веб-адаптація цього матеріалу з коментарями на DevZone + +### Дивіться також + +=> install-flarum-v2-on-linux.gmi Встановлення Flarum v2 в Linux +=> my-first-impressions-of-flarum.gmi Мої перші враження від Flarum +=> flarum-v2-fof-redis-extension-setup.gmi Flarum v2: активація драйвера Redis (FoF/redis) \ No newline at end of file diff --git a/public/uk/flarum-v2-fof-upload-extension-setup/group-permissions.png b/public/uk/flarum-v2-fof-upload-extension-setup/group-permissions.png new file mode 100644 index 0000000000000000000000000000000000000000..76ada06ef519fcf9e651832c190f37282cf4afdd GIT binary patch literal 31252 zcmd432T)Yc*CsrQib|54K~X@-IR_<57EyA}X~;PvC`mv-a{7@aXNDXl=bRaG&KU-n zuleu$ul?%%zTK*=-P(GmYD(+g>3h3Rcc1f|=Q&N#CwWPX=OoV|5D13UN3qWk$U`d# z|Wi%Zh(yt4z|Oby6F4l7d%!{yKkEQ21W7gH@tyQRqF@05TT?KqGUV!Zi+X+ zqLoMX53rUhje@i@IR|&h2Bwp1>^Im^VkrCP_zeO>tqeLLPtXIw=i`Zy<@Q4{@LAn` zTO9N4t z#*@_H+h!J9o_R9D$MpcKoR-2^A^r98l(X(evAzx%#z;M9h(^}_K8?t?*PG*e=GSMn zRk^*q87Kjxe@cEUss0{3`YGC!;0X-$@x=Jw28{JE5pG(pGJz}8F{}}VN<6&r3ktRJ zYx$(oHiIF<>tc8yK3m+P+iV5Xskpm0VuDCis4c$(M{;YrKj$JC5r3Kdzl-T{#g~3jwh>risT<)k$Sts`*hv}-!F;9#QLWc!VjV6tCB_ZUD*I+l z;3aS9g07;&iR0r)8mp-HE<@(CwTI`!w@mLA0~qPMnY&(b)pC;K)GhCjzBkJH?uqJD z=6(<(aZzqQPZdTX4Dm_KC*51-AEnB}Usz})@);@9$0V1dW%MNFO6(u*oURfaZ-m@< zpqQl&#UK89D{G8JN6%=uMrLxc!1((&0q@N1O*OZrn)nAjCM~`*njzu1?F92Mvf06j z%GFL0dQ%}qRU}SIz=*8X{&=N`@E;KS(Fx%oVG|Lh3bGg`$SB>nvekY6 z6y+M-1W|->DocD=?&&&8olE$>;qY8WA|v7zO7ZJv;pzoD@1~cvZysY4;B=Rb!&B^M zm4bo;vvi6rylu7X&B$Xv$~ssm7sM+#SxNZqfx&JjjiGU?a6>e;=094_KC@<~RQ70U z9xif^_4*6jSGCr#X4b)(c{5B^Mh$0-|6mloR>2t@7}(W5&d^c)z{SmlUr0qo!?(87 z+Orm`wY@!hW`@LTsyD3KNJ!tOL4mIC6{q4{-g6(gyV0y*@<5L*a2+en~&cRNy?$Tnfz@oq$v2MZXR-S|i(-9oy>DIDOnH zPsXRFfYvISF;D|Fkli=Fc4+Fro;lx#w`@CxOnIAfe{$w5whnKpPC+*jCWP0%p5~=h zt+c|fyRdSc6A25m3`(`uop(Jvq-u0Th0rk=Wiq9F)3S+qNr}sJ!&uq%!Z z57WiJ$Y7FBt60y1pDPz>`OI5wY#yP2L10g&GeUeHwBW_!={j+@b+d*Wtx>P8o9M%4 zr%O#p-jaE1uwyVfV}cu3R`=ZeEn;Rru*o& zGhg(RbI4I_%U;)D$2ZRGKh@1g)1TFR=dC(*Sw1N%FIPV|g3acZ{9f8xdh9dY{#YLS zPnkVCnWuwgtcaKky6cr19^QInyk~*-3;x)uP+&59kAW_}nZ;^@bPfKQTej*oe8b7a zKZ>8?HlA8p741XtVhQwe3z~t6O>N#7{E(yJ=k{w&*DSM>e_H{%%n?D;w0v$~bEQ@= zTiwS>({ISeJ5f_xJC0@{ys^H%pgTQC`;enUex+Piq4GxddC0LU%$E3FGGck(nCk6I z|9^a5NEV}F9;^lQ)0a$JZj4p23JWu@#av^p7T!#|2t{>gv{W@E`RKxs72#1)Zl%-a zYDc%ur&~f#btt{-8$6EAk00as);8sg?;BGJm{kXjlfFiUZN=45 z@N!KBv@gN{A+3gGgYcZZFD zh#<7!^;Zn$^ym*Iek|UvDsRO7=%Xtm54af|1v(ki518cr>em3-+hAi}GlS}!c zq7o4m+g{X=2qKo*HdsU~mAYH9Go8*fd}Y)N+Kp3tT++SLpdG}01jheutfoRR8pILR z5<{9j+}aleBthM)AHHUN?~_y|h{FT(MxH9U_i!eu$@pab(LLVb75uM`d;SyRs#aEGBtrj@T_k!BEe77J{8z(i z|Ea(KClTV(%-G|=KuxJu5vr}3T&$K4*kfa=-CcYg>w6Y&8R?%aP6S~oscX0HS__+( z6o!P*Yel+^(s5y9m7`K;iQlgU0EQqh$cQ@P^pwcAb;a4)Dl!0|9+@P?icCnG) zc~`viFWx!jf~b`?O%OEdit8*Si!Lv{c!+?*-LGC4VEYnN%L?BW6L3VeWq7BldY9YF*Mg7Qa9(ZqKh5@C`p z*!MsUGGer8?4cS1=8+K?@67tDQHkvi9R&0=@TrAw_x#VS zvWGs^aW0UmeND-Yum*s12Z0}E9@p!Aybb2L?gE-i_$Q{|`Uh(p4elbPtezspo!5uc zJ=VB?npuDgztTH-E^kQjM0c)hb_(W=`V7jyw6@gW=*O?tWX4;#GQ;}MpbbOxUbb(>$ zwH^CKSq-9kB1)Im5)sBFd~V=iyL340Fkz)B4TZ`zI5II6k@3~WIwr;dcPgqWD{xfE z_et;FYnnXHuM>0=Q1zamzSj`iLHLVr4@KTG4444ty}D-dV2F*&w@9jiwI;E$1HbQBkM#ODp1o=5%`e1bMf7o znB*3`yj^7aDe)S6i8ZWBA_E(s--jq7PY=`j$d6q=Mtx1cwVBajAOdlw!seSk& zHm8>AC-dRn@iL*5Powx82eWmS?MN!+^0>ZP(9mctH78X{gbrH1(SrC^vfp?6I z4_~Iq(c;WF*cBkJR4a!TKh_I)^0*i>f1QxFJ7Ir@5%#xpHg%*d9ZgWSrVIUvXhVKh z=rgQP0GG=>FR&nFg0{Z^u)g0KVBbT)3Y3tO<22$NH#DMbgLD5XNLtC6ckZ1M!=#wr zF@@>%O5>>0COhuApF^|q@^E~(7-vh(5F~W+cZm5~dvYzlb7MpiC5a`>rG2tOVYBtC z;169cce}+QtEzo<1;@&0(4gF?Q@y802BLa*3!5^B(q1Tf&tJ>+5(zr6!L3yvzISzf zhrrx@wCJ*~cl^98D9lpod)7}ni>#HrvpdnctzT2oz`+@A80)eSJw3!qD=5fR`-%7h zh=dySJo$z5qvKO2292t94S*xJ=JyiV7u<3S@@y=1KC5r4?yqerSqqMRZ`LwP1S|cc zRAcax9}SE3k_jHc#^~`XbYwa5p@-+qySF{BId~#L79}TCB}Gy;yZ1$n{yr(_QJ*#? zRlu^A_QI|WkqIGNA$pKkAdInFTsf}Kl5+JUF*b+0T^IpV)`AK`eQvT663ja{N`Afl zfgWfl%VOiqo?KR}uEEHEZfV$=66)f5{VQ@V_JOBF2{4#rr~371>BQI=j}X#MOUewp zsK~0iF5V~AtNTh(&Gi`tg`;)L`VAhCD6i72-6}{n47tiyMlb{eYwD+-@3t<|v5JrO) z{JDhOzJiPjv+1x<4Hf}10PiAg$0TOD@h!lNw+lg@dVr~yEW=v@UFO7;2n4zW`|2H+w(SFLE?vivSP z#yO{)+cVuTJI^%fdEa@FG>48!DMJgw(r^SLvG6r!u=Mf$-deRXJ~=xTR5{Mzk$d=ZGmT;*8<7-=2HI)rr8T11Q|_SxsL0 z_^WE+SIg|Fe#+ktcvreEzdKR5EQ$zvts#Ej~?E9M* zUF6n1@{-?k*DWksJ}kYpT&Q~Tr>-)tR-en$9X;D3M+l&m5{EN^&hiI?Dpp=JJKW40 z30@ht_Uxt54ZcnyP9Kn;Zp|97fM`$-oy5wS*O|H7i|bGMS?h!Y;;^AH2Bp&lNlU-jvdTa0E<{|KcxM02cX4Dzr+~iGSJ>GT1jBkJR>9|EIVOS zD;GNZHn8)Z%|Ae58smv*6u~QyE%n1!kCft5uc^hUAIoX=@CJnh(U!{55-=nWk7a4H z2x8u&ev-qZbA#QI#Ak>NnMbaG}(`_1bCt|<)w&1pHx{c^jH)(esFT)f=q@}b~3``TjuBg z?y8k1?h=WEmkg+sldTwYC2mbHKK4mZ*N1o^15B#*T3sfJ;ms;oPcUv#PgiP$Zy)&V3)UW8T2r?5_J$m+drL~g@Ro6x6L&A~ zhcO^oUb`IgE3SF_K!vAq){^V)WXby(`t#Loizj6klU6CnUO41WZqa%QV&AyA`Hn$7 zt_KR6^M%2<_xJbzc68XRWCl5G4pI2L5`BVlxP*!{x{lS+V~daDb?2jr+A5>W010;2 zmAP^Y#^R`gkU>v>)PuP5BU+CpW5&H1YJC=>&7m|wdKG4rX48T?RU&K(%w}@ug#rJd zm7}AhSG4@7b@O2%A!ra^Utb8>lsCjDFOLqGvKbCXmQmcR5nbO+m0O_JGujKT2*DU8 zt$_ffYxvUZA1A}e?1-o+wD)py7|sh`+>oN8qOq~DPpYb7BKi-V7aaM8Z%TZHg%GrK zbPOIa8w&7&tP!5MbL0bzWIlcP46SX*u1R4X~R3OqPbBYrCy4 z5k@wkbulO95Ml~u!PeQ?I*O+Hb#2Z5u=#_e4yo5vmke{GteP6J z-xHm-ACz1r_8Ubs0({^V5%wkkN|cfQce>!8X>Hs4mq%RxU(|OdvzgwDtx6k%I01x# zKY^;>ZbVt#T^@ci%YE7OHUN-1JT^R`d2}+kDs)u+zOMv0daPK85^6EABk1L&?Q|kR z3T(=A+mDqv-w`%XI#mJfH_DS0OQ8Q3GU$Ud|GI0C1X;bC{OlV3YKh&RM{qD2lcEvT z$Q*Aw5jSA&0m4kIMaPanTR$M|D#^Fz*%*2P8uWnwHp7_@alX({4K%;|HoJIdKs@Jd zsTBK)%C6=5g2Fc^=fc(cU~5Ybx$v4vUz}=LHi@dbrY_OOnVZv*7%$E$_7M{Mli&90Gq9oFx42C7swTCu}pJ1gH)FyzHcX^5ew#h;Cuz5tZl@41=5Mp!$=E zx}PM1ksEiH0ceb)xdP{jl9x?LufL(V*6CGMG2y}q9T)Io=ysV{(Njh2Qj8d2xSw^l zEKmG=MG@h{G>u+~fq!1ul^wGr%4u@j9;%(aqiVA1KYmaTl4x{N2b4rup`OW1w%ZOL zP4*CH4KrFy-%DENm4fT?X{ah4gDQig_e7CaXQStq2k$LApVMyhKyn>~h|}#2H=OPJ z(9jD^3W2|g*7f}pj2gt;Rt&Et!&mqD4<75@U`(DQc2XLx2D0K2;^Pt$_9B6Qe;p9M z)FFi%6!^4Lmt!Pf1xR7}F1MB3sx|swGb*X69aonmDKh0|xxjury2{aEaX%-6)YsQn zdvAN96HQ?$U@34}&HZiC@rbXl7l62(@3#113BLzk#&V(lyI|b~M{T%80OnF|PD=Bx z-g<6Ms_tfqg{#eWn{0|e(04Q?UawsjKPaDr>0m~*AAk)O2!QPwE}NMS%kLm7_(B${Zk6O4ai>haDm0I7(!_{BN>{GIk&Z z6Vl)Yvnl1()s^K`i7$nqJ7nl0Pv~D$+=+(NzZ_ERL#%7u-Hr$c{rqWow$1ss6V?ug zQ~FQ{))`6*f(}+ev+`pgx_7T4hmhk&&|)1j=jLa z>60n0|7gCA^8<^#T?Yw=S0jB9L;@}^J~>;kGYI^yJE#q3&FEBA(rCL?+G#Z~Gz%dh9)hvphlktr z)`y+Kf-;{!OG0So9bQ9ctCnKk!C1|f4IkdzZcPZTRd@z#Zh3jUZXLuRolkYANa+&9 zQpj}lK##Jf+`IG|Y{RW_8vA;>3xexHgUSdo0xv=bW=uTC5WVIBbK%2}v2$}G_sPlO zPDxof-R1LnE<+4wyn8NVboKavmbuu+$ETKs>%5k=?-J+f2+zN30nBMMV3r_l4=y$t z)Y}M4Mkf{eJvS$Cz9*AoGDuNfTRXy<`+8L9?sp2UsLr6aplZW)4sC)pyvmP!)){iR zSAP}PZ`|5OipfMFV8{}HNxq)H#r`KRProxP+2g!>LzCMI9a3&Qu%1hs@=BPQQdn5W z&i*7YDD;8u(4xguIc+GY8_=s%S8LiwjbYUCYS~!rtgV914#41Ek|4Mya#`sEr1S(U z7wtDECnr$afCm4;$cVZLIbZJ4BmvVDABfJ0oj$6`t|d@`U2}h!o72oKD!Nj0my>u= zGs4-ckp*eb`hIVsHdKYbqitx-*fYU0Xv{rA-~3Rd6yR9zRZUI(7VS5O^jcfDt;7q| zYZ52~>!OmA`+aXwRU6DXVRL+sot>Q{qxg>o3AG(8RX%@SzO*c#{!>`kK3=($i;01@ z*0uEdEQVabAub|gCuMl7$djMKb@fAQYin0uPkL=FNo*7@-M4QKdA)AL8ld6i{PMa( z--YAYIT(I7dLl}6hdnyktgV@27_^_?W3R=vwRWAmYm=LsTh&T)4C|&d%yw}?C;Ts~ zlLaH6hZnD)-yc(}7LG%ztBG>o!gS9sw}vHSf~9{-WMs%G>Y4coiLdsI6nxY8$NQ<& zUft5Z@`Yc1>*tPiqw;E}MIHzNQ>u8t-y%RYKtP_O4^(43ytR~*#&3RpTMG^Rsj>)k zAFvA2GctB6gMvc!E{bYx4f0hA*Vj~Zs9wL0a@?7Sii(nvl6u$n18Z$_*uc=lB-I|n zwWj8c_E)5uY-uU$>gpKz;HZLdOC)vgJtl+vB<4>jHISTyCdMkj8;{O*Ld|RkIFs^< zzS654)tQi_8ktwByCNH~T)_9~^XJPo!gnc%gQi&TyOnl{*^sBJglim6twPodjRyx% zAb6{UtS2YpE{GckMET3&r%}^?eNQudl5gF^xi*!=iWvI0mA5!=C5HKm$Qjeshk@Yq z49YiLC?mX{<<(L@#=NuC(BW*l&2X0r0prRf+-t-%ldmq=DopwQ3t|2r4GoU-hr;zbsJ8&k>H0 z0*$(`ciiy5+h0wP%NyIuFBk@QjnZy#e|WfQfOT@puCTna;x}&IZVXdWQgUBF5Y*r#bqS2<#*eG_ zciE!U>@C=$Q!E4wybGFhI^gL{C9uVot#{>t&GU!tH}LDhW(TKo0&i+L^B325aEEl& z9K^_QI~UsjmO5jTV{fQ70_u^BryjLQqUtKEtLx)^`k)HnLVS6X{`MFmj^CNW+xzaZ zWMVYE^3g=%0dRl9z3J_6Rxm!-?QZyZqHT@&xH*VbybhZ$An;-}nJ-_yG#o)q%5+;q ztQw8jE)*KVlXl5cTyEY;gi>^awnvjqx8JdZFT-Cm2q7n%M)RE&8Z}tLO}vnJGO-Ny zr%@3REeGBg47fBuX&t*C(#SPNm{EGWO*r0+B#gsH^S;U~cp{;8W%e%H-8saZ=8w>n zHcqZdi_08$xVUaguzd!F5#M}#AlZYLNeV)@fsv6oLN3U*lLc5;^kVZ8hozH7gArF^ z=+U`(XcU%*r>1XZA?MjqwY&C&Ah8}B1Of_c}1l{AnIcJ`&KhG#3}bD zr6a#rqY1Y}es(qqn9*SA=kb7Jj;&(BjtF^4UBlc>?#87`K|$Pl7FA?4J`$?QSwgSK zx@4&diyDb!qsnNzbi3Aost7SCpxJ%mmzKMuJGL1iaN8FJ zw2mrkxbM6%ZH+xGY zo6m%d>y;|-msuLm!KR8;E>w?@hc~!i938&Kvc0|B`KVP9x7Mp-bH<56%;oV`M=n)LTblyq$vNs`bgYiS&IHu| z`}gE3;d^^zk1){CK6-SC@+&%eTzCG+pp(~b)wCgBtGMZohWYLU&Y;uyZKor&1qg41 z$SZ51Yf};h;WK^)0yIFoJZhFfdc|Y6Nu1odQ5ZKw-u_pFcn2$$_qbYUw_dj0T znYQoh>f$l*zE9NUveabd-@bkO=;f{njL{o!o{EGpBO*gGoHvGC*lF&Fm!ZHaF;?4k zn6;+almmyD_(8Le@2%@$TCSLc#AkK&;C^L7h?b@nN#UC8e=}sXG4@=Q)%=fk{WO5L z-q1Sh&sOa|O2Ig4p#$CY#s^Io4?z5V&ov?gR5`xkY(c$YRg zLqo&+Ow3Qn(=D|uX7r2}^mOERg1Ak&D#Ja6Byduf7{3G`T>X$iWCZmor&n?e_lE4#C*0!ET`*( z73s1%9B}D&J~w)PG18<{<3Ri2eubkaw68w$@kESFH@IWz>7~7S)3I`JFj$macR35! z)?Mk|sK%gR3!IuFTK7CDG_X|H))q1|Gpn$e49hPj{wQYns5gdb({TN$uGfz zs9EL=>GTClG_Wh4Geqs4q@=Pl{@)_{{?{5?C=tG-vZH2?7cd2-e_zBHKHR0n2?{*; zQ}N}O&hIv$vw~t#iLcRFLG<_$>&-7HNQ}6N(B-rO0=w{O|C{$T;7Gb#59kLqwEGx< ztX^mPN<-Bj4XR_ii~y~G0_Ec_JH$Nt#J|(Z+{&7hYj0oKf%bxp0)M`9#L?J z%q@QnC_wuigU_w_6>tXwfVt39frIqm!WF6mWan>2?05@eMW6bas%wa}h}bQkKe%hb zn3&#k0!rlopz0I;VFM%vxA9c}hDX+3?0*D`kS`H|JW&){!JO#8jN_$*E=qcGbv8?Yqwm5fGF2aEiKPzu4?N%9zd^(2-L!6Zdm! z@l6AY_;?(51pTLSG%Mi+3dZ8M?dFAc48=uNd_osnLV+_g>LXbDwY#8ZE(r^iQDvUb zE7S*?&24V|!5ilF~FD$rTj`dPlP z@O+gU#nTPFW7SG1AKG-Y&He<7Vodi6aGGdJl+_0X*PA1i?ByGMJhOI#)8E8Tq-14H z9ke_|1SmakbYhqksD)moG^(8Gt?zDC*VXA9*NUw!gV}YNna&WrcCz!YqI~@Qa;{;^Yd9q6z(S6uxY>E`+pO!3q1Dh!PV^UC>!pYa))j@DVc3%`!;5Ag2)jQbEd=aV@ER`)>0MO1kBL&eZSbzliUU_*rv4H8@ok?UfaC;q#A4GF2lJ1_b+$tSpDB02OSMM>={7m)F$)WYWIkAU0 zNXsv$xF0Nc)28Z;1(s&+Ng1sEi6C^F5nE-rxs>o%nl95LB%R!I@F*@UTuY3X>F(|k zJ^%^XWM^(swU#;Hp8#WwmDn!T(v zK5M&PacX<7;A^{|VStDQo3}%SEG#U1QJMUtrY0q8i3SW=?X>wK#p~F4)o=rHc%5&} zVzcOjRs=WYU^Cu*OX0Q23i54;%h~v3JST!4%)y`B+;$K}HaFjvm6u&D-Xb**LFblB zW|wxhatk!ee0|>Ql(C(>WwzkS_##$hsUl`mKI<#7pGU%?3!5c}_xAMs`E$92YGf=y z<8|j%T{|Hxm!_Aty1J@gdc%>pGt?pqgo!1}MFlTyp^F7)EYTn6=>_#kAWDALuxK;o zSl-(U1tP}f5pEdN-p-D>$Ay!bnHgvySA*X0oPvV-h1!3b-#Z=5^ye4X4X<2(;MR<2 zVz(5&Z1S0!`hntSps!Kl*sI*>Oi4)zjPRBz&z)aXvzI40I2ag27+;v1JN(x#-9BUX z=x9e6lYxQ3pQ57dKP7=eo(LAhu9y3@C)&@^&>md6?aThdM5e5)JVHg2u)AAZY6J#< z?-dShV`5_sN>$_B;G(;5xC;@&X~Cm0nVYgaAfA7}I<)C-k6AW>=jz)9BUMhU&Tspk z#R)2=Z??DrFGzql(sG;8Gxm;`ma1-Kb{T+0WNTd6 zfO3VOKi&f%Vw@Y&4-XHIZw8-$pv-l}Sm^e~KtMo1Eva^j6_Y{GQ&=*bVx{i!36Y>3 zgM#oCdXwj}?L8a@Y3&HLjO$4#>;YhHFv$5F78@?$9bh9^tWT2h9*<&8P3m|@!3FM! zQoV#Qz{^OB8^jTqdjmUDUTTxG){SkR7x3Nyq$gJSbl*Y);+}mio!u+YZulYJEmezt#XT%xjD{VfDab>wrI6$AeJ;{c$vOQ+B4;5T&OYiv>S)kU^c={FsAFzZw}Nnb2h^uB*TSOXLnfWsWa zxuRH_Kbb)E-h<*|4bvvM+ui;GoRpP^LmDqSuvSP3OAxtE( z3qNoAF}KfIqDqO^NpLoksMu<{2EY|PtbguB~OA#b8l#_-fA=br=^@GkUt? zD!-$$^8&(1rGNw9X~ z1x-4pW84P_7!nlp^;>zN_PG{(QGm@Yap`VVDx&1uRW}}tZ%MK?URhpl9Yft;`R*-% z)qL;bDUqkUYjj^Ty8%n^rt-k6=j=ZtE85C~u5Q0h) zP{aL`NB~;_iy72D$!R4dwHh?J`hzeVE*|n392BB<9LDkR^h~H_h@ctfV>+rRmlSLu z!O}}f31#Lc`3YzV!wc=uEBu;Bo_>68h=n8mJ$P36t##U1=djlotK-?>|7_(xfUfta zwgET+Tp&zh7WMJtqgLURd#b51SvXeG`{XGQuEWkiF1zf9tnZ983b{PaA0%RTsxU|f zA#ckh#ZYhC4ZR9$Yy_~DfLX0;$GTp6 zhfDajijtTZaF z-@_{en&XE3#3Xz5ZP+Xe$NLp&ZkS#+e-)w>i73uHmA{Wcm>p_*7rtpjz)H6hyx7nB@F62cFK{rY0;z zmy;pPpS~KcUGLD?OeSCaN}3Cjq;w~OfIzkHy(lDv+(o-rWZ)^@zMb9(qKJqHh`{lt z=wI5u_PzZucGnTcQ&OApci#E?zmxt7UM#dnDG0Uw!8VYZjq2!96#kz2>(`6c*0wkR z^X?AoHsb6~3;}=tz!65*)+$`M!{bcf>_pel)<~YR_7n^NS0F1|mk(r5Bnb29TIkq(}0BB`>nuOgidYNfULs?uJK1C8IR&6gRds`=XE(=4NLT0MZiZ0bK(<>wXtVC2LR6 zg!0y!q_VQoa;73)tIlb(R?gyHxhaS*kLN76@=!B1eOgoF3JN$DN};ZpOA!|7*Lu7m|PXP?NLAmK3?A=&E?CW*? z`tUnC*8X%;(cA(G7774RfJ!10_G&GK%F8n;=SO$!E>tF}=(r~HAJqCa2_cbFjh?6n zjkgqATZjj585y&xswRdT^YVHWt?SPBTvj7cpP`|>W~UF?-Zt0#DXe8!smgE`*7P-B z`E+YEarU6PzqD_5HpHhHvOCp%E1nF_23c3E+vAfE1jAs2Cxm_ZFnC#6t;RB7(0pTK z3B9j&Qo&dZ#`8GqZzuTi2)Fe5j(2eWzX)1RD<+WRbw6MA)zzaH*c0gsWd_6n12w7N zZXW6zkcK@D3WBx(QJWm@>EUsBa$*1ITXl>r9zH&(z4WH@va+Ih^{NHPf^_sdG?Ji< z=aZHe5T&p^ug~v|H0QX{fJZ>^@bGLd{=F7Y0jSj#m*tqAo_?=o!#f{WXuZ+DG3$E5 z>K<3K5;l9e1HWs{42l|bnNtwHeIygZU@+6^IOtBo?!;l>%{8$fi%H1`9JK64{uYKw zp3~+~%CDgpvNX6~zdDASnGI82|Kv;x1zHy1MD772S7Kp{8-RX@1J7pgegEmxi^1EY zi#cy(!_5gLv-a=X5KYYJm|!KLrb2PeM=La#uRu*gOYLbzTi+d9bma0619y7HoF*z- zswSa+x1SmgU+8NcwzUovTsCV0zQ?nh*!C7GfikKy{~zCRfV4k4C?KW#{w1=h0f8Bw zKGVi?H{Wknw$*^+79Dn)9_SzvZC>Z_=z|+>iDvt^kBZot+HL_KpT7G2BKNbnoBt<_ z2cJJOTUN~pe+#kTqqAJRaHUA0<+oqojej;>&uc`(V40emB%fo@H>Ef=J-xKD(m#|Y zIz^0=(7-GcAd&IGAph0!=SP#paNW5})~T79<)x*T&C-l1{94jN+*Vdr5KwswQm?i{?1Sa4Enh!BlnjZ6*wXQ>>GRDi^Ey*46RHGKt$DoH$lG z!a<+X#GVN+xYaEl#t|knq0!RP{+6c3j-?6=3eubNFP)m5UD@31`kfm^%u+%L$&hI3 z%ScqIs3b|dJFIg(o8Jm*$`b*NOBxfqu35rXb4sgj%ln;O_R`;7O%;u!{9cJ4O4_-SYzTES>SwS1Dt(42E17>OOg(7Zc;)`8wI+nt&;_(StpoK%z9rt@5o1kro527VHsS?%KRi{$J6?VC%HKtL zRV_;-Fg^1A$qI2H<)qBq`#u4QDiL8Jb(C$ssiGfcYmv;AvQPE47}%=S-WA$7pNQmE zu+65#q=-nHk0_Z(zYw|cWE!xluoy<+=MU)Q6A~1R9y;vDS?~v@)U+x8tUg>bpIBY% zvN~nLLBi{_P0OS$bc?4B-sr8f;be_ple1S0jQ;|!_L|Z>;zc@7X?6RveJgFy3ofRv&OXkL3oJDELZDzfBYYfiz!^Yz_H(_ zWNQL*^?x+-bNgIzmw63sTlT`2hQWg>)Uae{%gZXVixbDJgS3k`z?lSvdQY&1cq}a~ za}_JSQV@a-b3_8^+~zyG;YQXvSUtb#Tk6&FyGFL{eitiN3T?dhiWtup5ikkv_naGH z9~mM&#nO3aI`R)b*F*x<_;ALC1sPviDmWr~cY@&|yDy|8Mr zwZ_KTIm7MD+<2CQ1Oqx#Me|OP;7~Okr!nhf-rB@E5#dxf2P4dufAzOKXX+6*1UiB8 zc{EZ=MuG9T6rWzX8DO7-Mnp;ir^VvVhD8;8em~}UfkU^%o`jW46lI?&@gy#TTB$D>t_YmRKdU>aM;C|{hpEW8kaWIWMVfS zQhy{txjmMfyu)g>Z{=|(etx056P~y=*~BcJRo1+7X#z;*cS^J?+X>`l>z+sqYvcwa z!3|4za@{wzGD~cup4Hpl{R@pI`-6Q!^(wbee=976 zriGmypX*N~#e;b=zWu>jVR=ReI*@R_abeG@tLrUvyW7;4g5U(#mbc>VSx3q{=Bbg7 zpQ$jzdrJFFIqVpZFFK2qo*wO%ZY~-d6oR9t@ZD7PEU$uEKCl2l2R};7E>D%NJbF~Y zy{GgR&x7*>jY44PSbZ`DotWcy-gq9H%_r}d?y452aSEx!d}m`r($bRb!5)9P$%Xb0O!t6< zO7oGXgZFMu2Y$)Pflg%rw)+Uv3g8BopCm`$P;ebQT+wZg&wt3gg-Nd$L~xQvAgwk z3G}Mxe)0GBAK6n#>+0?fQc>qH0XWIn=%h~B%gf7yb%mYFdQNtBf_$o44_DCrtm{k= z3WXA1@AHF-sFZUk|MB!GGZDWP2l%yX6#y;`_1D|<#ve*$CI^6vF>)eJuG*Vf+*@h? z$M;~UMv2?Oja)PUgEc?j>(&i@SJ;1l-c7O0P|8iv(!{Hi4)3|K$JyhcXF(2IW1&YY zw8Kr_I!eipZ#5wt=3~FkEVzft#7XrHR*nTGP1-3H#JYO7a0z)_PwTfTwTn#G7G#S_VBU5OO(O-4zVMnPr%pLqCT)i;cF;Q98RTvR#zB!=vljMv7 z=+yUrg`>ufn(j+MbKp`2C=hrF&L0J>&_>0_KQly%%+;HrHKp9)`+&6gTigiT1WO zKalqRKqpDCKsfRV(nUY_M&iuXxreuh^lfk(85@`BU(ubq3FgS(wthz=e5aEpU^0-j z7KM~YEpso}-Q5ig56}6sCHeo4qT&Ns&^K z5{6D`X@>3wNpa}zp}X@u&pK6S^}~tpQ}^|`uKO7gC1AAY8&=** zAN;JEo8c4_TF3XkY>jwrs(QAR#{s{etv~AUBpVdv=O>h(HS_3MSwl2fG`Zd_R6X?) zgQ$UT3i4~DoED5=U-|a!AqZ;rC)n3FuWMNE*N5I4C#(sss@gnw@L>E`=gk%4K&hr2 zJ&lkn=Tefmdai2R=g+gNxWAL(<^y{k>QTA+;-f!J^R%j+nLeea8li|_6} zX^f_59wlg>j+dnbMHz6nkU5aA`x<4;x95T{&FKE5fDsV^a4coJfckn9Igw+|lk zb4JRqEs8A@{QN|6bH`g3&fa!@qI)J*Q}FHBcf{ttFdulo&1rn;%F&wrb|ly8pG#)yoezbBg2_mKK` z*wF@WtotM<7iV90-J7F(ps^(sbOk}TXXsg2u<{y*683j*I6rD$te!7H^HERuG#3X6Dgd%GWlTIt>DZ<^jy z2m|<(r#9!rXzDp{d_ms&3G+H{Ep+Rb%0TEGuIt^P)RN)fU;_h39sc>DJMHX&E0|JO zOp$KT)%*P^0}U?SV0Ez%?1RM&B0ub#NsmFQXl2aa+B!Hp<{2+9udrLVS6=jY`YWd> z4+`*+>FDVZOsVprbC_p_oj$GL+4f#sle=zD1r#K)f+^85-acN|m}*T(OstH^g7sFw zm^C*?tMpYU`uSXuGl!>3Ob2)GvX zr&duQnC`>TtYgKFte{%j9LJYVA~pn@pi&*x5R~d z-MQ1|tjhs0=+l{FrHc<(r@M=msA7?C)-wrIPmW^OqF^n>^1s8Q6mm5hO~!4wvSVw!b`Qkw zga^5e7Q7A1%VPn2!}utkknY(txZ5Becni3BU#2lKbaRZfEq~mwgx2kuSisJJBR0w; zZ#l!dEOro`gkHW5AsaqBZB@n;KFMgK6TMpE>QE->2~84r-Xv%O9Rd3yX4iH15=ERs z!A6XSSCh2D8h_CGNeUoeklaLljnUDV@TAE&0c-T0=;tq%pii?w5akUxdAzl`sX;cT zZ75~ zxjiJ$Rq;*U0rjQBiF2BGWW3qrL+LwO_OC9}Z3!f_MT0#wbMt~RrUfs9@UwBklOrys zu+5)oS!vm~oi_!1h<+?_SxbN!VChZwa@a~EP6TN^QNFfIpl3S1K4KMb+&o-1Fe{Z_ z!n8Zq6Ju8laZFu1io@z$iqMh}4tj1EsweTDg7~SD3S9RNe3I-k&Y);91};Na_F#{o zFYbazCX|An(L#uKWTfue-M&8=W_}-u1P5}|F01u%-JgR-gJ#5Jd6RL`rEBY<%hVOg z16v8!zHY|wz@v4lSWQeC?_xPSSJup%#SMbrzm0HACgp?jPn9n4&`NvCZjcC*#LhRGj; zZCmA~B7if#|AB29z`p_4S54IUbV$= zIMr2*SHvR!;TIPjE7cFasYuuWo8r41MFA4JEv<;&~n~p^BQ-A zwhRo!7s>pgMpz;3(*BzJsBXJH%}> z^bvbYaDHW_yS6n*CEe^%l-#{+pEDThrGfQ3R_8*SoScldDOMGRljZ%&?Nr%$XOFDj z{iF#H3hU8AxW)W?rDXmiI=1Y;--Cl_criK?vDfn=J69tQG$u9xP`?j3i23~aG$bmD zKusW|AQ0FhnU-({aC~(%6gwEWpV6;)3t^P&hQNcl4Es+L_m_JBHKuqQ9SSsGT>U7Z z=WBy-A<%|pgy>+c)2_sJYKRL62?@zn0H>3KL$P_!O2MkLV3yA{lgmbZ7dTKJOjIPr zBs8{RP%GXu8fSdJCnV%2Nt23^FzEx0MBe8QPE@?yI|nR}O-+TQ!zQjE*o^U=rJAR)zg z?ktt`Kz@F~xjCbOX1}1*g#%Kw-q^EyiV3{8n);?gh>99e!Y1zempR&MX(`EN|C9K} zea_LMw-|FX(;g3fpmgYdw>~!5pL8}i-?Fy0mIF4!j%a<3W&txAD6QU&)$V{R6MlvH zPX69FI$RyTQ*SU(Re}!$+uY$A*YneNRA5+)I%2p|x_Ah|oN9x&{`i!jnr1ZHkV3*` z$9+UTw73nrIya}u&4{LerFW}}?89)`*2J(ix8)xad+HZzMdK+ahK;V%1mJ(yy2gFrgLKFGD^&aB~W8GSe_7j?g zp4FRPP~&1~F-Ge9_ODr2ge)TGf-Cc$d`U{3AHDt1-sGx-5yr#A+uL;*7%T+!0T)<7 zq10l{K?u>OA|if(2LY?2??C_kcKh7&R{Q69T3JO|sWkN;FU57;bye8DpeE>DBj4sn zPn?l#x@B(n#Pq~Q3Z}!2Z{}NNsyslYQ1>VCL1ag|I-|v(3=Wk>8OOs_j?K-j*NTei zV7^|SM1~cs>Zs&tDk4DYV2?uBAw0&w`^(LtN5bde$7MJcVPRo>R~Ojb<%(7s$C>-P zyQ#7WhM_zyJ{b#nIR(I7A^|kpH8#Qpxqr|)aY7=x@V4dT>J@+?7DH7u2(ha~p+V?% zGYe|N1be6ytI}!fU`kj-Z0u)Xj2VtKP+R~LmsH?AcMuL`n#)FX-9+g<3>*rRp{^1W zQ`3m3*tVrFJ5HdBG@jS?lWLj?SQut5p69=iz%7xUu6e;}(bcrsj*;T2p3eP?pV(a~`wDb0^b zEsI+|<}%Fd-Tci|J05DPIZ4hhYP2w(Q2xdF#hygt|Jd^(e}VkJjr#vjHtYY5V{lYP z{sh=ATo?hLqf|w+ng+n1dU$+)Y`1o#|9hSP{7JBS`d-QUDC1U+kruwsB&J)A zXK^_M?TKWHT;evH3TecvtQ2}g__cD!VIHDSWEN0RQ~4rk zC-tnCe{YXGElZ#UZbi=%nc7ZlTeL#CdwvvK0OYsSUl<4RqItmZS*L2nj`x7A6eGo^ z^oF@0M>m&OgJrb2dFJvCBil7wqXBt_%47ZZ(tR1Xgb9X{stethI#6_&QRD z@i?3qCN54CFM70@z~hND?$^76)C>TZJM9*yZ^fchyoLHsBKtf>g@?Vl9qj0xX8em^ z0#}P-Gs)r%Vm|e@USX1x6H!uH+M;Xg7gUQ=V6fdXOdiAUY=h%ozs*#kd7lQeQ#>uT zzN4lIqDl7XD2A;))72L3N2UEU7A7W{>SHo%S5phcJVhQkAu9o17Ii)0o|@eiz5>T% zm$}XUshj(S%VXc*Ofn|rxwu3fKLX{pwkXzq|Ey#xoBsCI`-jT#eI< zm{YCw?cv&IhF(|8jjENn(HRjTHBH0mXv^q0yjZr#EQRKr(K|+_*4E6~o^Iq3V(P_t zI&$yKyMx3gWm9@)5HY z622~@7FwZ|4c5UO9JR=uww3$e0_%2gv|<5uRE}=HTS?43+JTtvJUkzYlgugtPj&B@ zSv*0j=3QRNqGy{dqQMGg*tV$Ld8MJRPXVH@>5?x!;9Itnc7kIhC#-9x`X zt2Wx)%613RP{CYTn^DhaN}=)EONAN6NPt;ki<2Q6*?|WB^Z2SPXwX{Nk#v)gGR18$S{4I3%3Q* z!F&Qk&B4{1`(y`}0-g$IM!s1lMRx9OaEY#zP4& zU{b{)dA7!wJ|2;emhNPWJlCoCJmF%Ma6CRa$z^w`4cwb?@`~UW=ANNJK|z*2|J9G^ zB~GjxsVCnUDPo{=7J{$zwsm$24Y=M{NsKBjWmXpmSXUuIoSqsj&WmTNr01N@c$kUU z`4k`|VJFBZFX7%iYsa!q`9tH>7dkkHi8HPOv&NV|fpxH?qu`LYCn16uMfXegZ{ru9 z_F~ej;Z!6qyIo4m8nw$JuYW0`rV}6`e#HD@MGv}rOj%|-+QFUwQ=QpzxQ4K~nMR-+ zFzJT)Gy1)~6L4oEd23Kes#j1&-QLOu(1#$Z0*bFkw{o;|pUTS0a@&kGsoU3|y9hY% zIz$XK{tGL?c}xhLCz01)7=Pd%)PU*&HH_06TBM%)6y-X^8TK*ndq}z(kpVuNB;>L< zQ%@p#vk%wr;jta@2V=dzOl&yVU@P;fa%XNshimtsCmDAdxR7;TbtK%ol!DOpK&2w% z)nb}N{+N9n$rF4Ag)HMB zHb7sVq#8FFCxzigcU0qI$-=C7&A61mYqL}bZm}gEcttGh(bESFhMl6{oKz(EwNxW2Il<*Cpo$>NF-;Zr* zXvoRM6}NxQ9ZGRcnyD&_WTT7|v1S82Eh96N1G-%a#tqG!*c`D3I`U`)1V|T+MTyLp zziMP;Wu=X7oNZ6;KgWqB(Auwa_B<}6#F3cv%n?XbVZG&McNq|y?0ezZ|y zvv#u!N;-opcfd~_mUah79-hq(3-f_{9XfzN2r{K4;8B8`QhG0Uh>d=e1JP)_Rw@Nv zDUNb+dqrCH{jnAN@UXFRe*?^G#3(5#DQKGqbg}xZuFC1_X|H9)-VlQt@kDcBUy@KD?~nrNbNZ=avwL{VjGB))Pz7n z1#iOBl>3gZZ6ByG^*$K;Se``2QvUrqSTJ^_>Q=_|fKlJ7NOc8^WQuMV9A841i3opc z`&k=gz4zU^n7+;L-S(Buhm*Y{ls$V#%mGR%?MWVuY7Md#~9&k;uK#W!8p&NcbB zH*jVe`~Yd1-`so!kBR5BXbRWwY47NWh>B9k{>WC1&R(F|Q)1j{Ig!s~+5?-Psy^Va z!cY4~Y6W6=-E6KtIcj+Uojw&NG#~;ZmSKiCFc&fm9Z?Cx1YiWDxs7p3Xm! zvZ%qw!3}4#ovk^eFgerff)^U4bXv4`dv@}X zD7!Xc=K_l+SvZ)K`5r%X?=F(I6zMQFHuk4vYlAxnL1Ar8PC==UDoEn_EO8jwNe(Za z>HIxP1_ORxtn}%A|zl159R12L6&d!H}?`WmoTbjm08~W zH+UIXX>)V93`$gCz}Wy1x@3`BE|2X|f@2j^V8&;A`?;$Z89V|P_<^@gSsZJ)n(3IF zBo`7A0yt9URh#`(mG_;l?Gk54NAa{bxCCWM$@MjA_3k`iQ>45-p;qh4>bf=Y$YkJg zSw)3(fu>r8jZV#pTi+oS0QtH4nVfHHT%|Kr2UEqp4D7BgG#rA7ii$0M;Q$*lwdYS7 zVr_73Nz`j$+(A6y;HFd}(|z;z@u*-rC+2l)p-PHOrEtxMb2fPlbR_8nrd~Gg!mrYt zIdq51m@5k5nqZ6x1$9m4pX&Ki2Mk-5BgH(KmpymFV?9&Ajlhsa&1;q)*Xvesu6WY8VZ#JE`V?H+BC-o1yhFgMpUbVAMQJw`>)3!U|mT$8uOYduroxlbniY~cBY@P)atD!V)KTJoyot)C zoYxH|0AUbYe(>M$W|vS2?V5C)QufPb^9qwND*n-&=3mWzzCQwZ{RX=RF~X$DpCSg{ zv#*FKroZA*mQx=vVDZldA#prirVq#MWxYg_6q{~w*_0=FMsRS|$T^u(G_xA?Yfh_yDm2QbeU*nSAak!Q- zTlYnjD{}D;dN?drJEz9gM7ZlHLdzx5pugO+X{lpq!yurQWuOE)Bg;6q(}4JefkL?2 zPlDqXkF{{h;`Hl0mR)Spgjb{&1lGEfiSSA>vE9IlDft)v z(ob*MSQM48?am*dr$;2kP3Q;793Yyi3Ck%G2v2uEfY4%Glq9Dx^DB-ge?xvx|FeEJ zb^oUEo#R5(mbgqXRJ7~q5l70`A1V_n&4mot6@cO>Pf3tl4T}l6eiT|1I`}ZXOx+ULBfKko&yI5#msdUj60g=rV5!8!C z^R@ejUqZScmZ_ZPT-fp2kvp5Ah)guw22-WNeHyBi6xet1P}isu<_Q}Zx%(Y?)jwZG z$oE;1f1e=~XjG}6V!SNzyQi#lChbIP{4{Nm#wyKdzo|wi2S>5hwTQ-huTNk zYv0EoS4y-b;1YFrH_xmY%RjKgK31xm$fr%-7Imw-Fgjpwx+?$H*?MJHn5=)g6_fp2 z733X-jT5)_SW~kV(^ThgCaj~#`EiSgSYPvdk$Fj@qg7zuTOMLQHn(yTsqh>1aZvFf z7{kWE5fW6im4hgdF>!>gRO+zU?v^tB${dQ6;%5P0>%B@azN%`ZHgOd$xpjgBOj%j^ zDn^gaANMA4+m-hoc9^au_mE)?LCi$?t-Nns~rtu^#r){l^!KP{$2rstW)=_u3Q(Wnks=vk@!0fSdSt0=wayDsPvo6q- z2X?x|C&{rYM=o^9YbU8|eVG&kdt5@7+NRRCwJ!6Uad7=w*ZMauVpymcB92(RbS0a} zHSAmx8pQ6tMDp~h_l4Fv@xts%>YLvN#&31Afv*-mH5b<)bpPwUbCjI0b%EwE}L8l`#HZ)=6! z{->VK`mO1``X(_?3mNm67VV8_T}anVkYpC&rWH|@dzo}C#QAKO9!R-mC7aMDi>@nP zTDgGln65kmDY{hyI$(g_Ir7a7TVYjBO3?>4WCZ0c!$tM9WEnHig$x-j5n(WbB5RT2U`DTA$vuU zlr-Ys$hh#VH)QG`g^=^T-}@7QO4zk#l{;_$`BkQzKFAJiZ@`~v_)W;crF0y5lRcBc zMGe>A!N0Vbs7nTA3339R=D92Y9al;DZ$y~0_x74QTK(kGrB(LoPl`*+``}7|0iKOa z<{K*3c>S3om?))M6{z2WG;|WEqe=sK-CVRr)tu%SzvJY>a=@E&HL$?a$+AO-H5CEKt)w#?$y2yv$hyz_}CsCv%fNF zpZbPz_wdjNa1NUbj?WbZLhR6fsORY*NQ>pz2{r&TBHysqH=1<Ez_-C=)oP zhpRIQ;GE3RJ+gZE!Te1qWE^>U4~NR)LxHt2$Vey@=<<;AoQt5@{EMX9xRaA~D4BR> zH_Yv#z#EnGGq9R@C{!!cSe&Jhq%gFj;=DZ+0%qZ#8ruzhzZ^imqF@@nrcppkZ>5X9 z-eA*y8GLoY#Ak9J?LoHEvQBnT_p=i@!rzW^_`29dJt;z$3-$~unNpVP&bhDR+#9N? z;?0x5(bcj4Nsq>33R90w%+c}0(WS3p`t_*YThx_uF>D4B*@zPNVX{96M6Thi=a^=$ z`k!hLx*CX=2k}CXG3iaZV0}c++ce%T(CMN6FNAeX*A@?1$m%0^PfsskDj|2%Xupwj zfuPyzypaNa(7!I^x(OUS$Mq#9umz-RY{;~-WrHRQFxZ$PMLR_xcYw9>qRogsJU+e~ zNLz4WuU8>bKkfZJGf#m?V18}S)ORM1&;F)K6#)SSAX0vxY+Y|+VRcSS#OFV!jEjql zVt$JUWO_nHL7bTVEszU%4bpa#)w6L&Z`NG|_20e)cl19I6pW|w3l!DFC0vk&uo*?E z1F_+;txv(C)$igXtxmwFRn-5NQS53J(o=jWvF;c2Vy+(ipsOaRY%Lcy5RY`XF>t}8 zNu~-;SkzpdJLdD4LK7CAs)EqteS|D`4`#?3pC9d5PwW8Il$Ve<&H;1-n704OQ}rHK z*H%YFSu~vY^h{!5V0cJK`1P$TDzct`)dptGsbl2oSWH?b5prrawiv8IRVgx{;6uWhW)RWlYV2`1UMc;?{O&R_7eq6=${c+Z~NyE ztlYI}notUX>B`>mm@0Fy{C37b4YhWe+^ zqflgjGV1nMMwncD{ZQ0eidPFNqY@mlJm>3IC-y z@ol2we3`;HCm;tu5No~NKt9id<|gTM8ZIvUkAE`dBVaHo5MEb|=SBHL4=LC|#`P|m z_rr&r?z z^er1J{x?GQcz!^}+vS=@G9@0V2vvIzznS|vQ<11+5nLP579UY7TNimj{hidkdigsb zX$ygJz7nj0jB*YjsjNMzZER~B0*B+H@*LZI@Kej1TWtDO_g}vG?RtK6fx}}p(geI$ zfKcH;_kfE{eK%h&FD!f-w4meX_x}>vxd?9D06A8WVFwZFaweOs%*D=uE9XE$h)Brds0B~`^#mv z%r@QyO^4|!i-7?RN+=Dhm12MjLZ(Z*=+;fN*Z{!x|F=)g95d*@hPJYDfpjRC-ei*sQNsSJ%1OCj9hp_Xr zGY+8pQJXZ#qE@Ec;S&(_f*UFnOtCk`J_p0O)UuVpReHgzlY`)zvG1p+o1NCSIG8K7 zJB{zwFR0mlW^T`r3i<FVL1*mytC|q?eD%j&RGj)XCZq__#ILor z%F;d*lWA#^CX~RoiSHiK${sUpZ9a| zW?zePolUIC&bpnII}WRJ?|^yJ(IRyK90r@|eOf?Gxa$WhXZyhj59aGsVgf1!o%K{6 zwt9g!esBp+l^ze;po5v5$5V|yDU{7ZXH1@AU}Ug#Da(gesH^Ec4x6f_A1Pr|Db%+I z2NO(O=N#YwBQa`3y&G=x#VR=}2Xx7tO^=@KHDU}}I|cp{3+`rgQx`{#+7Mjs=6B|_ zURCXfWxW;8Hm1;Qy6>*tv^tb*sip{P`g6cl=7kHn)r*W27U~-| zP`s6sOWT-?J6p|tfEE|%+@C@5BNWk79W4f@{l4*R+ks)ev|eQ z$Wzw+DTG}h=&?$#$Pi17FP}K9Q%yHWStOzkaFn#~+DlaZxG3wfS6L9gaUhr8-+sF! z0HwTilhv6014_HnP@+fkf0a{@3kJMkHF*<}XkiT>3fWm-$Fs#zI81j4@U zQx}kjDmMCqvaywAp+e*n*7;bTr*-r5msL}N|Gr%2)cgE~fGm>|RQ(I~dbe<3VQU@|1)RPtt^aLSp--B00670$sKC|fKKt; zS7yF=PIf-qKj#J*Wa1bK0DyY_U35qp5EuYplQ6xbZyWV~eHIoZxRl?w6=*pU?^l|O zgY|c1%MuWAW^JA+oy&FTe5-$0fs7IVT+icvIbiQ6gV~VyY6nKlvZU5sVr+QHGTot> zUpNPEc@)Q3kfmZ=abAzI`P(K%{;(>`r zI2mV0>mut4E0b~!`Nv(N$8>tBhSD&1zF6y)f2wZ8@@F=?vv-CgflMup)klOLLx^?J zy^Ji{(<$l|(Fo+z*w2l&dQx4hH^ik??pFvyqN0)3$R58MY*dAjNlg>oC+VuI&oxtn zDQ0`|74l#v?(kFUFfLOnHY%R;c?JSXRC9sfUp89ltIUP^or+1zi*RS+!^ zj4P2!3*Mw$1*xt5Ck8H&lIHz9pf_NU--__~-Bl?b@?~XMQnvj(rosi)z>95&zHD<_>YG7J5H&c z83g6JpiyJ@6Y$PtD?K8)<%ynIxTygr-;M;pWkXl>XO-tz&rKgYY}S|TRJXv=+IGqQ zuNb!ek3 z_5d%>h-WgK*2S%hvU#ZZj7vO@9mti|S zQ1qh&vLF)h#mDQOn<|s3KvSAbnZx*W+{=;30Ks6b6ddgGo3}%E50JIV7w8iNvV@98 zR5p`TYUr^f+#OmrX+ft|(&zh_lloc=ov#e}G>ovKw=ws%#_P>r&^iTKU3d$7M)G!OBJ!fIdJ^khaS52lV1 z27EQ^KCW1m%D1%`-|BuJ7$}6?YpWWW==NVNFf5s@U!G*5P&7x3^N6B+ESxN?r%T7d z98gi(h4+NB+h_BUO!3c>1~iq5r|wazDCQ3A+q(-I^~i#J1p}$n=+kboijk?w+m`Fk zb1K^O9wxbdka0_XG<-d1{*tzw)}Q-lVj&x`4EQ(7ANJaT^0aVPIc}EiKV~*E_^C!3DLMXonCyz0y-TFbkCJ5q^5Ij)R zj!6{Svd-(YQrwQZ)*-z4r8xm?bm4XIbO?eI`gTVCog(m~HRjc)!-q$Prm&=VbfL`e zRi@j@#Vn-Um@a+yFm#kJ6t@Jyd&R9v0``YD%HXrzO#*5j1!sy6+QDQLY0(&LB) z4}hlH@#Vhk?l;Ovsw=&zZ+iddUo^5 z__DRVwFWeIM#ouwisu0OUPlGmcP9C7vf)!N30AxZ%$sMAb1;pX+Rx<2a8mX62MQ34KWSGxKH~-1y!@xtv8^ z4+%&|^u@#}AixWL@ibFH^YoC5`y%)gTCXG0hi%rmKp$bpHxQUrgSVmG=*^|g!DrLR zJ>;;7V;R)MNKec6M+5q=^|+{iTK8u%KSaEl*KJD+l1eHLTS5kwDWU3OH2AZt=*Gc$ zY-4dD`@UK0)2-}8vUo@<0+XXIpadPs3cTl!>I%7%$q zo{fav%R;V$wQ^g55W$0}mH-P0c3Jngv)RVk6P>5sUsDaXj=1`?JC5^*!U7W{P=)5! zFY9-JjYgMX?lkuKBuO73yJWg$f30VseZtJKM?q?V^tat(81x+^H#`fkfggEQA4ZBh zW*GQ)qIV;Agq^ay=RH$T0s!1jmu40)IX z&wtyeSo)nMZJERlx=`mvQ*KQA3uI~^%sq26r4~$i&|@1m@9o&wdsMYN|Dr&AL4LlT z+S1A}gL^ysg0|!KYbfs;-J~s7dFYB95ME|GFd`J^9-|!qxjR_5I?%wG*iqO3AfRKp zo(No{5?EFI(Fcbro;)5pt+OdaI$3$y|2XCOe7RDhv}aLeU*c(h5En6#Snx)*EZde7 z^aS=$^X2Ha=T+!BRr~IbS)mh0#DrJPvF~}0d+2<`-g!D*l3x1r8u$rS>!88BTi&aL zA#{Qvr&73QiU>%(=k)yL?;m;Y-g%67A6 z$|*&vs`$wbwuj4H8LveYf ztkA*ac0=d5`b9Nv!Jx>WB;r%eSOL+%K=EJV7g$<%D~CkNcPTZF&nkn(YD$Ff$P16p ztzEip|HI_j;L+bXoX#{HO$mR@=q?KBu20$70bSnn8uQ!1=GH&8lIkHc5YT@PRo1lX z^0!oq#Lz9eY{q$euNS2{-n~*;p|cMe3iEO_HMCji*6-Es*zr~?kwF)nc2hs}7iNqh zEc*@U3O?p!RR2Sgj3uA-^EXHEiG-+`Cxb_7Bgq{B8&UV)kC z6&r9M7XCE(5ZEG&nEWURTGbRfy(fF=YG-H&Sm&#PXU=z)?i~U}?^r&biAXO(+4xj@ z`kxm|kuU4l$|*6!LJD(K?Z>t2%;$~Wb&HeRPYj`X^CfP!1vr#?<7Z|$WiX&?qUlw^ z%-h?d?zmi!8`UlH5rl9ptpgJ4S&Dt7ZQhD75PofuKgj} zlBluf)vRC!2vP+Y|A)0nK({oKx|&m&_!K@-`vM^Am^q%7qApH5pt-W%a6*b zrBCaA@N46gGGe}5+mVelH1}7|wb#0vk~Y&NF!Kp&EZ5acw8zjx?p|Us?R?MweA=}=ya)d7GLMggETAaNI{H=};IgJzgtL5^ zMPUb?pt67h+>}-I$#y8QhSldN|5>HZ&tNJk-$#4fQnVIp3b%uy`jNgnXYZ0V*jeUv zLN!J?(G2B{+*X_WnGfE+vemqqt*hTVCV4TxcDTGFVd`&6ZKV|=d{N;^+&cD(hhscpK@?*{(82~(HcZg1eN59k9Q=%83TkUbPLTwTZx>uHvk)eK4IhbL-?h04{f<}#GBJ3`#@;+M7PrmC z7#2ta=XBfnr*Ldmc=I~9qb!qWZ>YUZD{NC9s@~$q)9=lX6NI0DX-39NSs!(dzCBQN zuJ<(xpl8L9X$@yq@UF<=R2&zLjnLbCi>nRql*mi%XXg+I-+sdB0<0a$U*SwuQrswH zl3-3&$QOB!sWE^i{}(&iy;}eP literal 0 HcmV?d00001 diff --git a/public/uk/index.gmi b/public/uk/index.gmi index 0f5323b..6bb3424 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -16,6 +16,8 @@ ### Нотатки +=> flarum-v2-fof-redis-extension-setup.gmi 2026-02-22 Flarum v2: активація драйвера Redis (FoF/redis) +=> flarum-v2-fof-upload-extension-setup.gmi 2026-02-22 Flarum v2: встановлення модуля локальних вкладень для повідомлень FoF/upload => xash3d-fwgs-half-life-flatpak-build-with-radicle.gmi 2026-02-21 Flatpak-збірка рушія Xash3D/FWGS з Half-Life на прикладі Radicle/Git => git-repository-mirroring-with-local-gitmodules-dependencies-in-radicle.gmi 2026-02-19 Дзеркалювання репозиторію Git з локальними залежностями .gitmodules в Radicle => transfer-radicle-repository-to-another-git-upstream-while-preserving-rid.gmi 2026-02-18 Перенесення репозиторію Radicle на інший апстрім Git зі збереженням RID diff --git a/public/uk/install-flarum-v2-on-linux.gmi b/public/uk/install-flarum-v2-on-linux.gmi index bd64492..ef229fe 100644 --- a/public/uk/install-flarum-v2-on-linux.gmi +++ b/public/uk/install-flarum-v2-on-linux.gmi @@ -251,4 +251,6 @@ php flarum assets:publish ### Читайте також -=> my-first-impressions-of-flarum.gmi Мої перші враження від Flarum \ No newline at end of file +=> my-first-impressions-of-flarum.gmi Мої перші враження від Flarum +=> flarum-v2-fof-redis-extension-setup.gmi Flarum v2: активація драйвера Redis (FoF/redis) +=> flarum-v2-fof-upload-extension-setup.gmi Flarum v2: встановлення модуля локальних вкладень для повідомлень FoF/upload \ No newline at end of file diff --git a/public/uk/my-first-impressions-of-flarum.gmi b/public/uk/my-first-impressions-of-flarum.gmi index bb3130e..cc4e6de 100644 --- a/public/uk/my-first-impressions-of-flarum.gmi +++ b/public/uk/my-first-impressions-of-flarum.gmi @@ -31,4 +31,6 @@ ### Дивіться також -=> install-flarum-v2-on-linux.gmi Встановлення і налаштування Flarum v2 (beta) \ No newline at end of file +=> install-flarum-v2-on-linux.gmi Встановлення і налаштування Flarum v2 (beta) +=> flarum-v2-fof-redis-extension-setup.gmi Flarum v2: активація драйвера Redis (FoF/redis) +=> flarum-v2-fof-upload-extension-setup.gmi Flarum v2: встановлення модуля локальних вкладень для повідомлень FoF/upload \ No newline at end of file