From 0e66b525d929ee790ab3ee920d770a597c65d03f Mon Sep 17 00:00:00 2001
From: PriestFaria
-
+
+
{props.userData.company}
-
+
+
{props.userData.role}
-
+
+
{props.userData.company}
-
+
+
{props.userData.role}
{props.contentText}
diff --git a/client/src/components/profileView.component.tsx b/client/src/components/profileView.component.tsx deleted file mode 100644 index 9e2e6fc..0000000 --- a/client/src/components/profileView.component.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { initData } from "@telegram-apps/sdk-react"; -import { useEffect, useCallback } from "react"; -import { getMe } from "../api/api"; -import { handleImageError } from "../utils/imageErrorHandler"; -import InfoBlockComponent from "./infoBlock.component"; -import InfoParagraphComponent from "./infoParagraph.component"; -import useUserStore from "../stores/user.store"; -import DevImage from "../assets/dev.png"; -const ProfileViewComponent = () => { - const { userData, updateUserData } = useUserStore(); - - const fetchProfileData = useCallback(async () => { - const data = await getMe(initData.raw() ?? ""); - if (data) { - updateUserData(data); - } - }, []); - - useEffect(() => { - fetchProfileData(); - }, []); - - return ( - <> -- {userData.firstName} {userData.lastName} -
-- {`@${userData.telegramUsername}`} -
-+ {contentText} +
++ {props.name ?? " название чата "} +
++ {props.usersAmount ?? "0"} участников +
+- {userData.firstName} {userData.lastName} + {userData?.firstName} {userData?.lastName}
- {`@${userData.telegramUsername}`} + {`@${userData?.telegramUsername}`}
- {contentText} -
-- {props.name ?? " название чата "} -
-- {props.usersAmount ?? "0"} участников -
-{props.chatData.name}
- {props.chatData.usersAmount} участников + {props.chatData.membersCount} участников
{props.chatData.name}
- {props.chatData.usersAmount} участников + {props.chatData.membersCount} участников
{props.chatData.name}
- {props.chatData.usersAmount} участников + {props.chatData.membersCount} участников
Расскажите о себе!
-- Участники этого чата хотят узнать о вас больше -
-Расскажите о себе!
+//+// Участники этого чата хотят узнать о вас больше +//
+//- {chatData?.name ?? "название чата"} -
-- Число участников: {chatData?.usersAmount} -
-+// {chatData?.name ?? "название чата"} +//
+//+// Число участников: {chatData?.usersAmount} +//
+//- {props.userData.firstName} {props.userData.lastName} + {props.member.user.firstName} {props.member.user.lastName}
- {props.userData.company}
+ компания
- {props.userData.role}
+ роль
- {props.userData.bio && props.userData.bio.length > 90 + {/* {props.userData.bio && props.userData.bio.length > 90 ? props.userData.bio.slice(0, 90) + "..." - : props.userData.bio} + : props.userData.bio} */} + биография
- {props.userData.firstName} {props.userData.lastName} + {props.member.user.firstName} {props.member.user.lastName}
- {props.userData.company}
+ компания
- {props.userData.role}
+ роль
- {props.userData.bio && props.userData.bio.length > 90 + {/* {props.userData.bio && props.userData.bio.length > 90 ? props.userData.bio.slice(0, 90) + "..." - : props.userData.bio} + : props.userData.bio} */} + биография
- {props.userData.firstName} {props.userData.lastName} -
-- {props.userData.company} -
- -- {props.userData.role} -
-- {props.userData.bio && props.userData.bio.length > 30 - ? props.userData.bio.slice(0, 30) + "..." - : props.userData.bio} -
-{props.chatData.name}
@@ -125,9 +120,7 @@ const ChatPreviewComponent = ( src={props.chatData.avatar || DevImage} onError={handleImageError} className="w-[60px] h-[60px] rounded-full aspect-square object-cover" - onClick={() => { - navigate(`/chat/${props.chatData.id}`); - }} + onClick={props.onClick} />
{props.chatData.name}
diff --git a/client/src/components/requireMembership.component.tsx b/client/src/components/requireMembership.component.tsx
index 7c1c6a3..4edc232 100644
--- a/client/src/components/requireMembership.component.tsx
+++ b/client/src/components/requireMembership.component.tsx
@@ -1,6 +1,5 @@
import { useNavigate } from "react-router-dom";
import useInitDataStore from "../stores/InitData.store";
-import { useEffect } from "react";
import useCommunity from "../hooks/communities/fetchHooks/useСommunity";
interface RequireMembershipComponentProps {
@@ -12,19 +11,17 @@ const RequireMembershipComponent = (props: RequireMembershipComponentProps) => {
const { initDataStartParam } = useInitDataStore();
const chatID = props.chatID ?? initDataStartParam;
- const { isPending, data } = useCommunity(chatID || "");
+ const { isPending, isSuccess } = useCommunity(chatID || "");
- useEffect(() => {
- if (!isPending && data) {
- navigate("/invite", { replace: true });
- }
- }, [isPending, data, navigate]);
-
- if (isPending || !data) {
+ if (isPending) {
return null;
}
- return <>{props.children}>;
+ if (!initDataStartParam || (initDataStartParam === chatID && isSuccess)) {
+ return <>{props.children}>;
+ }
+
+ navigate("/invite");
};
export default RequireMembershipComponent;
diff --git a/client/src/pages/communities.page.tsx b/client/src/pages/communities.page.tsx
index 12224cb..3bad22f 100644
--- a/client/src/pages/communities.page.tsx
+++ b/client/src/pages/communities.page.tsx
@@ -4,7 +4,7 @@ import SearchBarComponent from "../components/searchBar.component";
import { openTelegramLink, popup } from "@telegram-apps/sdk-react";
import ChatPreviewComponent from "../components/chatPreview.component";
import DBBComponent from "../components/disableBackButton.component";
-import { Outlet } from "react-router-dom";
+import { Outlet, useNavigate } from "react-router-dom";
import useChatsSearchStore from "../stores/chatsSearch.store";
import { BOT_USERNAME } from "../shared/constants";
import NotFound from "../assets/notFound.svg";
@@ -21,6 +21,8 @@ const containerVariants = {
},
};
const CommunitiesPage = () => {
+ const navigate = useNavigate();
+
const useLeaveChatMutation = useLeaveCommunity();
const { searchQuery, setSearchQuery, scroll, setScroll } =
@@ -30,6 +32,10 @@ const CommunitiesPage = () => {
const [loadedFirstTime, setLoadedFirstTime] = useState
-
-
{chatData?.map((user, index) => (
@@ -102,7 +110,7 @@ const CommunityPage = () => {
animated
index={index}
key={user.user.id}
- userData={user}
+ member={user}
onAnimationComplete={
index === chatData.length - 1
? () => setLoadedFirstTime(true)
diff --git a/client/src/pages/profile.page.tsx b/client/src/pages/profile.page.tsx
index 98009df..aec1ed9 100644
--- a/client/src/pages/profile.page.tsx
+++ b/client/src/pages/profile.page.tsx
@@ -9,8 +9,8 @@ import ButtonComponent from "../components/button.component";
import TGWhite from "../assets/tg_white.svg";
import useMember from "../hooks/members/fetchHooks/useMember";
const ProfilePage = () => {
- const { chatId, userId } = useParams();
- const { data } = useMember(chatId ?? "", userId ?? "");
+ const { communityId, memberId } = useParams();
+ const { data } = useMember(communityId ?? "", memberId ?? "");
const userData = data?.user;
return (
- компания
+ {textInputs[0]}
- роль
+ {textInputs[1]}
- {/* {props.userData.bio && props.userData.bio.length > 90 - ? props.userData.bio.slice(0, 90) + "..." - : props.userData.bio} */} - биография + {textArea && textArea.length > 90 + ? textArea.slice(0, 90) + "..." + : textArea}
-
- компания
+ {textInputs[0]}
-
- роль
+ {textInputs[1]}
- {/* {props.userData.bio && props.userData.bio.length > 90 - ? props.userData.bio.slice(0, 90) + "..." - : props.userData.bio} */} - биография + {textArea && textArea.length > 90 + ? textArea.slice(0, 90) + "..." + : textArea}
- {textArea && textArea.length > 90 - ? textArea.slice(0, 90) + "..." - : textArea} + {textAreas[0] && textAreas[0].length > 90 + ? textAreas[0].slice(0, 90) + "..." + : textAreas[0]}
- {textArea && textArea.length > 90 - ? textArea.slice(0, 90) + "..." - : textArea} + {textAreas[0] && textAreas[0].length > 90 + ? textAreas[0].slice(0, 90) + "..." + : textAreas[0]}
- {textInputs[0]} + {firstTextInput}
- {textInputs[1]} + {secondTextInput}
- {textAreas[0] && textAreas[0].length > 90 - ? textAreas[0].slice(0, 90) + "..." - : textAreas[0]} + {textArea.length > 90 ? textArea.slice(0, 90) + "..." : textArea}
@@ -94,10 +99,10 @@ const ChatMemberCardComponent = (props: {- {textInputs[0]} + {firstTextInput}
- {textInputs[1]} + {secondTextInput}
- {textAreas[0] && textAreas[0].length > 90 - ? textAreas[0].slice(0, 90) + "..." - : textAreas[0]} + {textArea.length > 90 ? textArea.slice(0, 90) + "..." : textArea}
); } + + return null; }; export default ChatMemberCardComponent; diff --git a/client/src/components/chatPreview.component.tsx b/client/src/components/chatPreview.component.tsx index 41d7376..84ebb22 100644 --- a/client/src/components/chatPreview.component.tsx +++ b/client/src/components/chatPreview.component.tsx @@ -59,7 +59,7 @@ const ChatPreviewComponent = ({props.chatData.name}
- {props.chatData.membersCount} участников + {props.chatData.members.length} участников
+ {userData?.firstName} {userData?.lastName} +
++ {`@${userData?.telegramUsername}`} +
+{props.chatData.name}
- {props.chatData.members.length} участников + {props.chatData.membersCount} участников
Расскажите о себе!
-//-// Участники этого чата хотят узнать о вас больше -//
-//-// {chatData?.name ?? "название чата"} -//
-//-// Число участников: {chatData?.usersAmount} -//
-//Расскажите о себе!
++ Участники этого чата хотят узнать о вас больше +
++ {chatData?.name ?? "название чата"} +
++ Число участников: {chatData?.membersCount} +
++ {userData?.user?.firstName} {userData?.user?.lastName} +
+{`@${userData?.user?.telegramUsername}`}
++ {userData?.user?.firstName} {userData?.user?.lastName} +
+{`@${userData?.user?.telegramUsername}`}
+{`@${userData?.user?.telegramUsername}`}
n(fm zrAMDfSvsPN^!Ew+{KOVB*ySuxhK;Gz|9?c&tANxX4(7H5ie6iQ`pmX&z>X>o)!eX=Z?qN#Q1 zC~}!3hSD+Qcy1QmH=W6#MD?l!5g<1pZy8#LTsn!o_9rs(bbj3JLs{(Il0g(TL~<$I zvS$lUJp4Q=mhuqXLS*%xTleFtt)mzo>PLo1QdYRxLzp=-jQ%Tc#hQhC;mE3y5@a={ zQB;P|7;|sn$kFszOjf!+=tr2+bKDb0!GivsBj?nap=)z<%5yMeWAny-yyuQ<@P&t- zq0b22$F0Dn*C4L$fCwr4uYaNRr4SaIEk~2su tQc!K9moh;!-^$Sc;w}i$d{|K;IUb1F4rebrCeO^ z>l>6>)6hVl3|D;p=o@(T>=a_>W+~cAV#{zA>$3@p&?;h18>3oQHe1FZ?V>jiX7S>& z0xfo7FS=s4_pP)iO@v)(V&&)DwPhGrY#hR=@oB8fCGlNvxe8Zp9>ic@hN8BpkQMie zv5ipam48IEe+$w>o6!vjx*%IVN00dp!t X2QK!Xg!{9o+d}3TOMVwlaD2=YC;}NX_RD{Kf!|%HO3e3)x=yzdk zSx;m&Fn|;-pj;~}QIs|@F^NJ!8S_rO@(@zDd}v8RgVjc0!eVlFIOS$}5_UD(#SvAX zA{^~7VwpM-yN>85vh)B=@aDkp`KaLP+vM)1fTSNc>auxp5}{1Lkd-Jm>GjM}1XY-w z5KAXEf!Mw-hYx<&4fxxCeiDV6EuWEC#F5&jh%j8A+7q_-@8Ilch@O+v#~=B3zkq5e z4s=*Grv<_J+D{2`ZR$VWKGIbq=Yz`C4LXUe7;Dk=_EPa(Z@U{OPMpBRsbk0{ MBSFQPP=$Jf7c3a`F?6!*O2ZoKdP--mm?>mEFJ=m~u7froJ9_1C1%HB2eO zB-`IoO0ifdQN&dgS$m~s#)QxU%j!ajB2?NDddT1Up+0O_*Doryk#!>!+4UnvL{_O( zF+P5lBD sejp`_q#zkva%1B+e9$0FYmCPDbepmXj zRF#R E3dsB1g4SLy;ob>6tl{=z67GLWNSp8U8FJBZ#H@B+8zfnIh7v5^2$9 zglmj%yAEIf){8hZT|k9yV?`*ROG}TRQP1vZJ1NsHVd0(+{wS`x<-3qyBVWZeO<25e z^8(&22-*bfN2ie$V=W6VTE*Fu$1r>5B!;P;6pn;w5vyam=!*0>8znNK)LfO_)!#gf zKl#fE{L6R}*WGjrZn^92bomy1`5*oP4}Se0ktA}8g;m-wr5OM0hjuJZ8GE z;wj6!O{J7nUr#QZLw|oCGMSVR-?@niAuA@XY&IkPL80mlN^|FsU896$rt^vbLM)Vc z2$}6gEe!MialLRlU&7?n3=z%@Z4@e~5$RO9zlzQSt3T^CTfgTaO08B=CPLz2juncg ztJSKc4h^Z9$WG=|Id%EFbRvq4BZC+n7=&Azf?eZoau*v0(nMMZ@YGAk@z{%RqUP45 zH9|(#K${oCxcfVzK)LR=ci;zp@>fu(c7AlcRIF*jV$ngjpw*~~(TQZmSnD;cRxtkN z5gfedJ=lKLUVQZ{U&eFKKBwvvtRkZoE0fIQ>P-XKGSrXBLJ{Bj)}z?F|2iboX=(g@ z@B2Q0cr=2?ANpqurTayaE~pg56ql7~Fyk@ASyx*$S&kCT^Q jrL~VWpha>F2tw(`t%bDnvBjdi*Io`||53 zmTIPjjW!ErcxEFtXs}=k)tY~`q2@D3X|{$lle6fj&BygujUt?gz$VgjEgQ*%g zlW3!_WWXFH+5DLVo6WbaJkMr;gTeaPM}Eq#`(e_$3^E@mcJ< z@fJj=9+9QvJs q@~7Rev+akN()xYRCb9VN0HK*nG$#Fc%$zb{s_x2%dXee=7^&U zehm|oQ|KSaNlh!0${>-5i@0NU_7vS~Kh`274anrgjl4B=*tNQroL4>Rd4DR29izjT zn4ZHlog?=9D{EqtIue=*%Kx4(cKbrtnQ}s53zPXg9)I~5Zac6`ydrC*0()>N8z(Ar z{NO#;;hC3D q9!3rkYk9iDXjlJL6OrZBFfWI38iyB36;KU|mI8JlUC}F0Mn345ToW-J;Ta zTzevt;PW&`#KHuYFVp?1HAQfatpyzN48~JLD8 KN>FIIJ)M6V&N+%6bYEPw%TrXY7B*lw#AzzT+ xSHUF8G;Z?2fC0ojfk2f`6oMZ^+{yjTdq2NP1 !^8G9*jq%r7f0t6Tuq{7EXi{(!kBiQ6B3OWg}xc_bkNVnpU}7 zK`b6ak)mtN&BCgdq!mIrzgt3J+~2ireGczAxL^9bD3OcWu_uvPzY}?M=6Q>>aK3^Q z7NsD%CCuc8+aLMbN&IhD_v8AJL`N*{tu_Js(dlHxxExY~nSkH8iL<9MJw1cp`Q6{+ z>8Ut#_N+uOB1I1A$I>H0L|Im?OK;R1El!v>8Miz)gKU^mRhg_TXmws7DJqgk%27oN zWdY?jJPTo-LQA!IpkS5$mQrB6h$bm=;~t-AR9QlC^D>iXL{g6Y{A-J_>XqWczfioT zW|0}WyG{+7_tr#AP~4+k@s+|*NGTkW=3XHsEnDaJmZu3P=zWe+ iv&Ixi%GnOYeUw9GA2p6B;W-3v*$Lwh9sna`QPqe~Q-Scip}Ru}BPYI+BSL%Hzk7 zDNewOk9M5P1%pX8AdaqiS-T+!2B!zP7i+c1>r$gCMmLZZV=bHBwhE~+5Xo^GX?Av2 zxm!TbEW-JoaNHNgN
a}tiw2_x+pfEL#>Z!wsx;6CWGRPN;(u-9IMbYH7;5v-~ z>%MxHnWW3)#?b>GOp-BLD0!zZDa5d{WMV=EkHm1+=J`}9I*K;w->lMc%I)4b-kaY` zv#zVgw>a8$J!FW?fsT-3aH-~Z^4tuLpPfdL&P$q7djq)y`YCda5Q+3BQ%Gd`ktD)m zKgclMo{C54bCD1~LA&mvN~uL2ZSU&nkF9Yn+Kjkne2k@ ^aHyPqiW@Craq66xcm?&A>!hOGYNry?JboYD{FqBSY@mq>klI8MY&;Vsr~xF)oJ) zYcv(iXOEk4W3>1UXOmP^FRMk6f8p! ykqB}ix$O@8SbbRf_``MGN-yI^_9@kmElV!OTNEM zy>% _2LLDp3YFstc;1NDeN8_z%4iK0Dp3L8g-Z=vx#$O5y=dp zBSR| 9i*7bU(&;K-Cs~=%OgJU*z%HBJEAH^H<8s^H@$5Yd5Wxf72GhG zMZT)t6g2#{JzTB7{>n`l>hGi4Nd;TBZAI L_hWbW#^XX%W=4R)L|Ln;{+~p=u??5S+Z?*bXHA0Mr;tv`hBQGpDJeY@ zS;w3DYlZoDR3WNWBq}>Mc@E*e&A9iY|4y7LT&gL( _~;8=L)h}+K3e9@TD*Py$CP_`t4(H$fplaV(Z8-2KuNDRhh#--1oP*^Uk+o z^VJ71v|%$|fAWrCH6B#!T1M*B#Z+OpnVC%~nu#I_FGYX-Nf!=^Vx>(yr0ZStPRk zi01|nN@UTghzE?Y=>3=pydq~J-LYu43V+(LRq|@Zuy!$Y8(A?fmmaK4z;nVRQjbuf z-6>(``hJn8pPMVvF1bo+H%HQdd$*3_&iy;FY0Fkg4RO)lq=FchwqpwG8k0+feKx^$ zZI{wRGctFnE<14x!^x=BN9>xdBL?+43|V h)363NqZY|@Y~ye^VC+NZW{L+m9u4wGygR&H z;3qF84mtYNC8y{NSYW`5^viVo!_j=((qWvc{I#2hyNawBmrD;;& S;0<0kZ{q7r49Wh$g2CWaaE7}5P$<}#igz>BZEO82vL zB;^p9hOu}1Mnw3rEG3_2yB@O`J38WG;YZXc19gPQPac+@E){*aR(E{ r>-I;QTwTgC!8F>o?E{Mr~c%BU_+Llkm^NK6@2lFUzB4(=)C|F z;P~_`_FplAWYUH`QxWmaKrSowG|P%$^WK~B>;q?zvZ_LmEVOV#{t3crASC~Pwp@`- zP>Q1C2&D&O(F8^0{mAqUArhm1$H0h0;hl;^Bv^z+n};{JhIKSZ4J*@Si)XvQgtU^8 z14nk jdgP%0_cAP7ehi4v;W5-oY) zW>dh63Y1`s(o6JqA31hHe&)aDMK?p~v5iB0lsc+6>L9M$oZPdN(>M2Ph4jLvES*e0 zm?btvHrwoW!Svx+z;cBp^T(pflP?_B(Uqy&F?3|bLo8{}P`8q}^ZW0`$?-fwc9q_< zm=K!rBfKDVl+5;9F?!BqJce-8lIJ#QVUf6p6WF}}7QFf7{phEYXmOtv*Cc%pW5_F? zFN)|Uo2Hatn1vXuKujY}2j4&1KZ;5RXLIABU@uN;Sj1Y>CcUr}?95)4GapwJJY4c; zuN_3U;&KsO1Xauy=VnkZ<#GGY4Y-D)t1K1S!={m!zk`x`3W?K!keAJLWQ+JgoB&;w z3W8UM;<`l)hh8`=JzF)saPr@78Ok7nX7g5~fOGXi%&rdNPLAeHXrq>;Q-_IusgZO# z0;dG)6;C}GGIgtvKD6k `7mZ&J%Oqkw$-6(wiBJ7b3 zT^Y<}q)#fwF8y48OeQ_$rYJk@3e}$m(Kk4R6h$CxL~Prt@l{C8X+&DZQV|JC`SL6^ zcGFL!=}4s!B{HnniFi}P=;W_r(CQMMlS6bqLPvxAQBWyw55dswWW~5#YFIn^f^FWa zCtrbc;zd~~`{EQWId-!WOfQl`DvlaoZ&AvMYe<4nNT;k+S};mQ_Oo+kJonl$Ne$Vi zskNHNRU3ztY}-->xbvyiw)Geips8-77Hypxlsj+_P`WE@nUVqfjX1^X2`qH|O1Ynh zWpqf0-s6bW?ko&$-;b?3_Yx6QFfcfPbUI69z!6#qo7X4RMq?4U`n<+ygLB2^b%;bm z60r^sZ;+8N4Z^aC2&pECIuTnANg^S2Zg|aA=TU?*!doupN;Tx@9~~yrV;ikxivA{^ zqR1sC5mzLY?P$47I$%nW0;}mztyVi4 U?CpxE_j*LC%WRwGr#_o2UwCQ_(U&Ety?J;gkRO0}*OZ4@ nit)-CI-1y#}gJuS3x5zi)vVgq(Uar z;s#(QDoWdNU5_o1La`LCxZzGzxMhIej(9SPYu|D^N)%N&6vFJInp7XFEEkdgTdpc4 zz2)jHxMI_KBCa@! sCUkfGh zsQ6vtck zZ=lx@YKoFo^KnRsl$|KP_iZ;|fKq}ST@?_;J>UHvBBiRNWm)#_R7-Hjk03`R$;P_I zN#4=+TBd%*uf0we(}fZ?(re?A}hb?D?^aGe}Z_T!apmYWifjI=YgDD5RQLIaOG ^Gvb@o_ z`thUDFr^uzBAJ)_GhtP0h~+we2x=?!D>S)SXtLr);%Gz+aFt@xr6`6Xm+}OPCoCj~ zH=~La_TGFwuDR)U9DDvd$fSU)$2MSSupdvpa2&_a%%Ds>9}T-0?a$y{ckIJ$*Y86n z9!0)f!r_y7-1Y7cP((C{GDT6+K2SU-4klsC7H>#fyIhE%!% Kjl>K~EB8Xt1dg7a#-DugpD^6tk3yNFtD-o$ z$0_O>>kCnYPCIr=IfX-E-ABb~F2~ M>IQvPyF();s5x>pTXq0 zH<6$e-sa&f#@@c4HWZGGr|--3VRU2!n??sQn8~0@8;g_Uv)H`%M!e_!-v_5sM65#5 zap@ewlxuW|;A-@Ki!GB~Zw!~zH7-bBm^S03X!`c+u0lGYB5vMjNNWO}Lw3Iir~2V^ z@ZiQ=ELenP+OG`rFnfJ;sein)M_9{(2Tl~bKFT_EnWO}Reg|HC?R5+gNo3MF<;tyZ z7Y74r(owcM7VnUCPY@3k3`e695lzk(@W?kG!^>};LVq@c7Y@HJlW?om3X)+52R0-y z7%qc&ks>Wi%d{ eIAWXH)ur!!Q<&sm7b~H`omyvo~ry{7}f`cl)l czkhs?;PPGtE2w Mvk+b_RJms+98MO@xZvLTa1{ zMbs9hfcIYaR%EH(6pqv-0;@S;J<+)CO*S@ZK-& Q1q&Mb)AcVyVsnKK@r#t;!=`wKt5?ea`r`t!+jbO669D1-g zB_32E_`(a%$!x1fpLrS29XWvkDtx4A2Oc4!NXDaH9g9 &8No4 zF+MeoT3x-rJVbDi7U`RIj>+Zh $|CrDQ2Zt~?v`#$!6qK@0ezY7h!j<5No57i&w8fGkDw%w2h>8zK&E7Hu)i{(p z2|uh6>~MR767Fy`UO{YdD`q-)X=cGiP=#Q*Ty78+t1nnGNLR;}`Tz%pqWJ3Z9$~c` z>_f;yCz-Um!I|BUlb1qjISQmQY %^{{G1%uSz@+nE3}=?oodB$5eHjHx<^ZXgaR zUqWTcWP6i|9iLi|Z>v`8^xQ>E7Hw?YvLBs};Fe5PsVO$qhqSkdWht{+5uJFwX(6#q zV&hvwR(#1L={<3ar|N9@5GwE+u1$1ZN7ta>k(E5ZAuRtP=f@WDhaoDp(a=#B4}>I= ziZEGmltl;E PIHA)jvoq>lXjuQb*Oi#-W8PX4>`fWTzTXD2-JtuWmtJUal z`l(K{XWIts+A=CC#Y$lsb8~aD@bU1)EEV>%nXF7RW OsFA=sA=R=;wqWl`A~!tzpYKKL8DEuX)j{Jp6IUZly% z{N8H})|&%AQL5)xuc5A^E&uCj{H-B8J 7?{#vHL|g;PUCg3g~cg?ik*> zV;v?bg?@6XfT9zUiT9?zh8H5)(bt`ZdwRW!6r~Uc(s2xB;uKA7z`FjN3~j8H^O&8U zMIk>ckrIzj@5|+o%jS?F(n?Zv#S5CPt(sIcHC*;0vbqwVW=ax_tx{ u|IuvM-Bh|3j@uD{hefhxkpx=FZQi$MZ4s^a<)8$}#%MR^93G2)&hcFbYW6MAe z*Nv^iOf`f#iek#N_!LT2R4HW?7pDduQy)f}NM|4srUHEiBmG%gFlh%~p<;e<60^l3 z=kw*Tq<4zQiioN&*GGhvMKYBT_w~B1XI?p~mJ;$Uq%x3DFQDwM;3U^!)*41(){(SQ z|JYk`^=&^yi*y$l-bPv=tkSF|DK*X4AJzD$537LJ@`N$-XN8?Vo(0}G5PuXlKe94W zl{2qSWj9IKb+fRe?&n?FDwWG^3~a~5lcM=Ez^|-abrJ2`DArA#3Z8)#v}u^m#{=fN z_lcyGz#$GXgW!(!F{)!-`hdb7E{s2abyjLyot`4R98!Wo)qxDBIE@6m7tBpdM3c>B zuxTVK4WE%{LKI#+*GhKh>=S5l6jkKEL}_jURf?#JRLd$;I+5ki3|62esRqU*#gP?T z^CY>!l@~9L2JCrhCtmE(NKx^@wW>&Z2)F#`?;_d10o{mX3nm;ky`RnG(MZJ^!eSwX z8{+p*)t{7~pTdGE!Fg-&e8O7v@I_s4o5@ZIKiu IT`Pf5 zqMygDbu2Q$qbpBv!SKF)T-3_v^AFI@;UJcX14BK+S}AmTijbqh%RwO+w0<>v@+kV# zDcTVZARL(^;wfQvHZLl`WU3%F2u|s7|5ZrbEz|;8tyN{wVv?$AqH?r2gL`~ vr83+`4+Yu d|s4GKRg_smsN6kSz2JB1sxens#514eMcn7>`*;?_Yd5qGYS<3FH>m4ZnTzC2UK zkMHg8sA%hQv1DR(Y!En<#v2?OR7R>qPUTb?`9hvD8a8HUW<9UJkWZH_&7bspj-t2_ z&ti;tA}$LfM^&k0N{A|x$%+~<5sQgQt65aJCgrIC4N1wOs2<-K-y)L0rv2~eiaOO| zU|Xaha4Lm{6_$m0q|itWO2e>cXJt&0&KF*oI+Z_NXfB&;R?ShF>ns#;p?O2$OA|Vd z?$@I0{5fK^X*{kz6a4!krHJEWW0>jSbRZ+B!v+1@p7#ITwBpelbsxR)AIB2G{aE}3 zJ~Yw68p<_@FCERxBxD}&c*DBRXzHA+ul?wXGYVY04T9RaW9aMa69)xW?s0058+*A1 zmCa_fT1^iDgfds &h!e 13gXenn*>X_g*f6Ea&a}_e8r%< zh)mBPLCseWy8b$s+nA9hp9$W0$o#SzB5^wRRNv&!1Ak_!)e`bf0)u^ rTOB34R#RkTBAIGkj~!tnV4vK*X?7W! zNy&@ae82NYTmIWj1mzcFC=y$!cBLDP^{`ET9zOrcR9X%8Bm$c$l#$+XBW9~sN6)_+ zOa$N5(&p{~|IbZ?rR!LSg4D6zy(NLqy;?vItAjs!VH$t`Mt;==8JC0Lf?GL)pgMWd zyB-Ngkxr|T6)ZciR%=psFdlNo=+un-2>AvoGGR%d4PQnhqU7U 3bs _O9kh2t-KyK++jiAB{2h(y8` z&pEDTF=?ru99tGlhFR#miMY^~LD~aQUHYEP-yH0^O>$|~blSYA_HDbitHl tzWx&c*UcwwH{&JvpIOJus(BE1~t0cal$Z+asZF0vG(-4NVtlc9bx^h zHwVe=s(Ar34j3%lkl9vYOGi}Ny&J}j0bW|GQmHn~R5=A$t5QU#qKB$&VcXt=T`jg4 z%px#Ya1qhbs=mb|FC%zRBRm{&B;gH(Z6_~CN(N?gaWQq^!bfu&(1>D;$Dlfo{22;K z-Enqm3iWCc`C16u@A!Vy`?k^fMMq;K6+9hCpZf>q-*(=r){4CS2ezkrX~7Nw6Bf(g zxzYH$$1+$6^wNRnqn@9HTPdnUop%0q^r9w 98GNgRm{Kd)H|=VN`8bF893aBUpdK zyOBS45|!C;Y+k 4Gz#%-ku*1#$JEp`CMT!ll6$d? z;{or!IXbg+gf_npBK=po9^*KT9eS0v;T&;g*I$WPvV{<(L(qykur@Q^NUwV0iG?B} zCXlL(cd1Z)h~H~>o}j|qe<4y@D5~=JUNu`lp;5b%x}za0C1H2<&m0-osNU9h#SNG! zStzGA!5uw-X=@0jE+DH`)PZz<{$!!s7bGm&b$kv1amV@=TF!e|R hS-vR8)F~9qrPYu*1EMNaQ-K@B_Hv~x5tXIA?Ib10Kchi}On9}b zQXU$Cg|c5#yLDI8h%T}lcFXJPRt#o?r!otZr#wq5PWPG1iZo@{JoO}d_1V=rs>PBJ zg*tDGKi_;w`$9ce4RUJ!oxhR0xn|W!2}@10Rz`N+7KCymaJ2Z-9NmDCWbh3weWveQ z==KE(i$gJb6CXeTynAy}yajvcEU+MBxudPMY I1x|CfJL?Yw;LlZLe_cBua4W?xGK%CW|A#M zS&kLK(2kqXt>DONFrd*(wJ;+iSZ3#@F*QAb$*D=YoW%6Z3}*9r6eyA^m#d2GDY`Aw z`(G^0(EIDE!HzB#b!%U&R@I#PtIM1!*Ht}U&{35kt@Dq@d8^mh^tOg|dv8av-hDMk z_6{6L1|CDTU^ 3%a;;l(&Cx~6I6*7%NbfY&yJ7d^yvwlI5UBlk5Ax=^*QXiVgt5r-Yn4o|6N4a zve*H`?~LL3(ZM&;!qt*!N2w6i&_Jr$WH%x=GKOwNP-hFq_>t#O$j^9#D#iW^5OtoU z+t@Lk-=k_7rNS)cX4GWoIFFxakxMAFVE@%(a`yAdYw;SEU&7wx8CX{bTSnDFaje^U z0}5T3dGCt_f6?@wd}guVElOCes0Fzvt4CO!3lnWIakbOhX)UJ&Kej7)cd9*e4#wr% zVwVJ43m&+DUaKNMSHN6;j&}M}x<)mFlV|5JMS<#TXQuG-(NjoKC~-|Jj**cOina=< zlq;IFLPCU1RzN1@=(A%ohmy?e^paztZ*&);iSDgmjSdEnGETnsq8JDp;$gzlVXcoO z=qML4Gc`` p^D!rbp&PO|=EhekAYI=LeXbV UNoDwGB~H>a$d z*b#%3f%ILJlodA)D@lAvo})3&od|K>4xY(T 2DJ8BoT^4CB?_B0j95wp~iOb`6>`u%^=-3fYB|R#jj5_YV*CCy#mek`9$Tv z?wt!g>#E6m$&3uKeUVk&)~yG1WyZ_VAFcOSyyYGgx^PJyN(2{M5WcWjI*@U}(@$^s zr-Bd`<6}G1`1r&$dgyGJXp0GlqpfU<^+z6kvR3f}W5M%JXI_3Br(b hGe4<_C>Si{`0RdB(zveIoOD})OF)>qJ$Po)v10~QC2KF zh~X=*!$cQGR~u5nqbtJaF7(R_5>_^weSp4b!Mp`2=iiI6x(8;~Rx8mKliri#YjeB| zi!FlIukw>;asPe)Q%HlYm&z2?6ss&Jw^5Gw5kd9Il-LX{jB|w|UV7y)j=p&eGt<*3 zmzr0kEgRP%o$Z%sfV~IV{MOW|cmd^9pK26VlW9F$A4o@$itsdfDHR+QzpuElD@NWg z1dgm&&K?AHikSKmQEb?@6SGrisTNq&jksF1Co0a68r3qm34KE&=o?svOtw#=t5__d zeFqngt{RudtztegnO1{&sX(XM8J^uQyuK@&8@~B`Rpi)k?VXtGa2Jb(z+#J_^(*>Z zA5EoF_g&~d7Y(rK4gC!5NPZmw(2KIV3ntoPr;J~}aTqs@EKL>ndxs`*vamK4f*;!z zJXQMmKmIkwC#Fy)a>yfvXmSt^FMNq4`r=8dTNQBR _nVoXX-Xp*uv7T1 z9ouM;4v9cR%x_~cuaQ`G<~G%09NixjYRqb~MFwA&bYNZk6xwwMRy2;mEqgq*Vz;4{ z+Eww~F^p{4ioW4Nl=DTDiY2NAmg&7KNnjd|#1Q2Hnrw1Q8HQMbhhS#KT$YC;dP+{+ zueHz!kp^Ko`Zi}?WVLw1ut!*RLuj@aZSf|f5>8-r_f05vVa9!HrlsiWGZ(wVMG1@E zyx*tLm`9HEqO3Izae#mDG&ZCo5^-Hm#I=wxgKJhyRvekFMYJMiXFT=ni 0A z;oN{MMpHAhI83R&<0nt!6p_{V_&IH}vpBX5WpVY^5t$xL%b5&!3{zAVPq Y^-{zu0REnfrcVTA>Be-xK|6D7($<)^N z5mjA_E% mfJiW(lxWK?0FJ)Auo3Dr<5R@??%$tar^s`x4Tau(_(b>xeJLc43?z1 zp%d`ApoG zb^HV>C!>=C3G*1y$+is~bG3jumWYGc@kvx<| zQ4sC^iM&b_8P%NTnMyZbwFS5AyGqn)l7{j M?pz6g8mk@2cw2CHxrC z{>>QOa~HZ1twvX&;)IO4X9D8%o@y(o>oM~+9qI5n3ZG}$w2+8mA*kV)3(vfAe9gfN z)vlTxE$sObRvp9F+zux*O5}yELaWggZ4f@Sl>04-uvmN%RN~I)MOi&`8(N93zWK<* zc=qup )(xdW)R(omZGa#5h03xU~H_kZ=i8$r*}-L^qNw5 z^(NVQGf}B=E&iX)<#|pQj?;A6NCP%}9o3 ZqKJjpMw3oTP;`}~5P?&Hsd$W1 zRE@9OOtFk(_8cur>I)vGzj@n@d$4zGBT}h^GzuqE4OyHh0;N7x^XgbNEnlzO%E^L- z7OYO>D9hBYQX|{3Y2Q20jbK$^YthwNN`soQE0&sf)#w0FsXF;t&7cZN-0JG+)f_5i zXoM3+1-JoWA)ek4nxZk+^{khggcT;b^4n$Am9eclsxsq>Hydoj6dB%zVwXwTSryn~ z?P^KU6=TVS)r+!vSnK$uYlAyLJo&9h@$yrTp+6n>(szcOvdK7d$rxS6C@mO4E)|u< zuTZMt)zdS0ZCv%Raoy^BZ`y-*+^`!%*`ye Mt}kT=-G3$TsX4Skh&VGge26`$_g%SQ z2w}14!gG3Wz?d7)m$e(R@}~hEFAZ4tRGihiHsGz6Q47T|cJn Kku0%KG3~s%P2MLq~%ntDvqHjKBGB{}(n6 K$Mi 31rN2NhKkxnC(W?6d*VLE>jCEKpr6u3&&$3zs?qce4`QSP@;WYr)nTgld0 zSW#1HKz7w|w4+6xB4V4 @QuB%;fWYvPJMWE=45$Ge)a+I|zjjx_4 zBfo}~Wj%B+SZL9TXW-H24q+&N3in*C 2e59SPrL_<#e&qoSacDlzjJj2CH+Ij5LKrHWl_|UXif!I zMH#3@VnmaD*z%U|r_1j14P>Hf$usb!XYurx{{~hhrqq5s?OB`Gh7gwbm0JXyu=W%T zD;Irf8=&`I?#Gu}sF9+aWV$bhTz@~Ji6k7JKSn$jF^0IJ+-wMA=0{fEEHa $YEqZUmE6 zE78^AhwevqWDNC6QN1rzC#;srA{XZw@^-bRo39<&9B`x+(VGb-Gl^I&7a`hY@cD2k zA`5XHGL^=_&=59k--`8DY=@Q0(RrRXZe(6$r5d)4iEY)ZGuoo!tg48a&KV!|YF?u4 zeRur;YVkq1UDk`wLW@?SD|)Yf8UYdbW6^4q^}+2)Janeq6JYevQDDR7R)iMg-}xr$ zXHH85#o%JP_|);>MQ%pb4i%A5$RjK T9s9@d)*JSqKbIBHIwl?V9W?W=xGzXq zEE$=)o;=$my3jpWRb2z&Mp&ZA%%-cc<+}Hx8$sE)mV_2(UwHwXM_a#jtFPzDR@PN4 zOhHZ6r09RPqZ+Wmhi>?d(52-nyQUCD$(HnDsXjO+Ek2huiqqmmUeZ*oo!=dwDzJF~ zqfYs0afRo;UQ@kRwW^uFrEc4>?{0)Q?nSw!7N*rhI?|eqo$xu@m>ohuv@~CWPTt4p zVn$ch)Wsp%={*W#a}v8Y!YscGe(aYv9SfCUzHbz9Xeep--` z+qxfDzvmNOYr(XALu*p*W6ynu(w_;09lu4AA`(?!GR_pPlC{q(a=D>~^^(-Oq(&u* z3^|7>N)7g}A4Vh*_sGf b@SU#%=!oI9twVRaBgE$*v`Rn{ma#e}Ne%2Di&h z19uO!7Jw|Z?`l3;A}rR-&&|!T$Kc0<{2ixVda1!4ItBb$Y$X*q^VH)AbFC@XFvsOZ z&DQSQ3|`dYvJ 6TRP>L>;!=CzrL!i5_`0M5 zZR6nWv+?0HApcH`c1sml>0xZY<6j^(xCz~eR#Sl!Z@x_FzZtQm;<_JKtcZc2xXY_B zssA#`SVlqE+>C9x=6)1`@vZbQ>0Ac6fdSb_MA#*tBPz2Q&|(YIXJw))yQWir^{OH; zk*wFm!J<~FOB%4ksX$6yvW(-p5BxjKA|nmu-GnWfdP}K5EYa0sA+$WfkG?RUq?7nj z1n?MS^iqR8bOKmtac>JkiyB2j6Zii!74{<%#Ymco7Ac9U=!iucUn#DI7*gXxzEiV= z*dkU$)lBGbd0ad1zWZ{0^t-4mxV(r~#ic^cYElcLQlJ?NAE{fF%P1C$L|j$4kp#Bg z{C*5>-G^?35?UZIYUKjXz5X0hxiqTf3cV*KstGw>KO7}xwV*Gg)qR{aB_<1-{wZil zx{|NUox((%l$%UvvvmHV+$7hC#PonnOIhW6=~?6dXV)5jfHk|OXI!yly{hf9xNcRV z%ZiLV+4=6DfYZMX^)B=aY_UoBXi#OKA1xD>_84RVMxd$0j9zN6ht&j&fIf5U09wJB zfBq_5B8mvrnY;mjyo;s<$+a8Raw+OlgcYWUN$Mor?W5fiSc%3Pd5)|&rI(|HF-ecd zwJTP)`NvZze>puWq^2eomuOM0(t^ixwqy~cukjVPe;8voeV{8-fy@UxHn)}voI3U* zy|XqEOhSmpiiJfo&N6c8S*zE))SzX?gh+DM(hb2-ky1!GVMOCmnL!rfCU15r;SEH{ z@&YwJFJisLDM7p80chF{3}M+$ qRpGfO{K?NAS)L;**iJ!VU+fpj9GC6_ir=CEZYERK* zN)|Roy;M>~cUMJ042x4!VYTo{bj7_>Rn-v8i`=QRrzIN5Wpk1Sj7Y?03Hh1(xSFs$ zIkb+fxUslIq{&CMT1RH=T5LXWk4)6 Q6TgD=DWm6DtE;EsN*Yf)E{SkZVSaG&Kg-b?vYweN-M%*_yPtzlx)+ zN=4VLC=FQ3%l$|8zXKa@`d&;|tgf4NwLRN%&(+a%I{i6Z0xpTLG+3JW6as=%gQtpi zuc5ey6~zy1Pqm~9WIX(t-$EZPJjq;6itna@lxtL?Nb_$x+2=MM6S89PWh9k`H9Lcu z**R1aHT3uQ$?(8vL{GNmWEHQVzPVSt;2OInC0nmZw8iPbTHQscZv*zc^T( !uGD0)5_9Q|tlKqJ0Tq6;;|k;6RGhZTlW1wxBw z{8NXGDo~{Ys|~|it=_E5@I@9^*b+sFV20CxWp&gj>Kom6H+H@AUW`{mT}M_tMYu&( zAisxq;}UVngvHXtRs RG2tz0_b2%MVqz3O@Fpap<4^3dheJMJ~NTgcP!X zMYvEx7jBHAr>fj;n+Pl1Fs?;{F3XNeEfKiKDl?QtjA~rbh^l9qNx`fFQ*I61P*S){_p)c^o@4!oU73mJ$dI&z6zUaLH?2V>N=6QFQqCG6(?j} zt|eM}rj_G!SJ#3-t^AY5VM{j_>)Q _Xu{Af$Un*|sg?jaydEg=)_P6=)g-2?Bl776}YD^8!o zv;X`z$lFCq;S^;-;)n_q;UJ<4@+`1G$hWxFe1(a5nYt*YnxtOEsjQGnP5SFrvhe9* zKBxbrMp9ST*%X%-K`WlcRd?UpwPa=LR^b-D`mC;-IsS5E?v(Kf)CY@SSkcFJS-c^L zhB?ir=3R06P|d!Idbi0X-zThRVVT1xUw3>03pH0u5t2k!oVL|bmg%vQNSHSm h+q~)0TP4t{Bv?vq`$kW07J9c~k`@Z`V7~b&~bSv1{HrC?mbMo2$ zB^w5Rbj2{ykRcg{e@bxUXC-Dg!INk% q8O@*-ycU%Mqq)e`XY lo&tD6cmXiJ1;K&15v+6mr8R}UZ{xF_aR$;MZY zUp~`qdsu$3$fA{gD@J*C5=XxIk8+(CJ8mAGacd}1swYDSlT##_^hjs^yd+n9{ux4Z zs!EmNXgeTpC(nx`r?a#UfSnPP-4gd&RU{QCX~0+(+YjE0^}Fvtw}M3$t=6ror995Q zdPq!zl}SY-UFWZ3`Rh)8M+$~|-!04^ZSTL{7!lGK58~7tgBR;MvU0U_UQ)JVv&4 ^kYX0gEhJty^&_FqKMu5^Y3V35!7=oDa}RX4PPzhGGV% zZ4S@Y<>;Y@O9lG`{@bgAPY`C*X{Y?eU;P)g0P+pSwkI9IOreYcTA*0Ajzq%yo#nUe zVYdWY$ilSy=6)=3M4+FGL_V_1mz}&Xt>vojAik}pQ%=%zRVpH%FTy3V+IHIyW5eFJ zoi~rETfjbnn}*R6>{