From bcac44bbbd1350338c38b66da21dca36b5b12e2c Mon Sep 17 00:00:00 2001 From: AllenTom Date: Sun, 14 Jul 2024 10:51:26 +0800 Subject: [PATCH] add:message list --- .../java/com/aiosman/riderpro/MainActivity.kt | 3 + .../java/com/aiosman/riderpro/MessageList.kt | 238 ++++++++++++++++++ .../main/java/com/aiosman/riderpro/Profile.kt | 4 +- .../res/drawable/rider_pro_message_title.png | Bin 0 -> 10336 bytes 4 files changed, 244 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/aiosman/riderpro/MessageList.kt create mode 100644 app/src/main/res/drawable/rider_pro_message_title.png diff --git a/app/src/main/java/com/aiosman/riderpro/MainActivity.kt b/app/src/main/java/com/aiosman/riderpro/MainActivity.kt index b890985..353568f 100644 --- a/app/src/main/java/com/aiosman/riderpro/MainActivity.kt +++ b/app/src/main/java/com/aiosman/riderpro/MainActivity.kt @@ -105,6 +105,9 @@ fun NavigationController(navController: NavHostController) { composable(route="ModificationList") { ModificationListScreen() } + composable(route="MyMessage") { + NotificationsScreen() + } } } diff --git a/app/src/main/java/com/aiosman/riderpro/MessageList.kt b/app/src/main/java/com/aiosman/riderpro/MessageList.kt new file mode 100644 index 0000000..adbd0b1 --- /dev/null +++ b/app/src/main/java/com/aiosman/riderpro/MessageList.kt @@ -0,0 +1,238 @@ +package com.aiosman.riderpro + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + + + +@Preview(showBackground = true) +@Composable +fun NotificationsScreen() { + Column( + modifier = Modifier.fillMaxSize() + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 24.dp, vertical = 16.dp) + ) { + Image( + painter = painterResource(id = R.drawable.rider_pro_message_title), + contentDescription = "Back", + modifier = Modifier.width(120.dp) + ) + } + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + NotificationIndicator(10, R.drawable.rider_pro_like, "LIKE") + NotificationIndicator(10, R.drawable.rider_pro_followers, "FOLLOWERS") + NotificationIndicator(10, R.drawable.rider_pro_comments, "COMMENTS") + } + HorizontalDivider(color = Color(0xFFEbEbEb), modifier = Modifier.padding(16.dp)) + NotificationCounterItem(24) + LazyColumn( + modifier = Modifier + .weight(1f) + .fillMaxSize() + ) { + item { + repeat(20) { + MessageItem( + MessageItemData( + userName = "Onyama Limba", + message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + timeAgo = "3 days ago", + profileImage = R.drawable.default_avatar + ) + ) + } + + + } + + + } + } +} + +@Composable +fun NotificationIndicator(notificationCount: Int, iconRes: Int, label: String) { + Box( + modifier = Modifier + ) { + Box( + modifier = Modifier + .padding(16.dp) + .align(Alignment.TopCenter) + ) { + if (notificationCount > 0) { + Box( + modifier = Modifier + .background(Color(0xFFE53935), RoundedCornerShape(8.dp)) + .padding(4.dp) + .align(Alignment.TopEnd) + ) { + Text( + text = notificationCount.toString(), + color = Color.White, + fontSize = 10.sp, + fontWeight = FontWeight.Bold, + modifier = Modifier.align(Alignment.Center) + ) + } + } + Column( + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Box( + modifier = Modifier.padding(16.dp) + ) { + Image( + painter = painterResource(id = iconRes), + contentDescription = label, + modifier = Modifier.size(24.dp) + ) + } + Box( + modifier = Modifier + ) { + Text(label, modifier = Modifier.align(Alignment.Center)) + } + + } + } + } + +} + +@Composable +fun NotificationCounterItem(count: Int) { + Row( + modifier = Modifier.padding(vertical = 16.dp, horizontal = 32.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Box( + + ) { + Image( + painter = painterResource(id = R.drawable.rider_pro_notification), + contentDescription = "", + modifier = Modifier + .size(24.dp) + + ) + + } + Spacer(modifier = Modifier.width(24.dp)) + Text("NOTIFICATIONS", fontSize = 18.sp) + Spacer(modifier = Modifier.weight(1f)) + if (count > 0) { + Box( + modifier = Modifier + .background(Color(0xFFE53935), RoundedCornerShape(16.dp)) + .padding(horizontal = 8.dp, vertical = 2.dp) + ) { + Text( + text = count.toString(), + color = Color.White, + fontSize = 12.sp, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(4.dp) + ) + } + } + } +} +data class MessageItemData( + val userName: String, + val message: String, + val timeAgo: String, + val profileImage: Int +) +@Composable +fun MessageItem(messageItemData: MessageItemData) { + Row( + modifier = Modifier.padding(16.dp) + ) { + Box() { + Image( + painter = painterResource(id = R.drawable.default_avatar), + contentDescription = "", + modifier = Modifier + .size(48.dp) + .clip(RoundedCornerShape(4.dp)) + ) + } + Column( + modifier = Modifier.weight(1f) + ) { + Text( + text = "Onyama Limba", + fontSize = 16.sp, + modifier = Modifier.padding(start = 16.dp) + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + fontSize = 14.sp, + modifier = Modifier.padding(start = 16.dp), + maxLines = 1, + color = Color(0x99000000) + ) + } +// Spacer(modifier = Modifier.weight(1f)) + Column( + horizontalAlignment = Alignment.End + ) { + Text( + text = "3 days ago", + fontSize = 14.sp, + color = Color(0x66000000) + ) + Spacer(modifier = Modifier.height(6.dp)) + Box( + modifier = Modifier + .clip(RoundedCornerShape(12.dp)) + .background(Color(0xFFE53935)) + .padding(4.dp) + ) { + Text( + text = "24", + color = Color.White, + fontSize = 12.sp, + fontWeight = FontWeight.Bold, + modifier = Modifier.align(Alignment.Center) + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aiosman/riderpro/Profile.kt b/app/src/main/java/com/aiosman/riderpro/Profile.kt index 6a68b56..9dfafc4 100644 --- a/app/src/main/java/com/aiosman/riderpro/Profile.kt +++ b/app/src/main/java/com/aiosman/riderpro/Profile.kt @@ -171,7 +171,9 @@ fun CommunicationOperatorGroup(){ } Box(modifier = Modifier .size(width = 142.dp, height = 40.dp) - .padding(start = 6.dp), + .padding(start = 6.dp).clickable { + navController.navigate("MyMessage") + }, contentAlignment = Alignment.Center){ Image(modifier = Modifier.fillMaxSize(),painter = painterResource(id = R.drawable.rider_pro_profile_message), contentDescription = "") Text(text = "MESSAGE", fontSize = 16.sp, color = Color.White, style = TextStyle(fontWeight = FontWeight.Bold)) diff --git a/app/src/main/res/drawable/rider_pro_message_title.png b/app/src/main/res/drawable/rider_pro_message_title.png new file mode 100644 index 0000000000000000000000000000000000000000..02d9dd60c3be2f070d9b72be5e9cf993844c2cae GIT binary patch literal 10336 zcmV-mD4*AfP)PyA07*naRCr#^oeOweS9R~#J~NUfKayA@JBc+)Y-<#_<`ohsk3bS2(1urO18Jb8 z(2^T2P;M^`w-;y{2qE+pQVN9@+LD%6p|qC}D4{^Pq!(z(rqS>h?+xq*h+Bdmvk@db#p$5&O7QPn+O`82g8%UDf*?&jlj#S`oQ?g+ID`<^|Xv zXZ(nsAtKKbk)IKfr;5m6Bn;Vj?ZmsC6p{ZI{rz7N`A({J?X2-xBJykzd8UZK_f`?% z1LZG{5aztUA4L4#9tro(xajQZ-->vj^X#h|MdZhw4b}0}95gSA*8J(wdY|i10uG7D z!_j*GyNKK=BKLO8#o`Wl*B=lOg!D=ghw(eSLUDR{^woVLpPjM#!z~n>7K>@f@4xe~ZXV()8VhwjZC@j^3D}U$m(| z5RqSsHWyl#_Z`Rde=OSczZnUg6fC4_iU9l*5jjspR!7=OstzKp@qmc1R@djCS*IPJ z_FE!B$4BL({}IjE*RC7CWBL5Hi11#q7SIsW5`uvJ@%?#AgSq@LZ3hYMpB4#Q_Q6Wh zX72}6FOPh%XoBCIO(7KN)LMIEX>y!RnmbvMpk5yRV2{XKXVY6E`%AUzfQKnw3@74f z?#$~u#4LQ9hh&)5DCyKD^=R`hLs+E7;$hSN7i7ny1zG-Aw0`s5|=}XU-xofaC zhKAxIRC%78?H3NPEReLJUju2dfy{o7T6T$RS8hk;&W z|DU zdo<~*okH-mb1F~hmEgX^VfvusY7@v& z6TYgntNQmIhJIsy&L7T=>1-Vx^q4w0_Hj(3EqXQnY%DB!YD`34FmEbOr0kE6@=K9p zKjotxHRtfVrK29)593R8`KIHZo{lVlySm61UB6UBzTD+8+PlZ)^ui25FMQu$j7T3M1ZlO3ddW|vm zqu>G4%#gNg(aOYLvVLOhU(!CC)E*&iLwlQ9h*YMc1qYlBOSN&$Ty}~G5QUW_d}5qj z?S#J*Y+)R2 zxPA~Ynn-w_>(ScRug(Y4K9!<#+(Zv#L?5IW#@VzPr2CFjC{C3tzgHA_hYNU>G)%uS zG83A&ub+Gn6R%^sM=tEyGIZe6MPsha5OJ2G7?~CO{Zg$87S2Z+MU*yxTLC=hZN4J( z2}Z;nD4&ZUH@-PEf5*>&xr=53{tzEAW-vk(j2a)&FU*@-7pBlGY9cbMVBmZa`9?~g z7Q*Yn`9ld|x;^5Tbq2c#zt4#@RkRB&A;5et6K!9#Cb;>SEzsjM29kxvFzuFS$gBd8(v?@AL@%$JU7@6hP^y~h3^>n>Vlj2yT2 zBZIXnrl*UvK^6ib_)j>M^EOj>FL6u!fUc%czL(p<=?LIr@kL z40AHeR*vhNY?}Y#8`SeVz-fJ!n18U>&1;C@C0Q2@k(}^rDcuTZN7j+1|4&4MRI>*# zwSPs?DM$;Hnyk8!VhD#&JakrN!-=BZZp5t5x|7zJK>8+t6Lv=XHdS7}wh(;jsLg)R z_nSZthxVx(C&!48xd=@KhpUf>s*|3!TttKp6XOYr0r8JuzL1)gmUsqX?;|v1H02~L z;Bynq|G0k9W&!#)v6sHFo4=zub5LkBbxc95n??Bzhk3KI;Gk zM?+sop=G!C_l|kf`u7xr5MU*^rh(+)F3|*8{^xwS;%3Fz9W_Z5Sio_5O)z%UlgUD1 z1u{(HxFFba#GZW0Ky63nR3KZateQS9cN>u>Wfjg5Z;urUg$vGjc)L$?(nb`)fBk$% ztDo*+G!r6wn-q`X#3!9A3z72;UduW8FMw&*L<3yM zOw@eLE`D(>uz$2J23KEXD}B(nILhDIhuUa12gCC^Fx`RY;p@hQ;UhrmnjC4(r;S#P zHkqeyIF|oJq4?NP<(2(G@P)%}?d+IYaEd=AZdQH9$WbG2+^}nmywprIy=mksYs{y_ zsLg^U<3#Gmk9ue21?%=y_c<6Lvdc@XD40d)AbggKFq;v?IKX{`=0E@_3n5@A4B;a* z0sL2(>2ahzT+%{(TE`+-M8M-xAF~ne6!$u^m}`$GXo@@-TD!{_^YuXF z>Nvx;XpGE;a%*XFEE7`QZr{$ue$hQ?xEi_4@-M-8pa>-K_Gf7|^jZ+IyCzwVCPN&4d@P`Vw1qEU7 zTe|4KM#VgQJR#6QGq{u*UmvR9lLIY7mGATf=Ax4cLXkj9C~{k9SJh*nDhYa@?1Wg^x@NR>z^;Rflie z8{|XNfROnpI|**FT;R-n4sw3SbWPGa5UiSfU~-{}BxfZ8Ej}M8TZNB`11~G#^Nhod zw)gjz=p*;7AJ4HqooHc4lC-Y{$c?5% z1>u|l%5jdvF%cTE?-;0!`^;Tl4ll_^_`%X(!F>H`ekZRKfvo`x<9`Hhv693lrX-k; zsLh9KAa8hzZ`?G$MZ7CRn8Lk2HQ^|(PM0pTG zn6hC+(2*hSf5-yLT{3rY0)BL==OrQ>;+jbLPm#^}U5hUH(M;g)@y3NTz0O z2wsio=n^s_2kfjoyR^qy)OE>o^`Xk!Rt4skq@oYt4ri=tw*J!$Lk8=HUWiGC> zSfRLoxbpH|F<(kDTj>b6&4KXb`C*Seuxhq=mrXbot;q2plq&~zSJlbskDOK6&|9>3 ziTF6a}S- zfJXa*FZ`YOA#=?=PcdN%M_^uS2;oh+FO7Ms=`YVVK#S03eZdvxfH~ZRD1qa|ly(s& zDB4~YLVLxZ3V%LYi9_7S6TjnDBO1sok{*gxW{zu*|n}$ zB=Ln7KY8D+58;q&LmqEkglT7ZG)(phT9sj~tFfxi#=04yaE2slK^q{hh!U!9xwA z0vAEJxUHRs;t${uw?J@`v*vSl43o z5HMBcCTiu498?4*RD+-@1ngAv=dS!eIG4YO_YMx zPXH{SPY{ulPP-&nlWR^`G=Q*uL?8!jYZk%l>$}t6fwhr3=+nXhfCKKj}` zi2<&7O|e{g*g7J5QE`QTFV(6I&}@Bpse5&}`<>cMSAyXCeNH1p9G=*90$lwFg#`?>;&;Jo@@xky~A6KGk}TnoyJTOaePm?Byo%tbI_SR-SN}^FlkV z_sHfT@`;(3wrFgcH6qwR(4kXe@8HYL181k<;?S4=`QnK2rI zM#A46oEU!}|NF@B<2DtusL~Y$u!>J-s%L+36x}&U4n6k@Os?OKBsoMCy0%Ch{S3e{2$bOLqok^Omel7hGr>7 zPOFXid=_-aUA&rn&OBcbeW6Jt+qZLnDnl23(&8hl+VlDq+&)XRWLe zxS`lX9`ByHfcM4qkwo}l$%e|qPw0D3t-k}}2i20e-b;iue8cf>6 ziEUh1pO|0U0Cs}C;WO2g-8EADSToIsr|q+~9VRE` z+49mFf$(tEYr}%*khJwQ(Kyg{T&bQM;9xI(mI~Tt8bp8=v`xw!26w;CYcLc^<u)dHi~5?v%*uMWW^S0KVF>sPMyuQe;Ws9_uz{DmKN|V{dx@j?`zITE! z1_DPR<|HD($N{w6L_z~-hD2H<6v-s%DasE6k+WPCXF{=eA1cnhXv@x>RQhPp^wzEC ztT|bHI8G==Siz&ET6Kw5w|DdAv)0b_K5{G}BPGH)K2oZUopO3xxwJT4p8QBb>@}`q z8ngYd%>K;a#6vz)kkdn3Rth=nJNY#)nm#x!yAkomxlZjsO|>5vuWSSIO-Xa>7GbV( zI8YO?nM0d(ETY9=NYe%_n&WBr0UtePsjrAHnmbyo5BrLi-*5{lNqeyx@GHzzAEBud zJ=z86cN5T?=6&z2AVF9T)x&6zIw=! zM;vKxA0McVy@{&Z&9~Grz5C|AktC=vWsi#exza@S6!xn=RC%VDM!H<=3Dt-=TlwDH ziQb>xxbOZ`MN_A@ZarO21eorU*>d95)? z=?Z+MuiybZ`%LUswh*+MU=^k2G#AHlaDq7TX|%qzY5qXR`S$2Fg2voXs#Ou|PbItmRu|+tmsp0dUe!7vn4!SGjh&A?`bH`WxLaRWHSsAKq z1G3d%(mE~mq<%47Y)DiUr#iu?h^vU`n$XvwwYvxQJ2r^f_MYKo_HkW`6k>YM! zDU0U4XroOHRleREm>0S-L>ia$S@V{G$+0Cj-qp*M_Y_3l9p~q3-0mmxwNkCxK(OyE zk5mfA+;6P(#A$nxmiRzvvbyBfw0e2#_5G%BgHL#eR&E`f^hTZu{!r#$<4;K&CG>p= zEBQNh?)VtACKFnwufRdK=7Xlo2ktAy)f^w;g3nL;F>&akEotZ!HdoOY^N)`j&B#Y- zGF!A&&57=6E@9&mEth+RPnsYWt|N^`i-O@o0(@8*U?W>-#J6yH|Gro#mPZd4#IEsp zsgD_Jt{j*g`${`AQ$r)K3yk?on+*J(EY+%w#h)G;y}dV(mnGFpJUuALL3`rjfr%aX z`xa5XT>00cG0%*{M7A`v)|l%DC&n6CHxAN9p4o^R!I}3v>Slk;o%?e%f|2t2+*Q0% zgdZ0WvhVH__#@Akd~!{CAzGsEhR5ZYGlD`J?86U@ztTrqq3G*}-*KV%w8>^aKCK>K zy5_PmTx)6S0%+#pZF7qGJ!d|7&HCQshdmcn(c!@`u+QJHYkbKqUHi(FO9BxP`UyTl zGaUqdm05eFvPKGbCEXObP{hIBQL0sAOEw)UkJ=L+tgaEPb$M-Rvg#_~&;0QbHcWaC z@qwXzEC+EK`!*JQaDHWtv^M8~<5_d@6IxH4&j~&?+5-jwylNcmNo$NBO3!nHeG4G!R-%}MHNjnC5}_c6#mWoC$OlY9sj)_X zR%VR}FBqsjwB(jA{E7Wy?{XEuUFbrN7Oc5wz5AYLUN&Z##=+jnwV|q)5j6rUM_oR$ zKM){IA=3WewEJ8RkRB~q854>KaeKZorXd9lKounM%Ky)E_y++!cS4lo(i~2VMKJ`I z5Y}1=o$#xD7EB?6?i9?;@u0S@CILh=;Z6wwhJe*12N1C0n%pEJoe+qeM$-j7vBV+1m-4>>5QIraAxlGvp4O&m#P>^gxN?c5*PaTh$x=s;wWD~n%^;1 zH5(9Nq!H+@F?knMaP|>GacCZJ-5$v&vg)jU6m`tUjz*d`D%{Q&xz4VSuGt<7060gI zP{cn>r4%wgei{fRgY?Rz+YwuN)Ta3n;YHB8&=;DybMUbzHQJr;K5OT)tEi_TQ!kQ*Kn9bnhVC+ z8i2vuuRkRsskzk<2n+W_Q{B81(x#)~|Dvcvl2D}TbDE$@Cp>GOrKkivX>Q3w+tTDS zrzr^G;!%4SIDN1mm&5^DI;Yq)I8UF;CCOc*S<8;v{6r`YkM6M6I-_J!aoJClYSlL+ zjXE_ndSh=O*Lfn?v5(U~Wy=O?W2nusR4 z55!)^zHj((n*uvWRtaXDlg}BkZyA`V`XD6QyOfER5e4gJ{l3=uQ2AyN4m4r10Ex+) zb)C$vrD7e?$TjywlP^l%XgeVkF^PT7b)F*+*jF{i#V?SM_6pZ=?Gc=qqDz8-QDZK1 zrzpiw8xeuV{M2aP_`)fS>?3@=2r4buJgz^j%YyF%yk%0B7Ka&ra8f#b)Os_buWhcs zH-ut+sPZfc*b_^;szjJ#iFCi7Ae?et5fJxaL*Rz;zS87aVh(7O0fTAj zysU?Mj|W2g)Q#>S3v6f|)Qn6C@ zP_r70X3n@?vJ|r=;|Srafe&F?5{!w%$^m-j(Dj*b%mru<{PM#SD~ zJvo|`;#xc5FW5R&t{e+Q`m{Rc@+uR`r+s`<)ONLkPa zv$k5a=tP4xDu15u2n|k?x5|f${|vK4qhY`!7cr5BrMgTknm{|7)c^np4oO5oRFn&l z3x1KPaO~aRZHq!VDK>oK!5XuOxGwN}IxU2j=imhmI*znOA9$8EO|wQx@1H`#_@jMU zC}_9@F*S!T_uqiy(*)$;i!?p}`=`=n6`K{|MVT$Fc8|XomsQezFsuWGAT$9R-gT!) z1;rGXHfadOso~M<3fA7}3SKk{w%TxeX>#0)>6$KAzEw2ld1?HLR^;~wYgNk3CsKWQ zZ>k!XBp&5Prc_+_t=Z;sZd@mV(eA^YO1F`cp} z;8UZu@i+mvG(se49waOvs5SZZX@mhLCWR?9m{xd0L#G^ElCQPNKPBiW>BeEFxk9!1 z90x5>s3cLs)dQO7Iyuj1w)~qn@vTt!Bhj5;$U%OrT;n>)H@Ji%THLNMY_!`vh|f^Z?I031SNezx+*#-xIaZ!>4{(-C28 z@`~RUbC;ZKQadT?pcS&M{JOM6AUe*2x1}Ro0={f0?Y=-m1oot zGb2;z^@xO;g018=Uw%eV`061?!G`8+Fm;cG;f|UFccVWE z-(H#+C+zPc3I=quPN4RM;e1Xqmw-3mGmOP_Y6s}B9d~Ucq7B;mCKz*NhvRkfI6@W^ zZAoH5WO{4w!oiP7R6oyaK`Bx}MBGOxC=}n-5)pm;bSq8xL788ihTi1umMD<4lDvBJ zsm<<9=MAn3!h4L!xh`9hTk-bKh8JwyUG?6pFjYQpsNdL{F9O{FxLMgdI9c@;L#zCxc8kfy&ZZE=VA?pD`U49_yY z_8EevxCau+aG`u)WWtv~YeZ&32}XR^lrqwR@)HJT<@kL@%-JphhE_LY<%;z!w*n?{ zdg!dm2I(<-eHk}Kn93dlTfOe(%y?pD#1-_rUBoAbf<$sSp${S0Ks z>sE^_B45E>%{%I(4R>HWuh=lt!&{!a&h-3?w>F`b2aZYcIpqWlVJnvum+0v^az`NM zxvtEXP~@I)ruTWCdWVg!_YQBlc)jVl)61vGLw$vw=d6jYK}}daHYSAtRvNskO?W53 zgC;-(T=P+NvT1l0zZ^wg@i%25{G{X^XYmQ99S?y>P#{S|BnX5*FDV+`J|2P#%`0yr zLkTS<@#^4~0SR#U0%q;}5j-M4-!ChocL!k#UA4t%U&g!ssN{Cr4 zqJU@*KHQjgp|iHbJWX5653LbX2@{VGIIXD_$17P6Z?*vk~osSY{9Gs*{ zrXehcZXS>tUfA2-Z{AFoEBnp}3WK2ovWH*rP#C^*pjKsKDw-Oqymob9J_$sooxnWq z4`*LIP#Y(*s-k*%WbTZh7+4RV2g2|V25VJcF--g)i>^3OF_CX0UJyYHZ3+7J(Sg}u zlJNmx5@Sl7RpehVo2YQr|5?kdr3)qKMzLFeCT^hY7#jj)ySxS}gPMB(iXb zo@T0x!*&BhMZI)`fqWKN1SE`daCSqADv%9FX4H zp@tfWGhrC?8RG;ppPcQlYkYsr83Uo&ANFoA)-IKbt5%sac0Ta1R!gMM{hK#$mKisX zv