From 4d9de1a81a02c4c8892c2217135ce6807b3f02ff Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Wed, 1 Oct 2025 11:57:53 +0400 Subject: [PATCH] Use custom navigation bar notification filled icon (20.39 still needs a bytecode fix) --- .../youtube/shared/NavigationBar.java | 19 +++++++------- .../misc/navigation/NavigationBarHookPatch.kt | 24 ++++++++++++++++++ .../revanced_fill_bell_cairo_black_24.png | Bin 0 -> 378 bytes .../yt_fill_bell_cairo_black_24.png | Bin 708 -> 0 bytes .../yt_fill_bell_cairo_black_24.png | Bin 394 -> 0 bytes .../revanced_fill_bell_cairo_black_24.png | Bin 0 -> 237 bytes .../yt_fill_bell_cairo_black_24.png | Bin 434 -> 0 bytes .../revanced_fill_bell_cairo_black_24.png | Bin 0 -> 415 bytes .../yt_fill_bell_cairo_black_24.png | Bin 843 -> 0 bytes .../revanced_fill_bell_cairo_black_24.png | Bin 0 -> 711 bytes .../yt_fill_bell_cairo_black_24.png | Bin 1423 -> 0 bytes .../revanced_fill_bell_cairo_black_24.png | Bin 0 -> 848 bytes .../yt_fill_bell_cairo_black_24.png | Bin 1287 -> 0 bytes 13 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 patches/src/main/resources/navigationbuttons/drawable-hdpi/revanced_fill_bell_cairo_black_24.png delete mode 100644 patches/src/main/resources/navigationbuttons/drawable-hdpi/yt_fill_bell_cairo_black_24.png delete mode 100644 patches/src/main/resources/navigationbuttons/drawable-ldpi/yt_fill_bell_cairo_black_24.png create mode 100644 patches/src/main/resources/navigationbuttons/drawable-mdpi/revanced_fill_bell_cairo_black_24.png delete mode 100644 patches/src/main/resources/navigationbuttons/drawable-mdpi/yt_fill_bell_cairo_black_24.png create mode 100644 patches/src/main/resources/navigationbuttons/drawable-xhdpi/revanced_fill_bell_cairo_black_24.png delete mode 100644 patches/src/main/resources/navigationbuttons/drawable-xhdpi/yt_fill_bell_cairo_black_24.png create mode 100644 patches/src/main/resources/navigationbuttons/drawable-xxhdpi/revanced_fill_bell_cairo_black_24.png delete mode 100644 patches/src/main/resources/navigationbuttons/drawable-xxhdpi/yt_fill_bell_cairo_black_24.png create mode 100644 patches/src/main/resources/navigationbuttons/drawable-xxxhdpi/revanced_fill_bell_cairo_black_24.png delete mode 100644 patches/src/main/resources/navigationbuttons/drawable-xxxhdpi/yt_fill_bell_cairo_black_24.png diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java index a0194f0dc..479f7c01a 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java @@ -278,13 +278,13 @@ public final class NavigationBar { } /** - * Use the bundled non cairo filled icon instead of a custom icon. - * Use the old non cairo filled icon, which is almost identical to - * the what would be the filled cairo icon. + * Custom cairo notification filled icon to fix unpatched app missing resource. + * Custom icon is modified starting from + * Font Awesome. */ private static final int fillBellCairoBlack = Utils.getResourceIdentifier( ResourceType.DRAWABLE, - "yt_fill_bell_black_24"); + "revanced_fill_bell_cairo_black_24"); /** * Injection point. @@ -292,13 +292,12 @@ public final class NavigationBar { */ @SuppressWarnings({"unchecked", "rawtypes"}) public static void setCairoNotificationFilledIcon(EnumMap enumMap, Enum tabActivityCairo) { - if (fillBellCairoBlack != 0) { - // Show a popup informing this fix is no longer needed to those who might care. - if (BaseSettings.DEBUG.get() && enumMap.containsKey(tabActivityCairo)) { - Logger.printException(() -> "YouTube fixed the cairo notification icons"); - } - enumMap.putIfAbsent(tabActivityCairo, fillBellCairoBlack); + // Show a popup informing this fix is no longer needed to those who might care. + if (BaseSettings.DEBUG.get() && enumMap.containsKey(tabActivityCairo)) { + Logger.printException(() -> "YouTube fixed the cairo notification icons"); } + + enumMap.putIfAbsent(tabActivityCairo, fillBellCairoBlack); } public enum NavigationButton { diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/navigation/NavigationBarHookPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/navigation/NavigationBarHookPatch.kt index 77ed5ed7a..92b65839b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/navigation/NavigationBarHookPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/navigation/NavigationBarHookPatch.kt @@ -6,6 +6,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.InstructionExtensions.instructions import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patcher.patch.resourcePatch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable import app.revanced.patches.shared.misc.mapping.resourceMappingPatch @@ -17,6 +18,8 @@ import app.revanced.patches.youtube.misc.playservice.is_20_28_or_greater import app.revanced.patches.youtube.misc.playservice.is_20_39_or_greater import app.revanced.patches.youtube.misc.playservice.versionCheckPatch import app.revanced.patches.youtube.shared.mainActivityOnBackPressedFingerprint +import app.revanced.util.ResourceGroup +import app.revanced.util.copyResources import app.revanced.util.findFreeRegister import app.revanced.util.getReference import com.android.tools.smali.dexlib2.AccessFlags @@ -46,6 +49,27 @@ val navigationBarHookPatch = bytecodePatch(description = "Hooks the active navig versionCheckPatch, playerTypeHookPatch, // Required to detect the search bar in all situations. resourceMappingPatch, // Used by fingerprints + resourcePatch { + // Copy missing notification icon. + execute { + arrayOf( + // App does not use ldpi icons. + "mdpi", + "hdpi", + "xhdpi", + "xxhdpi", + "xxxhdpi", + ).forEach { mipmap -> + copyResources( + "navigationbuttons", + ResourceGroup( + "drawable-$mipmap", + "revanced_fill_bell_cairo_black_24.png" + ) + ) + } + } + } ) execute { diff --git a/patches/src/main/resources/navigationbuttons/drawable-hdpi/revanced_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-hdpi/revanced_fill_bell_cairo_black_24.png new file mode 100644 index 0000000000000000000000000000000000000000..ba9154778287b0f833385ce97391a260c95f42aa GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4i*Lm25-&)VFm_9M^6{WkcwMRuWj@@8CQs};moU;R5pG+!E z$~eo)B<7!SSZ<@iDPzO7m`@U-Go+pEMO4f`ec=79Vt#64Qtpi|8MpR~gM0>AT~53` zY>O`FvZ?NKS?KSj5-`VDy!F|fg&m>KS{+2VDwg^5$e3q5*?mkch}%B&#Pbdh{ufhr zt6$QTYqSu0Q0S!6o%}22Z?2Dpw81^gx0eq&Ejg_u5_RG4b#@_J4mJh`hKCF@W-u@?ReHKOhEy=VnPJ&25-8Go zTh_4f-~nDAmg_D@LzoYWy85t+@|XxH8x}MEZ&|dk^N~;e@ad%Kge~GuV&*?OL=DZX=+vLt_EmZ$0eVTd%rJoVb>z5tkmdkUZ3;5 zKl?3OKA&0b+7X!Su~65eVk^%=sVqg&#m6rA9lP#W-5$VeZ?+_9hht3a8ktxg<4W7G zpp}MCY*#D^j{bh>{I_X5x#_=z=7{PkFHuwMoueq!{yFvMYDeTezI#mxw|ao#OG&<&Zk@5Id-!r3Qb(N zdP{E8Y1XalmmE=cj?ehV-CZ756}52Lt#^i|(vnr~%j2KO_q#1lU$gsfN`j`E%{IyG4EwjH($a9W&e)nnq z^!FF`Yitu-nq7R&V{3B9!f$uA)WYU0WMyDr`2YXJ8n0jm1_m}zB4lP*axB5Kd&}Hd Q1_lNOPgg&ebxsLQ0PJc(wg3PC diff --git a/patches/src/main/resources/navigationbuttons/drawable-ldpi/yt_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-ldpi/yt_fill_bell_cairo_black_24.png deleted file mode 100644 index 9f390c5146627ebca4d6095d13b46f63302efb41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmeAS@N?(olHy`uVBq!ia0y~yU=RXf4mJh`hOl#e;S3Cn_MR?|Ar*{kChaz2ag=C1 zKG#Lm>qVFnr)tSb7o~isN1`r9L8~eR{1uc1KX4UI*V=c!tpDA-nX-**i?{u^dw%BT z%$Krj|GhL`lhJZNqFuf5TvpC(i7*rYKSJ}^tyXW$U9>u*=Y^h4gK*=y>N8b3mbbe0 z{8dicULfRVaeu=_P*f5 zGHv3SO*{c&EBiiw<-Bjb;yL&KL+b;@A|DC*PyFz7TVOup{mUtm3v_0=-fO8fNZxjC zs%x}`^#=Yloz=ye6Wyy@jhTNZJexJ)`i79us4Z=qIR0~OUTru>%vK@qaPI-Yq@v*GT^GWruXrZN5v&Lw5ap7$>05 xH23NavyZ$C4FCT>Ph>mDz`(!;3QA@Mu>yV7b3dPlGcYhPc)I$ztaD0e0s#Aot$+Xk diff --git a/patches/src/main/resources/navigationbuttons/drawable-mdpi/revanced_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-mdpi/revanced_fill_bell_cairo_black_24.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e768ba52215e25266c77d256d720d8b7d2cbd0 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4i*Lm2CurW#S9D#TRdGHLn>|^y<*7MWFXP@ z&|HY4+i%0`W$qU}%^xqlrTv08Vh8JNxdun`6y=u2Qwbdj|1b1DkNv%L?kOE6llOYQ z4Z^)YmlbYU@`hbiTg~N;p}lQ~!?TG=Zc8gV{I=9LPg7pRlC0_Y;NvE~d6yQ~WW8Q+ zY+}rLn;{0Otto6aTIa= z`#?Y7&(mdfMi*^oXe2F}xQofKh~I6UV~OrA?xU(tI8&hi_0_)L zul&wmxEn0||BvMChDg0HeEaw_)*jo|b4z>2(;3=3j23K_x^0xjBxdJ|Kj%qpD_LT#=YaY z*2?Rv56CHtUwHmqe%_1!25V-UiWl6nc-4Jv=C%gib2+Aqrx&;t3%hwRKYM9+K=Ow8 zIUA!Vk~;f6nEfV{Ka79)rqE&z+m8=b+`P8g>GKcIGkJGzi(&Ty|tI3cvtq^YWSqt`i`H0 pf#LuE*t4oJ3=9lxpde>vID19U@R7_(e+C8y22WQ%mvv4FO#r>N!ifL? diff --git a/patches/src/main/resources/navigationbuttons/drawable-xhdpi/revanced_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-xhdpi/revanced_fill_bell_cairo_black_24.png new file mode 100644 index 0000000000000000000000000000000000000000..dfaf31c8b5348313f45a5b11bfad82f0a5e74184 GIT binary patch literal 415 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4i*LmhQHi~JPZtsX`U{QAr-gYUN`h+N|ZVN zas9!$i#&8)OM>^Zwo7HLR$Ua=cG~e$1j|~}?&=HK9c@uPHtMRgvezuU>>+D2p;{=$ zsqgc@^S0d&o^SuZ|MUD-%SlI%F1DZ7?k#p$=GKb(?8gZcY%T4lZZJIN>U!qrjI@*m zor<@4l$o8&JaRiPpZs}(H6%i*l}EiK!0@xBTJtuc`70!UFKSt)biT!yS+TS$L(|wv z^+t!06xW`GLhq(BC9$(~GBf_>NZq06Bg3&%t-0f|e(QYS~0ub8r1^_ur9hq)2qE19Ps*|hTF zWxIQeyIR{`r0^&2IniM5&fnq7ZMs#=jLkB*Q;e_e<_?n={nrm1jr;TU^JD&Z0@`;i U_OFX#U|?YIboFyt=akR{09;Y3N&o-= literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/navigationbuttons/drawable-xhdpi/yt_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-xhdpi/yt_fill_bell_cairo_black_24.png deleted file mode 100644 index 2eed03d8b17dbc774585eab9d5a9f600465dbd85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F{GWwo?wcI=f3NYf?S=z#5zhB{e{j~xU&{S0 zvv{>^)ceM}I&Y0@*!&NaI`7JzpPcm~uX!3{*ybhQKM2UMAHT9fcDd)*?K}ljPw7oq z#$lS(z34^4X@=>GT`#6?IdOb(Xv5<=2pIONG%60N_6-K_`cdB=ob|+~I$2;!L`1C?5!FK7q zL$L)xZ;m|RyfRs>eI27-;4_ssdtT4{EnYR}QSUqx%M#8F(}d#0)-1?n-McP%nYph_ zEYpun*^cQP+Wd=3)?Yd@k@vwnyY9bQH>9dw<@RnUH#^`pr~g2R;1|IcE4P~}{c2Q` zKJfplZS%~(dtT)BZm2eE_;oh%`<{UO?3Q%3Bg+2&!`<_x@_)RYv*`@mkKW(@Kh~gdq}QiGR_BGu8|ie74YF+$I15;hf2o{h8Cg-DzV^bNj0WEw zcN@D|vvYeyy4fmPZYIrf(lkC`7AJp5ONnvM%Y9*`S^6K?p4Xh+CYGSjmY?wIwqPxH z#AjW%xP_N=dZHTGeY|Up7v*!V_j^B`C!4YBrS~!3<6YS+Sbtn7P>fv*Vtsh?_^@{U ziWj>Y)_q>{v*~32!-y+Pf0CA^GwaW_UE#Gw;gi6XX?tWgFYC|m`p&+UVc}IC*Z8*F zB_}hw>vWm-Xot(7yWoEHk5~o_vz`*eT|MdXN`3wvUY@ocr%)s&^D)EPzl_LWK1B0ilpUXO@geCwB CXO3wA diff --git a/patches/src/main/resources/navigationbuttons/drawable-xxhdpi/revanced_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-xxhdpi/revanced_fill_bell_cairo_black_24.png new file mode 100644 index 0000000000000000000000000000000000000000..759f1b3869a50bec8a108b7767593e9179a9760b GIT binary patch literal 711 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84i*LmhW}5h&oD4B^?ABDhE&{od+WUSZ@lMCdUtK9^97eh zK?_&#p1OKq>%!#Q&xK1mR(#q0e&74^<#OLD{xYAx{rp4a<%<_LuGd`TV{o2J)oYEx zd6qztT;byjn|>yX$~@ZQImt%q^L3NTNi2SbesY^nf9hGx5n|6*bzPy?*}hR~ansFY z(PJD}n2x1#v%Fwfz0Ps9jDkX7(3P0xtTToUrCr7r`-|>`r%&9hq4VmI1z)MpG>4{-8ILI z)B`(SsUGE9cJ!@*w|_+r_RP3qzSbFeX+Ii2ZWJni;daKL+oXoowBnFJlG_c3 z-&~h+44NhwT%KZR7ye8w(dEm8Wv{GPoN}%bxOiNs^uA;1yi4sJ8rmi`?4~D#TwQw3 zXWVz3<$pxL(1B5TgD=~XrYF?8ZqUKFqMLP5!|n{}?!ktq=u zRFu+=H03EfY}62Yvf#s8gZD?8?iF#|U#8K)DmvrHa)IJ2N1L+F2pyWPyypN%-b}}u zolc=9D^7*hym%_=R-ylLscY<=!x1-PMRX;fE}pu8f6j7NLzyj86@1$y~rl~WGynO_mu818=jb_n$Ej2|oAoKbHlSZ!{bq`cILZ zXgAx_j>Q}?lkU{-KUu7jIXTeizl>0dMDF{Qu1#Ow2X~urE?RMp*USBQ-8W(1TBW2d Ur?U7M7#J8lUHx3vIVCg!0G{JJKmY&$ literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/navigationbuttons/drawable-xxhdpi/yt_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-xxhdpi/yt_fill_bell_cairo_black_24.png deleted file mode 100644 index 98fd7f803a61b7382fd8d5d400e0516d40a68424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1423 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D5IT|8YJLn;{G%s#nV)LrCQ zyqnSa6uFZ&=ZnQSIXzF<2yv(gaBwP~R8nc2(5W*?=P&aYeSxD>mGtg(=pC8*$SHhX zh=@qYmDa9*bw6Ax_EqPHUw!#%--Z6qdoMfBE#CKQ*Y3QpZ}+92=c!K?m0*$5K7Zzn z!Ucs3EUap8XrvvPB? zdp54?=k2%?8LeP#%Cuu&U3HSy-<7MOVCM6?jFNyGD}t_Z)N>8C(m-- zgH2~5ic?shvs@K(*_S|bfCMm6F%6|MvCrY7z)#E@ugUDi@#a@m^5*O5^X(R@0`B9=JF?fkv)tD%Mb6|?L*kHF`iMTr~l zD6tlmz1I2em(ePy5+1yH+17Y92fZCd-6AitUhHAm6Mv{QNj&(gtAN?*K9LjamE~IJ zxC>qHjQnk=_4}{jx;u+liYAo&*(v8W=}2kPwQ0?dC(P;cbm98Kl5=QXZPC+NGIHuW z%9-wRul%W&m9s9Z=*3-0m6abnqn53SODmcfoYr+YF>v~f%0Evg+?|=|qcKF~$rQ6d1}C*hJ=6*c+Ibmc6OkSb@~ zukxDtiITd;)W|6gYilAyuWg+|$f%Z`wCAz4YS^3B?KJ=M9t2^QXGby$fob z*S5I7qG0cq=LxC>m0?O3TBrPB|FMJhy7%PS>rb69?M_(daO|(cQFX`rXW6^%I~u)K zzTYP_JI7z}qwNf_--3%G*^S*5>^Igee6Thl>Wx{)KdvWz*?B9ODrZ$??)B!JUKpHM zRLj4tsC?$pv}sxw#Fu=Hb>4p|rErzcxg!56Z!=c~`4c~nMV$DqBkQSMet+th-Ysq- zK`d1bJ?H!igLA(f+-LI2rOP31_oBc@a^_yIoVy&NUwp|kc>Aomb*-=UM5PO5lm794 zYsxg8U-skGhjYthJp@n8>HhgVI!5~=yJLKg5dY3~3of!JXlCTBWRg|=EcHR`gJ;|I zVy-_YRTsLZ^-Y(s%4@7WbB2hMO<)Di`&f zvrG5SZT$20jU2D!v7BF#FWkcos%40c6GZR>!+Zb?$fU~&TrIT`1`m1 z!%eqA`YtWmSE?EC_g-3v49hHqTc9$GgHuu_(%QU6b1$c22WQ%mvv4FO#lEkq-FpB diff --git a/patches/src/main/resources/navigationbuttons/drawable-xxxhdpi/revanced_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-xxxhdpi/revanced_fill_bell_cairo_black_24.png new file mode 100644 index 0000000000000000000000000000000000000000..5ccf8694242c26a94f84dbc8340bbb5cd0aaec18 GIT binary patch literal 848 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4i*Lm29JsRH#0CWi+j2_hE&{od)wDTBvI!0 z$Mbr!we zJ<8ovBBzCgJx;olBsbBKN#n4xSaQUq%RGS`DGrT}eiIKUOfM}lYGt`1BD+St%`o(i zQa4M)wA&$x9zDKaCi0g!%!@MUQ;II=*`0#i>_$w?p(ZTlG?GWY(2#@y=rE* z-+z7m$IqT`cmMKtTy)^kH4OW)cX#*w*RKmNJ_>4IZMz_<^nlV^M!u;TUXK>6nkMM7 zQ825tp0VKKlSOOV^y;*(x$>@(aj|3%o%)J-(u!4~@&V1OLSHdU1#XS5J>VBIH%z`j zDD?YP_B*au#lJGX)$p1WEI(l>lj&~(=C`hAla-m}7O9-uFp+WpjP|bNj)i=SA1&U< z_&#vMM5d%QXIa*X8s3m*+Qw}d)hNrdqA9=QVO59l3~3LJSY?IVADtv0Y@Et)d?bD-$=$ul3G-{k)m zee80*99!)vqh~!L=^4xBe|-5X^BK>|7d=HPLY*#6-=!6TrkE{1&D_txz`)??>gTe~ HDWM4fyXtv@ literal 0 HcmV?d00001 diff --git a/patches/src/main/resources/navigationbuttons/drawable-xxxhdpi/yt_fill_bell_cairo_black_24.png b/patches/src/main/resources/navigationbuttons/drawable-xxxhdpi/yt_fill_bell_cairo_black_24.png deleted file mode 100644 index e4732bf2f23fa85a1795ccf4c871a577719e6911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1287 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofvPP)Tw7+U|>mi z^mSxl*x1kgCy|wbfk7eJBgmJ5p-PQ`p`nF=;THn~L&FOOhEf9thF1v;3|2E37{m+a z>3gKxRUxFZT;`KH%h}BHCl!D2YB#w|+MHno_EXUt{@w80496H#q+OUf(eLfa(LD z5A9L2_kFm};Je`SoQzxlW7lt5dRWC^y2Fq3M(hX83$Gmi zSVV2pN#$JgcGK<1HP%t9H>sstxqf^+BP??A$D%_w&jl^cJpHZfgfp`pvlic}wKq0h zZFv4+--S)h4_qJgHNR8uvp&GB_4)sD7c=Jj-z?ty7sY>&-4L1}bxg9>Y=80fg&)oz zi$74eVE>Cp;f;&?(ri7`T#x6-7A>ChxLlvPjN!OpIUoYsTv1@9Vv6kf@l8z!1~ z!8Rw|Cbyp_<92n6b6F18w%0e={;=45^Y~*SciS-2ZpJGXiL(X^KQ zTUKGt*?&{5FYj=*;*X4R<^CaBp}pE|(pAxbqc&5cp8xbwX39Dc;*soV^LEbHJzwo@ z#s2W{q)*g8waD}vU^?~_uPwPxJ;EtR^7s+Wnu|48;kUZNhQo)GgRh;th%&(;l~8ELQW6ODb|T6 z`+qLdiCXS`YsT_;-i2&`vg?~KpFUIiGdD#zanlkd{fz?ibaac~uJd+^;Mg6siIJI6 z!a(6>gD<1RhQLjXhZ!XdbZ$0WWZ;pQnseYB1CPYyD*1q;Z_ZEMx972NF%Pl|08I70h~~|Jf$j{;};PzKbhv{`(_*CbFbZ=}rCv@iUuF kY@X4)Lll~w1NS`PtS$M&w`Z9MsK{gRboFyt=akR{05=#!K>z>%