From 38917114f00b5285f5a5fbdd4e91db83dfcbd05d Mon Sep 17 00:00:00 2001 From: AlexeyZavar Date: Sun, 1 Mar 2026 03:14:19 +0300 Subject: [PATCH] feat: avatar corners --- Telegram/CMakeLists.txt | 2 + Telegram/Resources/art/logo_256_no_margin.png | Bin 21447 -> 54570 bytes Telegram/Resources/icons/settings/dino.svg | 2 +- Telegram/Resources/langs/lang.strings | 5 + Telegram/SourceFiles/ayu/ayu_infra.cpp | 1 + Telegram/SourceFiles/ayu/ayu_settings.cpp | 20 ++ Telegram/SourceFiles/ayu/ayu_settings.h | 8 + Telegram/SourceFiles/ayu/ui/ayu_userpic.cpp | 109 ++++++++ Telegram/SourceFiles/ayu/ui/ayu_userpic.h | 35 +++ .../ayu/ui/settings/ayu_builder.cpp | 16 +- .../SourceFiles/ayu/ui/settings/ayu_builder.h | 1 + .../ayu/ui/settings/settings_appearance.cpp | 259 ++++++++++++++++++ .../ayu/ui/settings/settings_ayu.cpp | 3 +- .../boxes/filters/edit_filter_chats_list.cpp | 6 +- Telegram/SourceFiles/boxes/peer_list_box.cpp | 3 +- Telegram/SourceFiles/data/data_folder.cpp | 6 +- Telegram/SourceFiles/data/data_peer.cpp | 12 + Telegram/SourceFiles/dialogs/dialogs_row.cpp | 13 +- .../dialogs/ui/dialogs_stories_list.cpp | 8 +- .../dialogs/ui/dialogs_video_userpic.cpp | 2 +- .../dialogs/ui/top_peers_strip.cpp | 9 +- .../view/history_view_group_call_bar.cpp | 6 +- .../history/view/media/history_view_photo.cpp | 25 +- .../view/reactions/history_view_reactions.cpp | 3 +- .../history_view_reactions_button.cpp | 10 +- .../peer_gifts/info_peer_gifts_common.cpp | 9 +- .../sections/settings_information.cpp | 6 +- .../sections/settings_notifications.cpp | 12 +- .../settings/settings_notifications_common.h | 2 +- .../settings/settings_privacy_controllers.cpp | 2 +- .../settings/settings_scale_preview.cpp | 17 +- .../ui/chat/group_call_userpics.cpp | 6 +- .../ui/controls/userpic_button.cpp | 41 ++- .../controls/who_reacted_context_action.cpp | 8 +- .../ui/effects/outline_segments.cpp | 10 + .../SourceFiles/ui/effects/round_checkbox.cpp | 6 +- Telegram/SourceFiles/ui/empty_userpic.cpp | 29 +- .../ui/peer/video_userpic_player.cpp | 20 +- Telegram/SourceFiles/ui/userpic_view.cpp | 19 +- Telegram/SourceFiles/ui/userpic_view.h | 1 + .../SourceFiles/ui/widgets/multi_select.cpp | 13 +- Telegram/lib_ui | 2 +- 42 files changed, 701 insertions(+), 66 deletions(-) create mode 100644 Telegram/SourceFiles/ayu/ui/ayu_userpic.cpp create mode 100644 Telegram/SourceFiles/ayu/ui/ayu_userpic.h diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 0d05539e8a..226fa3ad39 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -131,6 +131,8 @@ set(ayugram_files ayu/utils/taptic_engine/platform/taptic_engine_mac.h ayu/ui/ayu_logo.cpp ayu/ui/ayu_logo.h + ayu/ui/ayu_userpic.cpp + ayu/ui/ayu_userpic.h ayu/ui/utils/ayu_profile_values.cpp ayu/ui/utils/ayu_profile_values.h ayu/ui/utils/color_cut_quantizer.cpp diff --git a/Telegram/Resources/art/logo_256_no_margin.png b/Telegram/Resources/art/logo_256_no_margin.png index 00acff3dd5f8cc71caec7c97f031898efd2d502c..619217f830a4a52d3130d08e38616d81442f3a7c 100644 GIT binary patch literal 54570 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 z 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%0AI>Y`8#cu)_OG zqHPU!Ogpb7BRp(9?*vVoALc3giN#8F9R#R^0Fkc?PS#roUpuM93TDn}s2Y_H+Rt0^cON1*43pIG^r`gh(pJs!Z7YZZEOnRZ9N`;WK&#)?rf5gT zf`(91Z?G{2Xe>w5VA*k<((~ht1{B)c(F0e{rGy3^Cpi?GsI3Ax9ROD3b3EF}M(5N^ zivO77gxw>6aieb(Gq5qYYujGB@?}IeC~eLdE=boB4{eTIM#Ht5OJe0U<~K#cR-wn& zj)B(k9o!iC)xf*#UJWHN>$TgA`%>F`c|+U!U4v~b|AwscfEj$sli?a&|3)*j2JHyqZK9CNPAxBj$ghZR4u9L5=kZFoafrA=) zo%d1rO8;rFGI%tiAhljE%2x82BfDO&Kq*2qDbq*SK*6S+1#_kFq%~c!wCT<>-~?qQ z6_ugrEu+hDo2xyGDM4CaJ~ljs0b-5y{(z#C(6ZW!GnqRksN? zzR>%wi{;BTJ|~|g=j?pwS_yDNgzjAjHFPVWY;f**nhkD>@h*Ei5N*SIM(e*=ns3`c zZoTwqe7eqyZV{G2>Rm#BELRTn6e%kk6EDaYc3(m+q4F|yO$h`F!>-T3^LBpvj5Tyj z4%TctjPjI~Io`~8pm-bDLY68C8UUl_9Z}_}jS0EJ(o-YE)oP=|4>t)fNWcfl$vF_C znq{J)ET=OBgCdW(%XSC|5^_-MhxsH)fby)lQ{p~puZyoVDU;UAk@z0}*i<9XVAM7i zfh>{~r13+B3!?ApK-18nW@{J~QG^caTh@5W;mF#JQ7LOeSj`dSA6$AQyx4YO{UaeU z>;QE@ioY#O%|@6o*lf8`Lt4Snbu-Iyu-Nhw54A*H2Xc+wviEEmg?^eO<1P_X6~d5%NX+H(cg1p9B;wb2Nt%op8?!hI-fh9eZWC zOEw1$Pr5(cLby2xy!Ly~09(A?i=ZAm^v?Kd4xAx?tI?$l-V0wF|A@xPD$+hK=U-*g9fDRqMM*cF{-)JYC>r2U0z=bT%t%bdhLp%?1S=?(H1KfzAwUs z>p%_41%0ImA={>tqm-g8M1`7_EEot3N#M2U?D|N7FjsTRR$-uCr@V&WL1OaY)_+*W zKbAI~1cF$%h7uW0hQ%0EyJf02JK#*H)Zc(;BE9oyJD~v`$uzIvH zRFUchNQ4#e9DH8hAPd=a<#sOOJ>1H z9TM;EI{yt8n&0>?zpi;$&dMd;VRt;uciaD(-?P=^K zk0UzoC}u_tA?c12U9*r;n3L*ffPVJ5*S}7c#>#4FmO_<@W(r(6H<&170Tu~{!dnh( z;$)yElYus7!m`yuh%^zd4xwB7++e5sxGU+ulnJ7freBG1qzvyKQKx_WHMp(wb7(-%W*GERf5-n{9^-LvGDG>~mck&r(>Z)y?40f-8wZXbc zp9h>)gi2Te#w;we?qK?Ag2wC6Du{;$r+0MXVLO>h@)rLD3XDsX3Q0|XQD7T}vy8mB zzCP|`%koB$BTicCp7Zbi6m$}pztUv{EVG^T5tz3OHv+32 z4fI)KmC;KLe*gA2-{O7mdP{uu=YMv-@7-^T_kHeL;=OPGm#!0E{?rja^6^i^fBxa0 zjsNT)y%aCJ{EKiF619YS%He>Xii)%Hg8O;Pq!6&_OW%$eOzGF%J+hI7=ar+J3J;@!R67f5Thj?QgopKkazwQ@<4dkH7t~`cMAu zi%BoOQLn>hAM3*DZC;inTTx~ww222Y3S3j^KI3wd{iMM0`eHx7?f^awz(;`eYs{|B z&z>Cr$DRf3WY+P6a(txaD45hxdYC~i!WiYf{tAe#0+|5tDShnV9LB&%v#`4Zijl#l zDZ;=FsVzYMP_2q|t(vy%VrQ=dTUIm*Qwa9b$8cNAr< zRvWgS#VGz^{4k6IH>fD39x($BL@${&UvrU2v&uepbTen^L^6fID3p2vKv9`4VNvR#O3?2Xll{v5X>M=M5vV{*|PQf0;94`me{ z5oJLNT++@@Yp%{nRI&Gfs>_Ze+Y`o9A7TUm%0@^>`X(#XPaI0@6+euJul^069e?=C z-Wgx_>6V{iS-!`pXWEH7YN++!yOS0mO}_|L?FBh z!%mHQXIcQ6#C1FzyBWb1+4L;u2_iL}Z}GO%gka60BDXmmZy^I$5XKi8W%?ur8bH)d zN0B><0BjKCfM<*ZoDVlDN%xqOnzDv#b+9hzZqo}UDrVPV`4hD6H7mG|WRlv3NldCz z4IzT1#v~0fEUbD5ARD(!aPNKFXXQ8imd}Yl`c?1xRdISho_Yn>m@j>*cX1^ufQHZP z52{*RE{h1+YzH;jp?XKCtqE>D744>Ir7kz00QOl5Qh~8(kJeIJ_EPsx9ir^Z>;GT? zS~|FX9$faN_2#Yv7tzgf(5-r@!VNQ2UoZ2hQo|k2Tbm(|i~-p~q^GbRb(X^%fn1d9 z@#g$x&8ba^?MrJUerPa^vsBuI8A#-wEg4~vW*}B1_S@vREB`FIRtva6WO+r4b7d;* z@;O~;#ffobjl0gElRSw|$8b2qLP}SsKyny=USy>AF*qiSls~=gvaOmx)IjxA*T>iW z#&=xN{&dn`%j0YkzWnh|0>uoR(;_77C;Q{&l4)+;*Cdy4p+(f`3n%iBV=3?`IGZU^S%1I%g!pheK>>|giAZ;vzL|7u73S317pY1QCIe)^MEa|aupsh|bD zBgLeDwUbh>i*W_emS3_TlnUUm|6n~2sv0w|q1x2UADT!uW~l?O6WR{$g6#E3aoFsw zimP>XZQDGLXRKFX{B(|Hj2;X$gwYiFE)aQsdlKv*wiwuQ0F~OLrw!QgDG!ISrOrtLTT|66bsXo&h*zd=;+|-Q~5t^h@V~{&Em4=HKzA%y0Oz z&wXm@z3taL+CMtlUWPuZB)W_2{*69&ECC}fUA27=O8bMjxD*(SakQHVw+UrwBNOoV z@VWGr3xb2@Y)37x^~3agpr6-voy)GD!B)^!h9P)#g!3b!SNDa+QUs6<(XTITG`pS{ z>$MUy0rNpQW*7siS*F7JPg?V(8&)SF2M8(%Dk4%D#59bkTN4$gmbES$H1?34liwLyFM&bEKS{RxfcZ%@$tG?UNxm@QqUT*LKm>R`o%k>EE?-==fQl{-b4F>B!Yc**3mr4S}Z}8gVRKEuwCk@X$Ep+8` zr6x*Do6%qAAFS*;rd{dO{+POjPRSFj8#UBw4NRd;aSldV94zP9BkUc@+x2v!OSB`U4eM<)NV2`MS*U{-n)yxAbrH z#-^M$?)Sa>&F9ix{;^+!PX7Pe<0C)w3)kNjAy<8z$t*2=Y50}KC|gV4ZS0}V4tY=6 zyDgTAuAu{fO@r^4E38)r9)$c3c0rEPn(XHV3ji!?Iiu~v>ve5)hi@t=MP08c!&U-1 zHpjH>ituQSrc}-pAgs0?0)7M}^-AA$V`?$P@cVEqbnBac&3SJd28i8&n=%}HEKe+C zDo1HRNBvjIUNmkn@ydTGqvf5o%=b_*1yF11T69S$Ey7d-mu-SO;4TwNPHEj<{$$-+=_K!Wu zE>yTTq!8Gy9Bw%7iD(}Aw%xaG2F1;8wWKzcUy{^(bJUi`7IdUu?A^Iz@9 z3orjd^QMLxLg+Ga1)%=k>@Jo~q5MlFg3G=To)aWMlAX&*ceQw znY87B6{`sMm4RAl;Ht+a+j(YRm_inx$IAxQq(TFCvD0)#12}~D+lK(?|6#vf9$ut=h~Wk z*7>is<3m67iD13V<{bk!bpq5JfhDZz>g8yzo6>Gb2U=%gO+vs7?C2V8h5aFac*%Mj z>A%APupgx$ZK+jXfh}XKOe_HRC0oFJx@4>Z@FLb8wv8}siN{drB;Y`#Rw>b!TfNxl zuAYI3HnMylHRkP8=m?RP%BQD6ouqZz#s;16b#|VdrTH?~C6S z-}uzgf3-FB{#lMQ`mbIV06W-}Q%Hh5%PPaz^ea81Pv#}U0PFo)WyY6}Fzk0}mv@=- zxF*VNc;M3IWpL9?wrJlb^@6p#LOHZ z&@e|}5*&A3*?p{wHh}wTo;ydD$w8@IGQR<-$H|S$oQsjpPDN z7}|{(Kg74PrB0emZfm>@#elq%c>qEsxO1*E+Mka9$9~(pUvp{xD;-z?z~LEXS?7J3 ziR$Is_1xU88Mxajvbu6miLji45gra15Bf^&={0T&+A{HpOxybhP2NZRGE1yg0&rri zFZ%$U9R-Nr2bI@cfVzd+`fD+7wu2AgY}^xV~# zmYva7y8=*&2)jQ&TmZuF(WY5sMAu#x#am0fi?+~g=`(qY_?PY{;Y;SA$kJqjHofQNDkG zx``kdhDkqTMs@U4)VK;}9j6Sx`U^fg{?zaMmtQy0{?T!*0QAxFvi;$Tu1gI|FJYyD z++COVVCmVK2l_Poi(uajC0;u+Oy8<=^(fN=sY0a(xtJ?y$X+WFHjtZVft>T)XR0v} zK@!sGY`{91D@KAFtBW#btrO>+#OmC)U^*890C`|lw4|d+=zM=fxE6hxaWuY~Z?15p zUuH`({lDN!%IelbNwZ}Fr!7-QddAc20Zp<<{G*2Is4J0!HfGnXE5n*{1SbGOiuVP5 zY4t5s-dPKijf!`^<+H9EalYk*l{K@dh2^(Z3nT!~LHdBoetWtEN1`wEU zthd&Pwrnl#mU8<&G^Zdy?mqduDeD! zREn(GP)kO9;oJVD{D$B9Ij_q!|Cc*Ha%BL}!HDh=W91}PlG-6EVT?+C>G0Q|qf%Qk z)DK#3QC61S3Eh^>K9Y?U?dfwoGl|YxVPnBk)NHL3qtg5pGvFSRwyG-wII=14ITx}0 zG#FbV45HKC2;<9Hp1AYiXb`O3(x}4$QF@%FtTvdF!UPyFTL3Z07(!kCRr;|=acjD`P0qpDZ{aHw$+adM^Xc{b z-}|HH}nEfWP(5rxzi z$Q;unxB0OIT)rA$Xgurw9Q97zh=j$K3c5HLfVf7`Jej|ZawS@4Lf1UG$(qYFuOzd*lN%PfG*%6nI^LhlcHi`6pL<38_r3cq@kTwaJped-HHOXU zRHKZ`Ddq&Uqa|zg>)P*GcU$V_%Y19Hc3PMR%E?s8k28CIdi@%IvxQ<0Os00NTI8|n z_qh`{f{R@J`Z}J;0M#r&4Vf#tgmpX#oP_{YODGvWQ*4I|e9kuvza6W?IU+X0usg&_ z-!bM*6Z{^imowMOXnIM`Xlq@eBd?N(I_jZOQ?2ignhhH2Wu;NIJH0!*qIUCo*RZ_j zA+U$t#v%{2*~%|``&rHH@rq|-i9WXc)g>P>2tUxoc?hX!*fT`LYeS%`7M;otTORgS)fI< zW9J`}VR@_(r3`kKKyx^C&SnX*f@zICdDhCTRt)-aolRS3U%|~CCBh@1JAZAkoCIa= zuDZ_ZGKVt=213oW(l|w#sNrAMoyD?_>a*4KnT?yQ-1-or-?F4|a85yYm>xQ<`+0rz!5cHpf2HF?A4dkDs98+s+i{P=!)96!Le-+~RnyDAx7f{%baH9{eg&?Lh;36D zSF+k>Fd~-{FQe_{&4?$ateW~T@_|uO@+QJkn&U%E7wPYMI?$>6LQjODe;p}`S zh1@vbnnRVL%@xro+J8Iy>GnQ=y%lbCiYvO%;OS;jCSwOyOw<5^SR}jITv?aC^UY^B z|8w&jzx<7z=KpfX3om^tU>^(cufKA#SoL3(`2xQRKQDA+Pgx&84Lu~Vg)h6)-yOhw} zesR-l0$0SPv$>P{)$Hnn34o97A6hgslTZy+(hh?-A&|(gY%ggT0?GioLDq2O%;I1OU?d(lCKH zn0B@!GySAq)u=A30ufvWz`M1rrR&TM%=>RI_x0Q1oUsO^_KVH=zy~?}u$#U_l(d*} z%}yh@~2k2{9(C_kY1> z=Tn-W@Bd7i|0_P$ZNShKZE97x=RrGQO5Wy<_MF)u{YbuY>2WNlhrHESj}#~r61v|Y zzYgy$WBhCI+M9uLJnJBtuOVAafYU8zyYbu#EHGRk5H>YZXOy*uf?(96TUpv~jy!-R zEQ~?8mos1Fz0b@(LHa*`2%0__I$0>_b+|&m(FMK#}}^O>-)4GXAfXohYv=_ zFdG7pt5Mz7gKg|L3u1!&r7{P1Gp*hEJ225Oea@Aq6Cy^$--Cf4u*qTLfvc*#>DioN zxMvpvr8Os(2 z7?5IrR=+oF)&VP5sb@YA7XFLt2UW74QrtOZxAqA5>ZF#hkv7ULvAiinSwnVvkv`&) z@wT1{>`es_wZlyV!eY(@v98O>EF-Q3>$n>*k)?O2ROvrJB8LZ>tlP^Gjcuw?JE-w; zoz~5lWI9hUKNo-Ci{Bofj^kPZuqCncPs$o1EHL(1qqe-gR|U6BV3X0PfxtbSCD+3&`U_{i1h4Q*4$vnRSdP1(jV}NE8-Ws~ z##Y&}9TRzfNEs!)`$hyKI~dk`6~)UIhMO#a0FnuQpY`@PKZ|ervd_tLZ~kkozCWY= zpZ=R4sgJz;3%N(2PxtYmkN-UJdZKAXDUd3yEpMl1C=-Y~=VBC)@^J3kr!->1k=LqnKo zcE9dR-|=aS{^#++OY0thHb->%;US5XzfV{BD4R*gw1N!+R8roz2G}#z_NAJDs9U(< zB%OW2$<|5PG5?~hf5GW01!Vhyz_tJkEksnhV9R`kl-9WssOHys-TZQEK~)QA%@JYP zUdRS!r#(aK`D?O57NWKIQnRebqLcMrW+O7BlP+kMFc0d+@&%>~SH}}|3j%-31t^R? z*XKE>Xm4=nZu%fSFP23qnlToYzNA;Jbnb5`K`!Y()BMkW>*@GUjlFloYw`GjAOG3- z)Bol3>puGkw?!Ub_>MQnpZni`QG7a&vjjPh4koQC1+@sXjbt!H)~xd?hMiZ+4Auvc zV+}8R0UaKkC;@|u|H}(*Y(l0Ac7jd#B#9=Z?I(cEm(c=-(DxK6{%|@&>1UB z&zoVPOT`wdYQ|cm&*{#wc=b+XL#sK=HMRuF2*0GG2K z7_$9f&Wq2!=pAp0@BD*b@@da%&P_l|q1n&xTiIBr{SmS4AsIe|aG^%QfizFWA0vZq z#F4jM_m>pUH^52xc>7JK+Xn-USTd~Fnx{*T6?kG`TM*^$+{FJ2P^%Zr{2&ePEI+g&RdH`ImiM&gRFT1;yp4IPtfpwU*n@yEP zj2d<=5J5!jT$(Y>n(n3iNjB9qBBd%WyCr089u-;x%)lztna$#NC)mVZ7JPwNc944( z;maQb59t71u;y`et$d(yCT{w{pcw`d!D6d_*Ck4y& z>oTP6{#|S;Tw-0xL2pHl5VCcb{wQ>U%frDAdeK1Dg4Veh^Q+(c);jCoZ~Cq8dQCh2 ziu%vT_x$L~)oJpzk^)0QihI63o&UT3?Jv1N;M09P_fwbiU$5cV_)g8_4nm0RNK|75 zzM~x>(J?4C>DULpoOhH6wapO`jO_5KV3yD^FJW3SntN*uI51EIz{?Su$L?{gtYBrg zf=kf9<*OP#6w>IifSDiM{t2TJw$-YO4`ink^}$q0Cegx}c?1OB30U!JoEm;pP&?XDte0Fk z5ssV|k-1a}94w~ieP${f+fsWq2^9^#W6n1)e$;6Iqgns8$J#AMwelX} z0q$b#*~%7zX)GH$cCWiSk6C1+Og{pOW{+xXG=BQC(){1>x=8bJoDOp??Ooe=gZfoyEL(c* z@6N5hANcw&ebqVtc|2tR{ZMZzj)6co1tnrosKjlBkL)l!unhas=A89GGEFCjgqGZyCF5g5T7IRFj^0yVOtr~f}gCp^Pz?et7ropOgGblS?6I5^gd>*y#(zel<< z;FJhi1Q)I_Fy+QFV=*^E+J$CI`E}#JrR>7M9H|>7BxtD(OS<3j=4bUMp6dJa-|L~i z_v5VfzxBWP@VQ^VkWp!=DftuTmYrVmKG*qQ&CY+WT)gn|C%eqQP+-}ZGT`n-cV^uW zpjqe9$I^kJR^pgrSE)ODAlFY`K5NnF^Wf=L&eAYdZovkRj$KL$d^9Z&E}y|oK>{9t z3qFT0o^PI|4a6udYLWwZbp)pz29sr&r?ogzN)I*sS##L(K^DlvZaP*1cX8&*S-*@Dw0hx?VOhvrI&x4it16TS@Ah2NduSRMOY^BjugJ8_YbLRR3XJ z8+~VL_t)6iuFkT0Fs)Q2vJm)uAfTx__l9>Ekg%EWezG13MpQukjT7a()*QrZriqo7 zZ9o9?detKYkwR+KO+Q9?h58+2uGtMjxj|rkLWOna(6uaX%Ap{R3yc;&1*|yly}$P6 z|A~L~^Imspz8~LnuIvAoA3ke+7?#2nvahhLwe@)B%3txGUzgwhZ+`Ks-uchtdI$)8 zdmVmLSuczC=d5qkgK8TxTVf5w9I0&Wj-WvEg}+2?%Lfrc**eT#ug3H-nt>QAl%3_Z zOn$z;-Aetr2C(v-f_V7#XQJo!E*ZITUDX33f2XXX(uffk7&vphPl& z!@%VX&p1NEL<~gT$0si*LAUUma!|Ll@CjyL^OW9yj`(b#Pb@uVz!Xm_$5 zx7W~p{qR=n&La!;FGCySbW@Pfr*#k`6XOhNfjT==?;N_j8yuWV?+aY+T;@E^o8g{0 zj!*%|5d=zbEceBWnb$^yWWky|RQ1!|x( zV**^0aqR=(hpP!{jj@nJmlfh=fMHH$yODat(E!P?#zeW;*WY70J9}|}#9cuUlxG@! zLAQ5plI~ADb@Q)I{-5~mukSP;$BO#T*WdVuFLoq?e&qi6Zyrbule#C4~shH(7zVATKA zf#_#F9p#pcROrq^mQTX{rr-Lm{PVy6H^yu2z)e6amMz}lRPZsGEn^V96xk&*Vw{TA zu(cZC>+!x4Wh+e)bZ>%8*-b&G*!#zNe3c+{f~LqYTHv33`uTa&Gy|-<{>U7rUsg8( zyD1VL@iR-e{dtaa3{71(X^`F-DzvsGNKN=XVv~&6K$h%tjPyDv`Sc= zb{R;!>eG{_C|aiX>bQrTwRNaZ6^N|GapW%yL|PdO&2_zQr$xVjflF=}%qEy^SgA}V z(Byvb{_-bYiJJIwre_?%a~T2xN`iwsl<0G~OkJbi*))UtXmF?**n(>mTTeP6UAoVp z8-(i;UzQ2ZVf_wZ=I{N&x8}F}?l+d>pU3xq6?YcL(g6FH)9X#w${PW(EZ$SU&cwCr#wg#o8nK_r{7ucM37kjn3MC znehlChB0a417Cuj*8o20QD0r_FJU~rKbNQe!c)rnHE%G-KO^2>_-}vW z+Rht(ryhPxv}L_^!nK>nQq-lBlHR`cHSYZ9@gofYJW@{Bk;igv#?w%0y--qNj4>;{ zeX6Lwf>@SHVlFK*nCU1+wdJ$f3$W|Ec5uEi+OX1<%6$u2TiHDhot2k2_{oY^HqO7# zEGM+e5UF}!;my4+zS+QF_Y$qfoJ4~)l?(+m3od(TKA#IU5m6L^!*btBZLSlZYW)0* zU;7*1Ff~4oGwOfqfBui+BR_LK{IYEpO7%@JE9`BJC$5dexg+jde$TIuGjn>aA7=(c z`|90h^RZc-)#A9`OB7xTv1y0@$NF^rNy{1__&(bbWjSU~*JX&dv3If^7I4>@0`pM) z5ZekGzEFt~+_V%GBN+Q}-sSzw3inYzTe==;M2yCW?TlI|nB}Sd5=RD8&FH6vq}1TIG+2dpHsjo-;IaZbmX|jybv>cfHIT5g*jH4vnbOalY0W& z13xT980S2@@atFJY>=YBTHap+>9hZZ+8AjDKR<%IV^7z6=FYE_D7pVQ(^I2B8sglf zr|Il&E&>zR<;+X0RhUuM#jiuDOd^UMbH6@e@affWe8-#KaL#{5{cm}S`Y*iv3+1{g zUx~@!jXV);r~umTvz+IiOQZkp@B4z+jq_hWN%o0flH-kCtkzN9y>fVNJak^#@XEQj z3;`I^nLxyVWi%7DJg5e@O=nbe_)M(QXs&3sCheHA)Iz836--$;^mWg8$6eY$=svQZ zERvKulU=*Hr@4`+mjw)|mLLMymfDURmLgg0a?Nr0O+k_DL$*@?_-}ttyitxT>i_MZ zc#8TTvyQfu!~I~_do2kyk|RxJhf;DPs=y6MPkSqSdt(F@ihi#3zX}l?Ajw~C=VNq9sp|!#{Bcv$iO>_qp#2a)=LNi9_>MQlxBpvT`nq!d z^LXy3KEW)l-(M%Icrh>djRYyLCdA{g1{>GUYUZ~q&mM+N&_%#5{7 zy*k}@$8Q4kzHH9X;WzMiUJGMK?*uH%5}m!4;)2t@1(FWCb{|~^)$enxP&V`C&*fym zPA?Exk7U+bE0UkE&Sfy=;0Fx}PYTa(ir4S)(kFlMsn-9=`t~3E$&@-xu%WIH3>-F5 zkR+R?a{j;ahki?(e_wCM3+EPKWR_N%hRVh&D_gyAzRoI7t+PdKGBzjdbiQyVBdcV- zzDi#Tq=_aeK$MG3C)I0iBgM0;lAh^_0*fsCDi7Ue4p9Y)xzGXOK08A?UXl>&A? zV-cymq-omn6kd)ckW5>>0KaXn*Fl~ze5h!RKum2XBZ>y7LCVmAz_Wh8j z+9sdqETiqV+6^o#U>p8EWv`T#mt_eLeW*fxi{8VL05~{S$tOEU9H0Z5a-=FZ3+id4 zom13m*4G#WE0$s?8^;uQ$O0Xl|1<}L&&Zwxh_Y*nBP81u*PiP(>VNXdU#f5V|NXt! z6$qSB|KI(uUx;t|PyTN5zV(jB#T^o3a-9XGpVw-wNpA^{oKxkc)gJ>cXe z#0q5y7net%gP9Zr*GdY_7e=^#eSZGomwut%{~tZ~v>yIr=VPGawR}AHv7d`8>i^J3 z*9XWvOQ5S9H7#nGfZb;Lny-BKTk?DUkMDckM*j0So22J&0bI7?%X77|##ppKVS2OpT1wE{pUIU{NMiZtKJXm zP-Ew1zaEX9R=OfiX*tym{9pgl&xybIwZG|gze(x@&xmB#nQ=7Xo9K#01UK14pEWWl zmuhyvf*&ji^G9ylvDWs=WuLrxB}@7+tpUjAu3B~e`{`NA^&_yN!6#f*Sf$Q|f328t zo(il=_}*eHOFj#8e%Me;q2+>IQ%o&G&mIpp20KeC-p~M-hu|RBav>ZNQeWT3&t?Zr z+`6MZ0GDI-?ZY4Vk&oAR|H#MBdiQ#+-yivk_te+C_iZ}iRd$?9SKsoV{iFEM$F41` zO1}K&9qHyeMopRA*4JMKQ{58`|KivErg$S9>mC3FEC#huY>|UwlTD?S1X|Q*6MTLS z5a@=Q5GIn2#8v{Axk15tExRR2-1bsEA9~`YVMjoSm`rJ?pdWU=t{ahZ_w|ZrHdMxa z2b5hyU#Aa$&|YcT)4HkfX%aT-8=zUFl{@EuZxV8%o^k=6Z~4Oq^K*2%O9FY}#ZTpT zzj$T^AHSYrdu9ax#+Q7~)8DsU8(>}y$DjX!AHVkT^FZgiWj_qEWmg5vtiaDp(-x@c z%x`=D=f}7Hp3jdr%5nV?Fe3+DqROji8VImqx20gv>`2?5t9agX*sZsnjl;jDAC&+j zw|iYG{8m>4?2y}OtQ@QEZ3o9lz(HtWbznG{5};DWa6J-?Z#;?y`SLAJT3cn8grf7C zg2+?)8C}?vMJOdP%^hH%VjF#o7vWD|>7RT~6B1@jjD7YAp8wFt^SeLv@$3DW7XKUn z%IC!Ieec_@-?9G}eVkGM&-_=YHBr3>TYoYTw0$uym_x$LK`8_}SPp(v*XwDI6M4*{s(?yHTfVvrAbN4vE<1D71ns$=_R*y`N|_N=l|+Amh+!S-vfXf zMin{FrWbzA_>!Y)W$cnuP}T|x1tAR!kT=$X8;Lg;2*Yc~ZcXcsWc`*VdZzIO_hy>1WosCLd)PT8-` zUU<74ebLOOVM(E_$V(IlAh_0z!E0M`Pyh`S;v4c8>G*&7fBfjvn*K-QrBC&5?s1!5bdWLNLj_913>lb}X0)q?a`{Gee%u4F z%-_HsVV>Rkbv{Z2e}oQ#1Db5uNsQDJU3}Q6@8rwa(r1U~8j*Az86#lsw(ic4+u!>g zHyq(L%qPr#D%Ce9D1?FA`XQ8hhLl}XTXeO`IS_#9lBx^xOuOq!- zo&P+P{>$@#0*u7f|2gm7kKxeBr;0Yyr*>r3u2{UM6BKU*2n$?nc;|F}HF!ez)mV48 zL;~q$LlA_e_YY$<04{nQ!~!crOgG^h7gNt@XXQd_iImq*EfDUH4l`7w;p;Y2ZMB4) zi?N-k5agh@1!Mj`H?jZ7GKf%zu`jucgfsyJ*PQZQ*G`j&)f`ETM`S5v2S1a4`3FCC zUG`O<_v_Bz#Jfs`ulkqYT5o^T?P@UMI3v*qpSt-U`l+9*zy1&Y$+eLuB>iZ8H6u4g zl8y!FVI^&FAt;+oO7vLUo!@=i```P9b^h}>(|sC#KJ1=eh{65q{9Cj@V@P{h|mV`uFsHf8-2w=59D*)Wwo67av)Km zqhWSm+Cdi4r}P*Ce#%^Ef4(`L`~3IU|KW?)sts{w+onTFeC~WLUJepNkqwN5mKzYe z(mB{4SwsKn_rGx?KaS^L{1lX5-VnAx6$*B3yB-bcM0+nQ04#A=cIib*w+P%SyTj*@ z6KlAh_WaM;ljtqHq8mJQgRkIL>_P$}iasT}&hhdNMH`;Z@wbb_pcmDHu?x%jf zNZiS z21Y87Xsi9oSq3li60aV}czepNWn(~zTE}eooD97H0waw(hpk_M&4eaQ43695tgzlp zK{iKs?90xNCNZ21_eboE!s;&WDWX!j1e=k&F57PU?NL(}zLohv(`C`WM2KD|vnHdh zjWC^dpiLoa#7YDC-SzEtCs!FQhk&IT#m}1m{P&rodjPe-l>y|Sj7^EKxfQ2!7!-kC za)2ZoJtkcsIy`9mi#s zj*>0u1M80~tQS6ao>xtC-lZjAiPe8_qy(fjgyj-?HvlUXcMB*7kkFh9eCd0EhGK1~ z+pc--uEMy(jjyJ{6q4G-Xtyw2xiaiMdZJNQB)zfI z|J2r6KM8ZT-(0Ubw*nP@-F(H9N?fz=bsg&P6Yx zoZdw5ylu3XfjcfoX9xWW%kE&1TC}cLw|qBrma-d5unyh z%sm9P4DLQxnp!ajmynWRQd%-TmmL4dSG+qubLe>fd=^C4OpqA@K`8!by0bDEl^J{k zHh`bq0%V$pZgFw@h|v30kSmiQaKn`=u*A(skC6cMLE}i<9$55+4sbZvB4i@KtRTue z9!kdP4zzBO_OKR@jMc9w2#Ltq1QVqCTVB(p?8A`~N^4(jUK#|7_{qFKeI7*dj5$1` ztboeOB_?lppM$Jm{7s^#<|GYLFf7OD^1mo?*h^Ur8(d3Zu6t>BN&>B1e}ApFD!&$w z)c~wbh#nN+mz!>+LE1r%2+{UMg&{})Wm7lrkc{Nn3(31{Y;24m&(~`O>C=;AJGNe+^PB zkt*N$nbiO8c@@0Jv-9a0KxteF0gMN; zn6RZ4M(H$U)O3;7op-voQhYn#BWs4Ie6hLl;4}OBwuS4uLlMDJv`YcTu9~6-q>oa1 zc8UshURVwh_u?)~UMZ`!wfHlKj^{r1v)As+G?@i`sU3XR{p{TbfO@J8{U%*myqeWU z&`xTAJE!J&W&Z;9wv{273U?|g#EZS|X^gLxXfI*hdVG2&)<@bkofUMrF9xwlz_-Cd275q!&p|`QFUIvuujfP~Fub*7;l_DE zA>1QGu;4z}oaA@ttr`8*u8s`mhR!JJ+TMz&7P^X_m zR>~q836l;}O&X*JCB-5n(}WFqH=WDjZtU)2Y&9L(Xk1wVHIzt1=*l8ruA4npM{p!p z*D6RJ(Xm8eNdAJWmj!u(UITMKzui3wPor(KE;cuNpg;HhABoQ#>-gYW0*qq6RR4Iu zJ6n!wly!h&%gDkG_Ns)g&8=Aj+dyz)v`xGH)-ntCZZ*~|qV>7R7P+L{|JsoR0q6x3 zx@q$LUIpv4xadtC3Y&63p*h>loDMiuXTr1F}(du-9GFZ{FPj8GXyXeu#A#z{z3*apG*9oz0oU`-Uowe}g zO5i~YGe?Gn)W$M|vC0w1j2642acUje(QPG7K^it{X(*wnM82RbUdstDy#LGp!#_SB zBD#(D#ydXz(l5aI&bJH}%$&HJbsf@GNaofn8n>~)$@IB9c`oxIz-0JpQ=x~|_MaY0 zfc@s^VL>F-bdRyRflB?6ovq)3w81>`DNAn(qLYK0A}Z^HjFCUl5mckImR{c-ZNzls zIY5*w-O$wp!*uIhwkR1s-3-+QUGSGZ5}i~Bx6wIm<#vsSOa*Qjd#BaX@TlqRad`Uw zh%ggH-%pX!i(<^6731@6#nK#%a`ETB?<4uAzUN1;CfFPGcq#z^^ySWijs9^=uvP|u z5fGu%02iMt#YTh`G_RxeKC;8O>nT+P_qrt0f2=fV99*E)uzBbi7{x#>LNdHN;0^s{ zyGMADzQ(&j7?&%u8`;Fc5NZ2;ZSRlHkmF*&^ST>ErRx%%EI*D`+TgJL^7_z}mzIer zs|d+}PGb_O8vTrQdNQq2b=E?!NUx%XQqum?VY77h%0o%J=9N*bTEPgSv65HhQff3o zBU?t)jD6rkAFuzzfBeCE{>9hluOt0($8#V3*+A#}7M6z6RyVNrXv!_V=#g2O8~D7< zgqgYBm(iA^Ms{skumT^BONqxo56+oo?!i+=09ykdO*AqLSgB$?eA9epad;b+wM22F zyjaRWe%jVpx3%y8V(^w~WNidr*B@$LT}0j1^Z)v@*lOj(3vs+Em=iRLtuSr8sb=a3 zZpbW-0ocj0(Ppe{9K9%U*w^GC>5_q(ti5icaW2iW?#eJuO3XqfJ%&04lm80be&qGx zSQRN619s~U20WYCziZ|b>=pfw;ZYSOyAiS94=eZA{ z;QkRvJ@#OIJ+iA;33NVo?iSao*(HS{ssUm34FV4)@Y-EqQtjQXz4c|v>r-@w_Ca5( z6D730XgB~}5u@>PUVCVNzcoAy*Y|Ym^D0TdXke@}x0MeH+a0-`zU4jh4)9HR_Dw^V zx2INCsE^v^RpYZ00DjlE|KQph`vy49djPny6U%WdiyO#)Jw?TOD_X%>-&fxwk__-A zn>t5?-GqxA^XTBJRIJoQpGQ|Iw%X;_H2ob@SeF0__Vsz_d<2TavcutDrPuvE{Q0J( zgW_7h98Lq2;4EF>pOm^{@f3Iq~djceDBi=0PVBP1{P}4TlI&1Tv|1k<~nPX4e2`1TEjECG9CIk!@CLm z(wWUsoLhAsf+_8UyA9=+41#`BP}piwxGgt}29-GHRuhUcM95`vavm%-q#AyQ)fn4k zHBif&B50_E_tHboL9skIiYo#|*=4-a!R4X*)NK6E8wqmE%CP4lXz9dhGjL(JXsq1m z?#Pr6X^e@~^HM(-`mp}Py13C(4c34E`(DT^8+aY}244K+FY>i7?_GaKK)5~#*^d=a zh{_K9;r3`Y&kb6z!3p#$Japi&`KyQ# z{`xmHVmk`L;(+((#NJg0lMjzF+vn@iv7B(wMEBpir?A)7v5AS-L|J2Q)jI8ZW(NjL z`Y?HODo09u|0xIXUeXvnj5gzw7TrGXpGSd|F+F-=6CTDHKn^}6haYtW&m&1v_k zKtr^8M?d+Hnykmmmx$gSm}n2+W%^}dy3)JD z;5hdz0k?Zt$27bDv>Hn^%#H-?UH}|`>vk*Zc^>aozzTJZnwI)}`up#H{|isOfggHZ ztrR@>(VuHD55ObzUaF;`px}ukPI=qRT&)G#*SJqyL&NbKj|=BkO$C%Er?BC)8XOtL ztwYsy(E;;OJwNPz6o2NshpKj7b5j|cb{_jj2b+L2Hrp3T(~Hr?q_b{Gf5qq*z_}&- z-2S=}A|50UY4u%4VVf!+WF;JjyA{W${tj)z7Cpf#XIRJ(qU!hCF0zj-xgB?tRX@}t z0`f2lTBgSZhjrbNNtucvI_hd=gnQNBu~ z&Utz-z|%+QYeW+E0QAu;$BKF{4${G^Am0q@=VX_i32a}fcS;}7(b~ZZB#FM$Wzpz< z*+Gl{V&ehboGEzY*OBc{4@?{{iqnL8$-5&l`|Xooqzd%e9iX;o`2~Ru_9@x8P~ej zMl1E9T-V;6f0XsEPm?x@JU=lU8iq-e)2dA8rEUXm_io4hDXi+o_XhcHK)d75Ev|^g2dLi7`LM z8(n%+rjQ;A;N66wJi7T0AB_LtzyHVaT0K7a(d#kbNjr^@JV$fc zoF}-d+)flDlbhMXa^`-+&j>aelr|5!2m3O~t>$Y0Y#0(K(XNXXWj*o>(pBa|UIO&B zZqM`u+kWr#_vWDOxZ6J49p^#`WhqwNQ|Pts5ZZ&|k>L~Fb|zw`H7)=!7u)if1RVqO zV?LX>yJhtWR0{wJUK zh4{bytsjd&`v3pC@!{8CHt^g>e>P)V7G*}ouDJn2m>$CIaydu#lG@m*_si*^$2r0sS z=eduG^J6U4Tw8`S@0UjQ>)C|kTsML$nyWxeo3i@8f~^ZW>DOnSda3jvJ&y%1Fbsm0 z&&}~G?y`=md*~#f7*P_#4o2tz8xYz#c|Pme(!jgD5XRGA{rf*1f9L}ritl>vWAR!! zKKRj}?IplH0>a@#buU^v`5@JA2p?H&#sl5l12Saa<$)`I`AfR*MBM3cw<^5nh9h

4$bRw||5kK>3Tg~KwoYWWg`vOfG&Pk-}Y{|E8Sf9)To#0PP`m0$R6Kw%6sQCn$qig*3B1K94Rz2qu-S! zUbcwIvLPPvO9i)p2V8_|GBkn8R!k-cFCJa!7<;@=O(>Z|GvXCpVHjD4));3aGt?ic zDF~J|M*omw=?=5+dhVm~^=CHl!B=-Sa4i8s4{31RwXQb-)#HK?`?n=~%M8|u_Hodlb;heYn% z3YPJeXf`7YUEna!)6=7LKOfq55$v$MP z`5>1XV3=hz5ZKo3z}1e#8G6%+Th^5|U2tPdU)uq2u%pMNNxNa%qpu=jUwwFRNCXm; zI-BdyaZkh5*&R(FuS42&_NL7Px`^0=9(9^qsN(gm8>`3>ArKsZ)=uwZwz)Qa8Kb+8 zxvtZeZFkICr!+_{6zm&Dvh}zD@8J9C?T24{$_D=W-;Y1}*Z%&iCL1`Le@}f1)6p_) z1)Bzc+FA}k?yZ*0D(PN0sk6e-G-dXH*L}2Y%cgU*kkxm{g6%}ffP6`>5Ku#{w*H=3 z@z`?S^Yy|HP$2Vt)BKYb55vW0tu}KA z*`gm#du(?Z4i(28fOLDGRnfeLS%DyW;WW-k2^#4kxg$!8G^X2?HD!@8vlYtC49VFdsaBi2E zS)^re5xDEF9tW_#?0VLOm1#Xsg;|GRQ)8}{a74(imp+PBp5nRLQrIT48a$cJB3!M3 zH8y=h4%C+DfzJlb75#5WYnsb@izt$fR>EZ4qdw~9o?x32Jcihch|$TvcN%`za`Emp z=<6sKjxVN^sIaZUG>xL|poSt<6&~9OJ2+7sM7?w7#}k>M9k!qzY^0mfY}B3 zGARZ`oiVfvBP~A@)A`>@=k@MzU}$iB{wW*y=BG^H-}$Sb-fZB9ul4_s9UNZz0k#w1 z7jt>`K+k9B1wL~?M{cJHpHg3lJtmrX#eUArf-UzudUzJ&6!^`Kkl zfC(SBa4tOu4>Uv<@kT2JMb)ul7NQfoS$IjTPAv+_cQ zDNnJa`ZD^GxS1U1xCpf^HF#)iFcpgwOUmI0>C;CP=iE4mmMO91-cfzNb#cv6owuN9 zvaG3D>2riGIPi$7RGsCkH6(G6CXg7qHmA^8^LU!)1J_Eyr!O1$tAFp~?c!Mc*O(44`fcM(Jx8aA<jtn+P+to|8>m0|X~+gX__3ciH;c|ViE!c{K+q>jvcXHKgSDu~fS@wW(10~~ z+g(7f2#U$59;n3`3pHA~X$P&;rm4OHCW1= zhkQ+b+sP>WK0i(HES_WZL0Go1{ISNN%}dRjT>YjGs{wh z&tXH*-B<-61T>Js=Jj;mT6hlkYWv-njvau@GPblYk>*v&Cy~|A=GOTW%Zf|RTM1Bp zR&X_`v{m{BC*;XKbnHqm$+SdB-|Qm>BP>B%&XqdPQnDJU^WejXGt#69<}U7#j7>XLBSky2fvY$0FJPtM1e%iTr@tmiP3ww+X$lJCRs1X` zO!X2JfCRt}`T;RerllPH-p;!?DevMlXd!dx|D|W=<9~PFkq@9HCPr8gY9Fk-&yLOj z=93HXVmcreBPbU|U%C_FvISK7tXya&+3@RqjB97pBzPj4ZzXQQBh|$|_?5ysYE7OT zW$tv_ptd_-&mBbocdpavjSa%+%sr-USsS14*~;CUzP};ocdRN&je%kK+$BC{nPPL; zQ;%XCFfx{ySE~12AN*+i!4EuFA3S&I{TduEe&QG7uXX)Df=HF?K!*pc#G|h&b~fo; z`_eH$cAb!(Q;y4*ocgyhpkmVkfuL%q^_Xi)4gMPZ-te*}`MFzI^50R`s0L5Fm~MD1 zc&)+GCvam1BW?J#nalndrriFGaqP2>;Mo;Au3cm2aJ~U2z3maZuwd(m>@}KRT_2;7 zhR8cQ?V2~+EjvPTdUveBL+^=#9Rf!iet1BAE0J#{zxRa z>uI(}`g%0=gZIPAb^|dv-tlyIRlV@yC-Q&yAN^qc+3)?;|Jky?`uBc%{SfF1vEpOU zbVw^fyNw72i@U5$JZ!p1j9YHQcYuiAPiJ2%Aj;ABYrUcLGliV3mkf_08XNkCU)JH< z^CIqd{>es?_Q8R5Z6_dcHUXhzp+-)HH#B6*5Ie!8qs3h_Vkn?!Zk2R!lpTy)Ow((a zWl7 zy|Vw`+6lfucQ=`PP4Sd5k1e5CTI>`Pt2Je`l{tn3UXg>=ml>JSx`7(?_-DWOh4>wR z>3^tSt&-r}{PSnO@57{n0juA+2eoaj6bVhyT4mL`u}!N2wL?M5>B=mx48XTWZ0t^7 zYp#cWFi2$?(APkIx{$g%L7as~HSaX7MIT2`+BciWWP?*5%t~%a$AB>1sNveRI@CZj z7;)Kh3zl3exWWyiO{SU@<^VDYzmBC{L|jbdK+C}D_Z~-%?lkdT){DboiRG(wp0a1 zkg7p&R7wN@qjUp>Ed>IIx)IpTzvQYySdMWyLur#m-+)6W_mabuiKRAeA2qPS`A7x3 z*^^xwAj+n9oihhIGr|{u1Px5=5N+`68W6yP@zQ8WuYE(~!B~}#0qnap29L&gOAO2|k^Bm{8|2YPM4E>V`A~};W*6P+D;)+NN z{W_1Z!3>!*SH*%(w!rY39F1oIAb}JaSnB$~cd&pPJxGfqTujhYrQ1Wj1TXr^ax)TT;WBj|K?cB)zeeg z&hQ2hX}%%nf=>d2EfUi)ue&e%6+Q=FFlf}R)%y;Tx*(rQX9KxI82>Jd-6F9Paz4NB z-}!5QFaF?nelY&ivyt~JJihA*G|rue7{|xoZG*C-P4;)ko^65wm&y8kj<0vCbm$P( zlSen(MsDVwRrB+L&iY_qYR$l+tK7J4wP=jh^pEArlI?6LrxImhOCW+@uio|l{BMe@ zc+Sm&jq1k@6CnFV@+_cZ4C#$W5s(;@SDO{y!|Q$JJ09XZ7&)3Xqx=Bwbd1z(d+#r83lX zZGri4{QGbASF(h;)T;~ESAD@3z2hzMZ+_Xk>fid!@5-2-LzWG`B@!veH_kY(1 zfAZn}f?fPOb)3)S?KHPw8aTrZbb>ptf*9BP6k_b>np~2lY|2M??S7rV2V@7M{bTwo zd~F-|IJjRrSJS6#&>y=1V7QGNl3i9NxFLBr5GdXe1>YmZG~Q9mwu4uU_0vvgGwYSu z;HH^JitV&@qfuZnwrBp+UPr{X9!}a_*kSbX`tFTDCizGY(pK)Nqw@{9J6-ECuRimR zb|Q)y;;dbB@=9iUSUG?>R$o*epmON#fi2nhl*bpn^DVTU7eDb!@zSS$k-S-wbe&&Z zQxDPJ83KX5U12zj(fx=n03#0}B``8Z!ZvKJ%^;1pa662!vR6)e1=xcFD{G{07s?n3 z{?56FdhhwG*aKZ503F9adWMtw#*&=FOKV|ks(`65#h4g1!TMmG*NnnIaU)BL*hM;w z)N0%fyr}q2WxZEYGUf^!HCsw6(XB{Nd6ur}GzO-oG-d_ntS(Xjjf}G$F>=dN7MwtA z>hC7Ixs*wRhjcI<_|gh%?=_5RW$H-hdI>P3x;X`x)mkpgnP_c550(kpdKGBn&y@9g z*oF8yf3u)<>I#b?UdWu_K^cMQlsv*#0UU5b_Ea^!81uDaIwA#a0hdoO8T@n!O+Ip1 zc4h2x@4gZM4ZSGE79>;$J?9~~U;l+)Zs1|^TNu+aY=e2mi}9bPoE_0BS4B7wwd9C? zYuZfD1j-sGWi{j2NyWNFk)y~x)!UuEJ_pyema2k{7$|4}OkH!bDo%sNWAaMPp*c!_ z20|l~sdikj8utJ!<4^L?m*V^6#rA%^KDy6hbhDaBDPQZ~=IFKt-GI7iKcugPBucU1 z6pCQ}x#sZ5KzSGRodz-la<9)by!W%Tp+PJBJMuGo42YN9YwlQknM*qtu4l~*gk6o; z9!`$m31!sgXw{&Q*86UPa`0BN2MY$Uoty|?1_r@Z6(LS_ZQmyVS?mH^7e)Yu@BTDl?iCu5R#*yYkZ1jJ?pwGJ!x6 zq;)ywib7eG%)S`zvx)>j-g%_Sj^X%X6pGuDDfNsRMzCcpiMn|auS zf=R8=ge5B|1~h?i-`8x+0XR5$pU`7u*+!0L8qv3b49?Fr)McPDM4&RFtgRN5@*sEI z^Ef;uL(|4GAKU+*GJy!M$;MySri*tjD>iLw)djR=DQ+;?Ye-DWCzJ(72iB%Fhw0N# zSLk7}hg}cp#Ez(+EL>vfL3+7fAGUv?Wh#UTFMHN!+_oId{uYiG?PItu(($m&GYmtU z--^5oe=Ez7H}q4j%2$pk>kNr?%uL}=(IHljWz^$PY|~-d(OYxYegr1Uj0AiVG<&xg+F@q7mT~sl@(m#Q==%t zRH8r;I4|}&hTuqN!1Rj-b}0QuT5TFJYdj|Jtx!6^!E2fixaP(K$o1SXB(eZJ_TTl< z0*YZ=83b85DT0j@OXo-nTJ3CI7!(LFvmD?Qwb=w1ge;4?T<1V&po_@?gUy05jAlBU z4#59T2ehM7@g)g{MICcwT4p(~xgIwc(Auzh2ct!22L?q3ih(l({J>_u?5r}wY)~hJ z(n~M5jF3L9=xbV~9*+gj+4T+#J0@-12P(%3*NU3%C^Y5JUl0Quvj$nYqHz9lunpKE zEc;0&#K1Us!r_nDMzFDYG9J)ow9x5Xx#xR#dIV3Pn9h}+HF5B4WK3%m^SmWto?3!E zQ*XjvP5s*Y-9MKN*R0(s9DMtIRk#TbfUc$^r8>KwmQp%fP0SmjmPjBUr%sOQMpubB zqe~W4lnWuSH1Csu`0tqPN?2rtiKZ#EMl`1*BGOjjcHViV+3H6=>1q=C=il9py% z6QHiA>0DT;0#$LVDBz6E`r!CxvZ9EIaZLPzN91sN61D&dLR|D0`DnLLlAGZvJAp7L zX1>m0^pECceadTTUSS*pWNW+DB+T*x&WGEz;Vv8-pc64V0@JNi*+P{-4f3rTvPEGn zyN4}2q&H#niL-{Q7SB14^}{mKZg`Pp@IYH-i&(%^4IKSltNI)U+srG>Sp)=x;PiB#{3R!+8Y&$jH&?h9d3>H5OQvG|?ty$^tZXZPKTy##|N<0Y}6fXht1S#`)U_eOsjoTum$pDm$%mBVJlfGzwjD zYy0bE+yw_+5=cXZHpL2pRiBIRuF43YU~{Ak-%KVb^csdVovLL8Z{p`|oJt=JxSFr| z`NExx*Q5Dfy1#1aOU?j{Qoms7T>YE6?oDkSX)^M#Kt!ea_4hE{lt*aIMM5Rd{vLHd zQn{efuS<%S-|3B36wKBFAWuEi03+GkI{yagS1EOK0K|Nt$Mtx*a&N~5t>?eP98Zqh zG+>9aHRS+`t?NsFDfn(XRlHS~lrN(!Kh zLs5unBW7JCSfc(5{G}tOy6d=37849hbu=g4mULZpjlYbGIq$t8aok(td;{?^1ZY}L zO56DBFlSzi3JoTu_Eig(%{$~RHDkQ#X@F!K6r~8dr2{xjFxoBHRvo;7!CG|#ZONz; zet7dVbCeeij;f%>m6y@>?zWt`iourrMArbUHguF3*(-QGl^mvN{58sTTCvWnRau#klzKe_+P^vMwH>z9t7uapCcF))xyamk|F zPLvMU&3j7n$>g8B)qqav%I;%2A(G}pe4VPlMv_$ek-dfN6Bt7ew4)fns_~~ z!>op2du}^&p##VnMo5x1=|^G9po7ttL2@0$69H(r%)`{9sB|W2HGd0`HY-|5{hqf&POY)iUSdEdu9i+7ujY!~Yz2}K} z{{A?}7JMCnk0YOr2nDZ;2Wrz9EM_5Pb;k+diuB(r78^LZehnA^n*SK59WZ<^qZqps z1S_pXx+5Mv2LU(h?)E3Xfkl%D#gDhM86NMppZ;t7XGW6~h2sE=mo-1{$AfXMM zOD~68Oi51EiX++lwaPaiL2tc=rW|sif&enM9&&62%hH9;3kV8N7jC6c=7^v$51yeN z7neK0RRGq$j;M@IK;TJh%iNJDVwLhV0I?1wj__tit(^yqvA-=GHUN(bzU^T|5us%OhTk!eXKXy0JW>+r=JDW7$QI{X$P;s> z0B?XZ8^WYevkG?g)#qK_gF^XL8dpfyb6Dk_2Kwb0 zBQbO9y2A1p6yQ}R)BU~h1FY%Y;^_{k>{9P=j8&O~GKf$psr`D#Qwl48$4@%)tuD@m zrQ%$uPy;H3?X0d)0zx)j$lM8K$N0btY$=esyuK|cq(^KNnSb(L%d|T9)rj=aJ(*~U zT3jN?n?o1se3u&?C+3}F0))6vHMMc1{v;JMRJ%2EK6JZ`0#%zUOjB2WrW3gaDhN-TXU7U$!$9 z;JOY3Dm!ikO&i{@A4W2AtJ<^`*pxAU0<6ZGD}%+q@BhhK@2tt5MTnApxd?=Wf~0y2yhiY0uS?*YMs;c!$0a zWJUJ`5vd}jRp{SoZZUu)`LBwizpD~eU8z5;q5Hd~a<2YCXJXRqoHYoBEZg$xiZIY& z+n9aiu+I4(qrGfk=aohfe6~k(~(P&)mtX7xw>Kn zv9!uyp{XD#EQ46;0EDlz3{|}U9Y`)sb~s<8YAMt)WK1D?0Qkt4*QeH$6VvVqT3%I%RG*BMccH@AC zlfL7iZO<~PIbLhNVpLOK)|CG_cgM3h-XY)HND6Jjcd;X*+1ujXCOq#(% z%hw<*!**$~sO98~hXOSt2c{gxhk#fmanfa(R=)4mVySR$U3cn~LsbA>r!@0*>6-j^ zbxP^{G#K1_7}S$xwG183)Sx2><0%H$id1p#;ij#22f0^h8Y9ZFg9D5DtlAu-IP-Nj zgoaU4s@$NYEefE$pC^Pix{E#m>&TgR^V~0&nyj>-OoPVU;SkFj0tD@hs!xZpl<6V6 z-7`q~&!6y!!|%A2Xn6xEryD@`02-U&FMYV;n(uamunSfklG>cgu}k0aX^Q~Z`Qchr z=v8uZX;I@1o8O5(La~X=%vQgFr-SLSuykplw><{cmfN^`TMhyb(}6R$Y!}1sSR$|^ z2)BiwE6?~2I*mIRq+imMB!99vxFPo*K>Z{RjZ+j4XcK|Yp<)sfas+yC>A6yX8Dos+ z1U0T|Ndn)&9wr|@UxfdmcXz>~?riquT1xu2Q5D&DDe<_Y-ta$u!0nKoJ*~-hEX428 zClxqW6wxmwF}6pZ5ApNASpTgwB&7LasuqyJ3Z-+C3o)j*;nHc2L0Er@En~!2Dz`#d z*n5Z0R=gs>&K{-G(jbJXc=1NvwH@=Cqs7OhjQSEM=v2neM;^3gH}WkH*i-l(V4XQ` zaNo2lwqwhQ_);w>bfT-^9j!oD5)P3kg~+A*$0(9Ur2e74rVZaSwpT zcmRg3UNJoMo)DqqUhmEamCa7A6RK%_GV~ENXZl71e@~)EDemhPsYdoi81fn#@{EP( zT7zYH2SBqm!H84i^k*(rv$*qnW(1b7Qamt1etz4}{zB07Ub0^hh!1eUGOy>{X{;92 z1?g%a7^BbgmD`-Z>(v{gqpk@p?>4hYz%MpeDt&;Fy5fHH0m#AcM9Pk_n3z3s<*Zc(=6crnf28fByvlwJ#@omj-penAIRR;W^fq@91tU?|L zo*(rL6n)1`Cs6Ul&FSOf=M)W;8s|xeC1HxoY4urg3a-fB@xg0%AfDykfBhRwn4cNzy z$1X|=oBqh4*8uvXtZ6o)0+!4Co8A(hB(RrXd>MFjZYY+%Pm>q3)*%~L=Fxhk^4en@_RU7T8SGD)~YP9Q#+j&VFVQ&*<+s zQo2#qE=|p$7gjG;c9`M&rp)|GPv4*8 zdY)>QRV9!)w6aI`VR=U#^cX#bg}xJjOXz6}Xa1qPW&!FuB6p5|kUfxTLI~vH4Pp9U z;eH*==y=MION(|eVAT$1MC?MhHfon_DmN31Us`to()fOT{Es>L@3}5?Pk8Q+ibeX7>vxN2==(=4(DTyw;BQe_+8 zdx`pg`>+lhk3bGsb^-s$-zn{`q>kP|?4e5d>K1iJUYPnPQxI+1t`Zhpar(AE|}E2EU6u)4Ts4g?A} zoCV05#oP|=U$A(Xah-Ikpo(y=DNFG0il>+I#BV6JDw>_k!S$}9L_<1#&AthN(d1j5 z(SBHap1uqfoqw05)fgDOOe9(9{%2~;vhbS@#>7_R`EB+n=J?YA^(>oyyjC-jf6Gxi z9h4+7CtSP_9g2vUAOL4p6+E9wdU>b-zBeduKC2^hldV2u7o@Ywr5Y7XM@HygwkjHW zRvBo77C`DtWk)ypYiC!%PkxTSM;^6#A9;811)70?U)C-snzF|k06WX$1(Qop60z$25u$2t(q!F(ayJJQvwvRL2ulmK< zG%>l1Vgt2-f=`l>!n@wxsd2m*yL;-p~Ej}yDIL}FIVO{=V@zT zUHE~bMOVVl*j8DpTNtiswj)_7U2#js!jKyHjmx?Xeb2AR)|oO*vtgjF$b3t@YJiL( zjYX+AreH)-Asdqjqof#Uh(GvI`Gm3A$&Em#2dSHfPqfAk-`BeMXx2s(A?}fjS7ktY zN+2ChK!;OkjS^e)k3-bSm~b-W2zxOO-yb4AM^h$(Ot)>RIkr>}Fw?9xd{uZ8^_;EH zhF42d{LDtF9~dB!xe2gR;}Si0wCUPWeoxuTawl7oWMN|wyAU!k@`{+TGvZ(cH?6>J z!;%rj9NZsq0RQsKeu!BdRUqmNfZ<@?uWo(m{!wZ*JEg}3%80J6dkMZV(GmHwE2z`x z#5nvh?_s*I)LwCYC)&+_M)7oZ)m&6YU!F`zibz<96t@#I%9e}M-QA@C3OV1Ra}0c_ zrQ=#&yln1|xjRF7%3)bvPd`NlE?^LleRcL68W?fIh+AQ=Ut`{>r8Ba~z^DgkEH|Ob z#WA8?W~ZH=M&}#>3`7INC&Gu6SxK(V68gdse<}+pA<$qBge=`6YWO-gYSrOwj$hZX;I;&FP z;lzDA)euERkMYfX^}3d07|{r#E%XlOFCe=3bSODr0V^w+W>3{JCZlHipCZsW1+oS$ z3IBN2bahkq9@ll_w@f|uIW`7x^>Vgzgp*z}?pu#LoN>$| zFKh@iYoOS}*(yP=q@zwP?lSE`C!N5q{l$?IDRkN#ZOTiGg~&Ll=yLPX4NG zuyu;O2k-SdtW0e?m&cW5cvkzEXH3HP{ zhOh0o1sH(o-gYf17|`2E&dtNB+0olpz~s!d#5IvwapfZWLd=%n(EcRIK|wF?`5W{z zyULjSlm>~E4=Zglg7q-j@fqGGs!k-Yaq*T8ORi05?(fcRl4p+Hf!6z(@9J(-`~kRj zV9_v{PGwtQ1}&_NqcY4ag&kf)N)5&bIiRIGbX6!xnOG@8ijRP)NmPV-QLEm@llPcL zIHrfgM6`(ns67|b*iAt4(J`dXBY8iSh85bcaQLd#&8Lyr z!ukS;Ys?8?p;SVzSbavpE7^93gdNryyfm)r#!Q#O@l)^2s?hF@V79@{CDc?;sNpp| zw$^$Sx`9%?F3SnMmllC#176Os5SoJIaRVTo%b?%AfO+1x$7&m`WF0a&CyRLCvd{Ke}H6(^|8{W_PbEHC*X^roqM*(&lzzTftH=H{YI`kqXx zdXKqF)n%v7`v1OwY0t@Y8ygHgU}rQN#x1}rn+RwBzF|lV;OH4Uj7(nCP?Jq{m~&&_ z4#?rc@mMeOVkZ0?zd=BDcQ@ol{6K0Xjyb0bKpFrgY+Ujn3jz( z-1&PATVkjjAaFo9uCJ`)rqo5IYNUtu3OapZ1w0M`W=0fX8~o;@1Db7uqBi40165za z|M&HTiF{_Mh9KFIUd^~^>l$6)@crLsO+Z*1OASGXQP0cQ6&$e}5%F_LqFjK4IUI+L z_PWNxb!9ZF&gh)Gn}FeHOAW~I!_iE~C4B48tkHSBFW*Egggt}xR&7Qp8Zo=NHkcOe zGJ`Ogz&>D_Z4tgGnv96Ojf{KX4fK8+hDTcTk@S}2$nlOnR3M6g$0WcJpFA2wrqBsA z72Ob+v;x2|DSbJVO8~~Ya(EVx`|`FU$Xqc&f{t5)F@MM7fZpi~<=qL0X-l$C@OY47 zg2J+<+$NDUL;(-g_V@lNyJ!S%U$=cpFE`=;?)t1qvi+nh8YN|jO$KMc>_~EFUSCUg zw(UE!S>#n1QaY~<@EridIFo5E-RTPzZ<@1|AHudaG!t0Lq^3g2Vj^p^aiVjK@wY#_IHM~*DQ z2Aa|LqJjJP&*WSGa?qJ)1lk6@Y-+}s$q^_AW(FRg_e=x%0+Ctd*Sxu!f#~qVAci&n z*pHilh~sKNzrslH8}g;BzDMx72asP97z7e=*<=8vh6U95>{8nJ@7w25craAA1@=qf zmk=WN+rsI~+0IeY5mz%yL(-#>~7MSltjg{}O0&${@PBGK!s$K<;z zBUN9#$)IX{llZ(4Qr zJ#%vlFxb1P0L9yf+5#is2uym-GqMUta+2^|eHSAi&-6MD!bNr?DJl`XlBz((%xc%hmY_+D(mQHS^>SbH)J3 zsKLgw9i={9(M;t%DPMs|$U5W$r9NNBEY!*jAKQ@ZujM1ldSSm~7`Gpmz?yxPHocWP zc5L{IuTOnwmHVLwa2h8s{Qj@>fjxmUwUV`t>@-t2)=f@d9yoT5Fs9)|U@#qw)L0SW zT&Hx~wetuRFC>1bA31|lrlJJHQOmR~!w6nghgwlt4|brF6f&v!afs=jTfX0SPdhyU z9Z7suQ^~cmk`8$Za2Z_Ns-p>soiJEC&WW@>?ukMgXO0@*9=15_M|MpdNFnJ>*=_>- zV&XrY@=79r?k6u|ypWRmK$g+qVZTZBCEn`ZJz8Z&z z;qF|ci`lr8fzrQVzpM)R3u*oad+enPp_-epWFIr^fKZ(tfDluSzYfa+QbC5kyyP(W zOj?Xvc`%@GvrCS($KL$`HSlEoz@p=4{WtX#A%2fL#=>UN6aE0G0mTv`=J_%iS?I zL_RuJlbG7${4z`R`&IFO>89QR zFJGT-!j#fOd09uwxJ@Un4N%xiVRKU$#!f$m=x9LQo%{S+E&rA~@`W2rM!wHWIJHzW z@5*D-3^X5gI#K54?EqCz$wS&VPxUgAnZ;pw<~nkDcZ5@3&y#{%w8%F0xyjm`9jV2$ zX6e1JK+e3iw34>330LKMUbe2kvi1@kz=+DZYbE3!y0ZfI=$rupM+isLE$83WD&q?nC6wmn%OhgeT2hK89D&J23 z<(Hv;+m-qeSUeDCOKfzogy=2J6M@>JZnT)68lG=)Q3=?ijnQA0e*O++ol6nT!OmEI zE;_xG%IC2jT9Q54zM4qdk5W(t;N$0C&Ab(s7B8jkJn%VCS!U@5z66=j1=h6@-ethw z!w=VV(UuvU;x+a3lI(<0Mt$@&55x*1lcSReAR4I3V4v%IewJlNAgm;mV%wNb=E!+s zT=Nq2t`ZZ&6Pt;UgFz7$5yhrlAm+u=mLqB#QNm2svl;-B@gIQ{adg@Cj6HU9{wwx} zGP7&-nK28)4glg7LIsNa?}tcdS@77#Xt{eubv7V|I3w;@kM(24rw#PW$~*M><)i)) znL#omgOzl+dq~gAbsE!bK;+uv4kw-TxdN`{8MWH6tkddRc06RlDEx!&(ahbTIU(-L zK+n&W>sxx+sAQ?K1y<@tUukiNFom{l&-o#uH12ViXfp9w-14x2v-RNYMe!!@5)xVt zM~|vvgw35TnMY3;Wp~oQTIY2Q^UrIeLKpINg zB|V?XFmm$6-#;G{xP3OH~&g za)vX$wzxt;f%A25kZ4$Sy{opI~BSPmo7ea(SIi)HJ>dAIZ+k%7HG`8h-l7a={P@oL^HPRv9FZ_%PwK3 zOBq4;RSM{80e@YqRtBMS(Z`QMo>RTT>LK&OJx6T{h$xwz^)2im;xgQYryBQKH~k4P zE1J%jM2J$_J6k4GfI?ve?H4W9aLn;v0Cc~!-Bh2GR_`yUD`;++WG7wMj4p0BFyNl) zem*{1^0{?AnZUYdJ8%doc>IRvknixd_D=vEX`%Zx)KNOWqE4)$aAFxdeWN$6V^hjn z&+*;R+{ua5JJ-tE8p zRT1otv+ALskyRFu+W{U~slPbUQGd3AMn@xy|17W|gUub2T_*kz>U!vBgg{zH-s_Yd zFx}WnJVS?azBeu+$!8-v+~vLhIp(afUl4MG1$Q=<8((cjcW+y3?DI+3iC)j*8;UlN zK^jg1m|v?E-z#2W_14+ODNlJf9T^gqjRpWRDmEH7mg=4gnG>*?t9<8prs6g|+f6TU zmtES<8s)YD(ymgE%mO(NE}1}AEm}E;GJ~fycyG|BjsG2ZZokc_K7Kg_hkw{Fzt?^0 zB^Ud$G80|$S%M3p+e$v|lf4Cx=xr6bMyr?S?6Ee%0&_9KRB)O)mCc`DQP-T89bXYO zQ5|Y14l!N3id{~Sj#!Cu2*baOp4rL43mZAIL3QMSwQX~zki$&<`wc1(h`LsB7E#~F zIi3p_qA$7@k42#Fm(zxBbe!G#HW-Br#~k3AJ!*uUCzvej2|!p9$G+y-fcUf%=BgE3 zs-g!&23jOarsvcIl#cyQOPJ*Bq~}rvZ$>)F(I~vNrw@=g>L=#@o=@2f+nIy~d}cD!Sf|Ozs4ygKLiYCKm5qgt}eaa5iUWnL&6D zfs`^ygFm3q^{Z{u4R_{A*XRmb28;&W9)To!>h0c#&6>|8FYA;m&$3)mBno@r5Z$5c z&K;Ejh_LtsIFeBXJXHGEue^W|`wF zr&0+m9oSAZM)@G{Y68Q4Ir2L}0qgpU+LAnBbNtXqR?|(!8iLUvyQ_EvL>smto#tXO zGGO1A9deK5@bbMzyv=#vT|lO-eL2@Tl^u8jf)$m{u_7k!UO>-p5vF0f=30Ol{MpI! z7`YhPR?2aBTJv)pHMwLo333qPhu}b&r1Ab&6LUAQ(m5AcDvUO82aXX&eAuT{zjn;Y z`6^@?_jdANdEC>o+nc;zD=-MXhm60`IyMq9&A0x}SZQDI`vqL%@ErK|6-Q!tDVzHE zuO3X;!ek=3A7Ec+{#R%1HSlBL<42BP?bF{E@}A`)fLmcc+)c{_0XI zlEf^(1iy{w7tLH=%Z}^~I<*00K%mg?$ca?6dlf&OAnB^VpT}-F)cL~H+i4dV4c)E_ zfVZsrZ6Ft|_qOb$YXc`8f=f}q4cB8^KMvptsM$bX28<1wDXa7G@0XK*0dfC|zOSrd zXH@a6#3j42F@YojE=E(c7PvtqEuogv*KT^^{W?$8;ttCMvkCfrHRipQIr0Y8h z1w>kg1vIrf=L?X~{aoM{^be@9VY8RK!j#^1*fQe(loNJKIc53_V1JD>O0m-iI8cSR z9)s?f?=)eLaWT?$Wv9)VR_kx_&+O)u;_U`18*^dkx+i#v%rL>``rKXhl0nq8I3@dP z)>+4ajO_K4W%SlpIHH_=&Q#KEM|~>n5tNJnW)@WP%Rhn{z*0V*gHP*fBtn0ZP*2h^ zsVA(J7HtF2a$y*R>*K>PnL5$FR_eWpjWF`#mEe-fB_C8suXPpIo!tswmjSX|NMYY| z$6SZnE1LOSsgvH9tnQTe#nW;^h|f*Vq#3``pfLR29rz32w(+5N`ZztN@R*8a&^JA4 z;Cn)6U3 zMkwVJx~}=AnPD)g!0+E@Ipo+zTjp?@So*f1I^Z`L?2@3}c`C~tif)OyPGfIpo{M@t zMvb~a>;vIy32{~OCwjmR7yv|iO-lzjrOjE6e(xH#V`7$&wlm5;7;}HWfOobBBn$4- z5QnyHE1)fOXi4I%Mu=u)kbMV%ihOD5Vt?pDSN+HuORH+wei`6&0#osN{6l2=F{Qqw z!%i?!wWki@=c;#+6pln?Q#y0mw<%PcLm6gcnv30SIxZs}B`xQw$%QyhtK`Vedr6d9 ztTJ)}uEQ(DOTX4!7QAVYMZjedjN&URnp+AN0O#05XW(a`2X-oX_*=Y^4t+~%(R<`2 z15IZru6S^-{v7&;t8j{QUx9k7aOw16ImTzI7-lqYTF? zq+hBBAjMqsN{VHU-nvQ3#gFN~mLuNH8BAMthB#^(Fz>c9PRxcZluj|utZ1dINT zyl|!Exz|2xFJ*C~Ri{1wEUs(kG^2^ooOVjtsXNKLzI)7)dL3Us@Dew}8O9QAbIo(pgg!7kn z!Wpk|@GB+4OBle4uJQCFggF;0GG|W4%!Id zt5hwl02U5<$+rK~){}qp1iY`OPy9^tF96As_1t^gTfOe3srhOdSqzn&cOt&im9<;7#mrKYQO2G}-|t`i-0 zEo$)ie~B4<9Qaea9JC*KRc!mwuX#ixLb%;=F6kt1+b=ohKN4wWG3Lh0pfPeO!-ys$ zs5CHMbrdnWY!k0Dol)?6(=?9yu4|980s@eM6btkeo%QR!5Fib%bg#(k%1oS)-b$}> z54ZMskMQ4{L3S2YfxOkbsp-bqIZieQoN7)0fq=EvdwE?4GO!`8Xj+iP4TYRsW1{wQ z_)N)8_IkM=flChw5a)i{jcfzccs&;tYyy?~HNbq&@Zh1fr?EE5`p%VK{ryhx$k=IY zl=&HR`j~J4VzYKgQzMP^3PdaHdiDyFF$WjZGUDGnz54-QLH6%t!`GFDd;wDe%sDW0 z6kYJ>`8-wosej}FixA&^gubsaa~v$Qf%bj6e2oVJLkdZP7f=`(IhUC3cjuE95C~VE zGk0H^mL3|$pk63@zXk*nL_2z_TqyKj{?lpvAw7wU(7Zae=|Pd|})Hib%^ z9ABFzV5FDpbvGLIHNCbnMnZI}OtGwl?`Mcpp%U?!*(R&L#=j`sE zj&Ipid;V-3AxfvaNf{}1kGV;ihtGMW_z$}7M&pt7BO>cfER6K#c5|U`OklifhA98T1jWzb$y@VIQQG9-_7B_X9E8JRrnq8UbU<9-jkL6PCxQK zX5N#;DiN7fs9DGDdHcHm*Q@%s0D10jrspjJ(Prb_k?h~b$fy3J-h&H6TsyS7f6~h2 zz3%iA-Wq%J|EBfG1eo&6#`{wag)2hoT8$jEAxj0upNp>k4?Wb3)fe4K*KJq5{xDk` z@XUr9wrv5xZyQbi&whKCsrmV)=jM^0t8QNW{_mv6+(D}+TeCX*rh9bQ?^J!pc;>;I v1^nRYrdy?PPbszhsZPRiODyDx|L^|*L_k}ot-oL_00000NkvXXu0mjfd3O2H literal 21447 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

A~8O^>o8@5DvOh0cXV?Z-n& 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 Ava 162 Rexy - + diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 172045afef..a7d54367aa 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -7709,6 +7709,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_HideNotificationCounters" = "Hide Notification Counters"; "ayu_HideNotificationBadge" = "Hide Notification Badge"; "ayu_HideNotificationBadgeDescription" = "Hides the notification counter on the app icon in the taskbar and tray."; +"ayu_AvatarCorners" = "Avatar Corners"; +"ayu_AvatarCornersCircle" = "Circle"; +"ayu_AvatarCornersSquare" = "Square"; +"ayu_SingleCornerRadius" = "Single Corner Radius"; +"ayu_SingleCornerRadiusDescription" = "Forums will have the same avatar shape as chats."; "ayu_HideAllChats" = "Hide \"All Chats\" Tab"; "ayu_ChannelBottomButton" = "Channel Bottom Button"; "ayu_ChannelBottomButtonHide" = "Hide"; diff --git a/Telegram/SourceFiles/ayu/ayu_infra.cpp b/Telegram/SourceFiles/ayu/ayu_infra.cpp index d3b76814f7..618adb22f8 100644 --- a/Telegram/SourceFiles/ayu/ayu_infra.cpp +++ b/Telegram/SourceFiles/ayu/ayu_infra.cpp @@ -34,6 +34,7 @@ void initUiSettings() { AyuUiSettings::setMonoFont(settings.monoFont()); AyuUiSettings::setWideMultiplier(settings.wideMultiplier()); AyuUiSettings::setMaterialSwitches(settings.materialSwitches()); + AyuUiSettings::setAvatarCorners(settings.avatarCorners()); } void initDatabase() { diff --git a/Telegram/SourceFiles/ayu/ayu_settings.cpp b/Telegram/SourceFiles/ayu/ayu_settings.cpp index 0a3e50e1a0..d7b9b2198a 100644 --- a/Telegram/SourceFiles/ayu/ayu_settings.cpp +++ b/Telegram/SourceFiles/ayu/ayu_settings.cpp @@ -17,6 +17,7 @@ #include "main/main_domain.h" #include "main/main_session.h" #include "rpl/combine.h" +#include "ui/ayu_userpic.h" #include "window/window_controller.h" #include @@ -466,6 +467,7 @@ void AyuSettings::validate() { validateRange(_wideMultiplier, 0.5, 4.0, defaults._wideMultiplier); validateRange(_recentStickersCount, 1, 200, defaults._recentStickersCount); + validateRange(_avatarCorners, 0, AyuUserpic::kMaxAvatarCorners, defaults._avatarCorners); const auto embeddedType = _messageShotSettings._embeddedThemeType.current(); auto embeddedTypeValid = (embeddedType == -1) || (embeddedType >= 0 && embeddedType <= 3); // from Window::Theme::EmbeddedType::DayBlue to Window::Theme::EmbeddedType::NightGreen @@ -948,6 +950,20 @@ void AyuSettings::setCrashReporting(bool val) { save(); } +void AyuSettings::setAvatarCorners(int val) { + if (_avatarCorners.current() == val) return; + _avatarCorners = val; + AyuUiSettings::setAvatarCorners(val); + save(); +} + +void AyuSettings::setSingleCornerRadius(bool val) { + if (_singleCornerRadius.current() == val) return; + _singleCornerRadius = val; + repaintApp(); + save(); +} + void to_json(nlohmann::json &j, const AyuSettings &s) { std::map ghostAccounts; for (const auto &[key, value] : s._ghostAccounts) { @@ -1034,6 +1050,8 @@ void to_json(nlohmann::json &j, const AyuSettings &s) { {"adaptiveCoverColor", s._adaptiveCoverColor.current()}, {"improveLinkPreviews", s._improveLinkPreviews.current()}, {"crashReporting", s._crashReporting.current()}, + {"avatarCorners", s._avatarCorners.current()}, + {"singleCornerRadius", s._singleCornerRadius.current()}, {"messageShotSettings", s._messageShotSettings} }; } @@ -1128,6 +1146,8 @@ void from_json(const nlohmann::json &j, AyuSettings &s) { s._adaptiveCoverColor = j.value("adaptiveCoverColor", defaults._adaptiveCoverColor.current()); s._improveLinkPreviews = j.value("improveLinkPreviews", defaults._improveLinkPreviews.current()); s._crashReporting = j.value("crashReporting", defaults._crashReporting.current()); + s._avatarCorners = j.value("avatarCorners", defaults._avatarCorners.current()); + s._singleCornerRadius = j.value("singleCornerRadius", defaults._singleCornerRadius.current()); if (j.contains("messageShotSettings") && j["messageShotSettings"].is_object()) { j["messageShotSettings"].get_to(s._messageShotSettings); diff --git a/Telegram/SourceFiles/ayu/ayu_settings.h b/Telegram/SourceFiles/ayu/ayu_settings.h index 944228f5b4..67e4fb5a3d 100644 --- a/Telegram/SourceFiles/ayu/ayu_settings.h +++ b/Telegram/SourceFiles/ayu/ayu_settings.h @@ -302,6 +302,8 @@ public: [[nodiscard]] bool adaptiveCoverColor() const { return _adaptiveCoverColor.current(); } [[nodiscard]] bool improveLinkPreviews() const { return _improveLinkPreviews.current(); } [[nodiscard]] bool crashReporting() const { return _crashReporting.current(); } + [[nodiscard]] int avatarCorners() const { return _avatarCorners.current(); } + [[nodiscard]] bool singleCornerRadius() const { return _singleCornerRadius.current(); } void setSaveDeletedMessages(bool val); void setSaveMessagesHistory(bool val); @@ -379,6 +381,8 @@ public: void setAdaptiveCoverColor(bool val); void setImproveLinkPreviews(bool val); void setCrashReporting(bool val); + void setAvatarCorners(int val); + void setSingleCornerRadius(bool val); [[nodiscard]] rpl::producer useGlobalGhostModeChanges() const { return _useGlobalGhostMode.value(); } [[nodiscard]] rpl::producer saveDeletedMessagesChanges() const { return _saveDeletedMessages.value(); } @@ -457,6 +461,8 @@ public: [[nodiscard]] rpl::producer adaptiveCoverColorChanges() const { return _adaptiveCoverColor.value(); } [[nodiscard]] rpl::producer improveLinkPreviewsChanges() const { return _improveLinkPreviews.value(); } [[nodiscard]] rpl::producer crashReportingChanges() const { return _crashReporting.value(); } + [[nodiscard]] rpl::producer avatarCornersChanges() const { return _avatarCorners.value(); } + [[nodiscard]] rpl::producer singleCornerRadiusChanges() const { return _singleCornerRadius.value(); } friend void to_json(nlohmann::json &j, const AyuSettings &s); friend void from_json(const nlohmann::json &j, AyuSettings &s); @@ -543,6 +549,8 @@ private: rpl::variable _adaptiveCoverColor = true; rpl::variable _improveLinkPreviews = false; rpl::variable _crashReporting = true; + rpl::variable _avatarCorners = 23; + rpl::variable _singleCornerRadius = false; rpl::variable _useGlobalGhostMode = true; std::map> _ghostAccounts; diff --git a/Telegram/SourceFiles/ayu/ui/ayu_userpic.cpp b/Telegram/SourceFiles/ayu/ui/ayu_userpic.cpp new file mode 100644 index 0000000000..f5e385d07e --- /dev/null +++ b/Telegram/SourceFiles/ayu/ui/ayu_userpic.cpp @@ -0,0 +1,109 @@ +// This is the source code of AyuGram for Desktop. +// +// We do not and cannot prevent the use of our code, +// but be respectful and credit the original author. +// +// Copyright @Radolyn, 2026 +#include "ayu/ui/ayu_userpic.h" + +#include "ayu/ayu_settings.h" +#include "ayu/ayu_ui_settings.h" +#include "media/streaming/media_streaming_common.h" +#include "ui/image/image_prepare.h" +#include "ui/style/style_core.h" + +#include + +namespace AyuUserpic { + +bool ShouldOverrideShape(Ui::PeerUserpicShape shape) { + using Shape = Ui::PeerUserpicShape; + switch (shape) { + case Shape::Circle: + case Shape::Auto: + return true; + case Shape::Monoforum: + case Shape::Forum: + return AyuSettings::getInstance().singleCornerRadius(); + } + return false; +} + +int ComputeRadius(int pixelSize) { + const auto corners = AyuUiSettings::getAvatarCorners(); + if (corners >= kMaxAvatarCorners) return pixelSize / 2; + if (corners <= 0) return 0; + return int(double(corners) / kMaxAvatarCorners * pixelSize / 2.0); +} + +double ComputeRadiusF(double size) { + const auto corners = AyuUiSettings::getAvatarCorners(); + if (corners >= kMaxAvatarCorners) return size / 2.0; + if (corners <= 0) return 0.0; + return double(corners) / kMaxAvatarCorners * size / 2.0; +} + +bool IsCircle() { + return AyuUiSettings::getAvatarCorners() >= kMaxAvatarCorners; +} + +uint8 PackedState() { + return uint8(AyuUiSettings::getAvatarCorners() & 0x1F) + | (AyuSettings::getInstance().singleCornerRadius() ? 0x20 : 0); +} + +void PaintShape(QPainter &p, int x, int y, int size) { + const auto corners = AyuUiSettings::getAvatarCorners(); + if (corners >= kMaxAvatarCorners) { + p.drawEllipse(x, y, size, size); + } else if (corners <= 0) { + p.drawRect(x, y, size, size); + } else { + const auto r = double(corners) / kMaxAvatarCorners * size / 2.0; + p.drawRoundedRect(x, y, size, size, r, r); + } +} + +void PaintShape(QPainter &p, const QRectF &rect) { + const auto corners = AyuUiSettings::getAvatarCorners(); + if (corners >= kMaxAvatarCorners) { + p.drawEllipse(rect); + } else if (corners <= 0) { + p.drawRect(rect); + } else { + const auto r = double(corners) / kMaxAvatarCorners + * std::min(rect.width(), rect.height()) / 2.0; + p.drawRoundedRect(rect, r, r); + } +} + +QPointF OnlineBadgePosition(int photoSize, double badgeSize) { + const auto corners = AyuUiSettings::getAvatarCorners(); + const auto r = double(corners) / kMaxAvatarCorners * photoSize / 2.0; + const auto edge = photoSize - r * (1.0 - std::cos(M_PI / 4.0)); + const auto pos = std::min(edge - badgeSize / 2.0, photoSize - badgeSize); + return QPointF(pos, pos); +} + +void ApplyFrameRounding( + ::Media::Streaming::FrameRequest &request, + std::array &cornersCache, + QImage &ellipseCache, + QSize size) { + const auto minSide = std::min(size.width(), size.height()); + const auto r = ComputeRadius(minSide); + const auto ratio = style::DevicePixelRatio(); + if (r > 0 && r < minSide / 2) { + if (cornersCache[0].width() != r * ratio) { + cornersCache = Images::CornersMask(r); + } + request.rounding = Images::CornersMaskRef(cornersCache); + } else if (r >= minSide / 2) { + if (ellipseCache.size() != request.outer) { + ellipseCache = Images::EllipseMask(size); + } + request.mask = ellipseCache; + } +} + +} // namespace AyuUserpic diff --git a/Telegram/SourceFiles/ayu/ui/ayu_userpic.h b/Telegram/SourceFiles/ayu/ui/ayu_userpic.h new file mode 100644 index 0000000000..2db137e74c --- /dev/null +++ b/Telegram/SourceFiles/ayu/ui/ayu_userpic.h @@ -0,0 +1,35 @@ +// This is the source code of AyuGram for Desktop. +// +// We do not and cannot prevent the use of our code, +// but be respectful and credit the original author. +// +// Copyright @Radolyn, 2026 +#pragma once + +#include "ui/userpic_view.h" + +namespace Media::Streaming { struct FrameRequest; } + +namespace AyuUserpic { + +inline constexpr int kMaxAvatarCorners = 23; + +[[nodiscard]] bool ShouldOverrideShape(Ui::PeerUserpicShape shape); +[[nodiscard]] int ComputeRadius(int pixelSize); +[[nodiscard]] double ComputeRadiusF(double size); +[[nodiscard]] bool IsCircle(); + +[[nodiscard]] uint8 PackedState(); + +void PaintShape(QPainter &p, int x, int y, int size); +void PaintShape(QPainter &p, const QRectF &rect); + +[[nodiscard]] QPointF OnlineBadgePosition(int photoSize, double badgeSize); + +void ApplyFrameRounding( + ::Media::Streaming::FrameRequest &request, + std::array &cornersCache, + QImage &ellipseCache, + QSize size); + +} // namespace AyuUserpic diff --git a/Telegram/SourceFiles/ayu/ui/settings/ayu_builder.cpp b/Telegram/SourceFiles/ayu/ui/settings/ayu_builder.cpp index fd90236667..7ec8245da6 100644 --- a/Telegram/SourceFiles/ayu/ui/settings/ayu_builder.cpp +++ b/Telegram/SourceFiles/ayu/ui/settings/ayu_builder.cpp @@ -183,18 +183,20 @@ void AyuSectionBuilder::addSlider(SliderArgs &&args) { _builder.add([&](const Builder::BuildContext &ctx) { v::match(ctx, [&](const Builder::WidgetContext &wctx) { const auto container = wctx.container; - container->add( - object_ptr