From e3fb75ad6a820fe546eecd282236ebb8dce11e0d Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 23:42:47 +0000 Subject: [PATCH 1/6] perf(web): serve Avenir as woff2 files instead of inlined base64 CSS Web shipped Avenir twice: harmony's avenir.css (~240 KB of base64, in the entry CSS) and public/fonts.css (the same ~240 KB again). Every first visit downloaded about 370 KB gzipped of font CSS, half of it render-blocking. - public/fonts.css now points at six woff2 files in public/fonts/avenir (the same bytes, decoded) with font-display: swap, so browsers only fetch the weights a page renders. - index.html preloads Medium (body), DemiBold and Bold (titles, headings, labels): about 90 KB. - A Vite plugin drops harmony's inlined Avenir from the web build. Other harmony consumers are unchanged. - The 2026 landing page's Dust Bucer hero font, which the hero waits on, loads as woff2 (284 KB otf -> 111 KB; outlines, kern and GPOS identical). Entry CSS: 379 KB / 212 KB gzip -> 137 KB / 27 KB gzip. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DmUrAQMioSmE4rsEgLPEQL --- packages/web/index.html | 12 ++++ packages/web/public/fonts-landing-2026.css | 3 +- packages/web/public/fonts.css | 54 ++++++++++++++++++ packages/web/public/fonts/DustBucer.woff2 | Bin 0 -> 110940 bytes packages/web/public/fonts/README.md | 1 + .../fonts/avenir/AvenirNextLTPro-Bold.woff2 | Bin 0 -> 30980 bytes .../avenir/AvenirNextLTPro-DemiBold.woff2 | Bin 0 -> 29380 bytes .../fonts/avenir/AvenirNextLTPro-Heavy.woff2 | Bin 0 -> 30160 bytes .../fonts/avenir/AvenirNextLTPro-Medium.woff2 | Bin 0 -> 30488 bytes .../avenir/AvenirNextLTPro-Regular.woff2 | Bin 0 -> 29856 bytes .../avenir/AvenirNextLTPro-UltraLight.woff2 | Bin 0 -> 29988 bytes .../pages/landing-2026/LandingPage2026.tsx | 6 +- packages/web/vite.config.ts | 28 +++++++++ 13 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 packages/web/public/fonts.css create mode 100644 packages/web/public/fonts/DustBucer.woff2 create mode 100644 packages/web/public/fonts/avenir/AvenirNextLTPro-Bold.woff2 create mode 100644 packages/web/public/fonts/avenir/AvenirNextLTPro-DemiBold.woff2 create mode 100644 packages/web/public/fonts/avenir/AvenirNextLTPro-Heavy.woff2 create mode 100644 packages/web/public/fonts/avenir/AvenirNextLTPro-Medium.woff2 create mode 100644 packages/web/public/fonts/avenir/AvenirNextLTPro-Regular.woff2 create mode 100644 packages/web/public/fonts/avenir/AvenirNextLTPro-UltraLight.woff2 diff --git a/packages/web/index.html b/packages/web/index.html index aa90302a969..0b872260e74 100644 --- a/packages/web/index.html +++ b/packages/web/index.html @@ -7,6 +7,18 @@ + + + + F3;+NC2Mp8z0kH`H0RR9100000000000000000000 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 M;qB%Apa%c|0Bu>IxBvhE literal 0 HcmV?d00001 diff --git a/packages/web/public/fonts/README.md b/packages/web/public/fonts/README.md index 5ee103c4ee9..2c0ab1c1dee 100644 --- a/packages/web/public/fonts/README.md +++ b/packages/web/public/fonts/README.md @@ -2,6 +2,7 @@ Place the Dust Bucer font files here so the 2026 landing page can load them: +- `DustBucer.woff2` (loaded first; made from the .otf with `pyftsubset DustBucer.otf --glyphs='*' --layout-features='*' --name-IDs='*' --name-languages='*' --legacy-kern --notdef-outline --no-hinting --desubroutinize --flavor=woff2`) - `DustBucer.otf` - `DustBucer.ttf` - `DustBucer Swash.otf` diff --git a/packages/web/public/fonts/avenir/AvenirNextLTPro-Bold.woff2 b/packages/web/public/fonts/avenir/AvenirNextLTPro-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2b5f6fd2c320e864fd3433dc693986a6806cef89 GIT binary patch literal 30980 zcmV)BK*PUxPew8T0RR910C@xe5&!@I0Vb3H0C=1L0RR9100000000000000000000 z0000#Mn+Uk92#aD&wL!BLr zeg~gy41!8q{swUc-L_v*g(^L_Z9;>JSDtIwt{-qaJ1Kz+geiM7%{6VA%`+>cmZ($SVr`yG=CI*9&BA7Z zI|}9I#2x&wO1d?AGIzQuO?WE~-8T{u%-xwk=##ZUYjG=EuZndxkqR4Xgs-#<_BVf7 zWo|Mte~Rs(K^ngccUT;MKtv!**$4X)crWU9kb}NILnLiQKFEo`UvONB>{Qvt|I~%8 zB)DI2{aZWIB+X7&Q7J?e4z7|fsD^dRNwXIS+$A}vcAHIB`I)V7A|G6=TP=G>FgG!c z=y9VOVe-bbDLTyQ8EI z1OZV*46u-4#h6iRofx@l|NbJa`ffTG#+->0W4h>XZLULIMCxo1m6eTCaQa6$+5pT= z1SM)LI$^NEvRJ|B5v71gc~S5RZDA&Y7=>7g-7o!bT)lCxze&&2*z=on_kCA1K}d8J zFPYTHRg&%g)X%0f#z=s%+{!Q4df9Hy%Q9sd0-i+pqrq-br;;;f51ay}9ln&(Md%FO z0sY;LaNY8*bpO-K>DaRU<2*{X=Wzm|P!<$UcdVT*#!5n!4BYJ3RW)cuf(5OS7NqG7 zJI!KD_@LZpeUgDqWUB!J$Pl9n*BzV>=$S9Kx0%;l=sH#teAg=~NX=OhJ@54^T0x=& zNzjmhf5ekXfrk${SB*D@gfKHOgrrCi3<#qurh`lAyVQNve$ig`bG=Bd2N0lxB=)vdC)m7d=-sKPDx6LKxHm09+Ad`Y;< zFS=->c>_L<>2ablwW&;FYOVHKqgR>Q)TShkwuWUK$^a9Q;6-;W&eh}d4cvylKG8XC<0W%|6f(B4}6475+Ep2qNr?V$&>Q#UP#r|v1(nkwEALK%fsM^1i93kQi^3uwZ)1XUh@G8(}FI~|96$zeLl$CtS^AU za_g!r8?Fu7u{i@E6W~xVq8y)pUo~t00|<#YBkm9rsST3oteFjxT{P6#xzhO9)y7a% z|KImM-hcn$1K73*2q~i8$yQ2Nuo4~l9N16 z@`fC=A>}TeK9$~Xx7)Ktx9t|ycAKlzZc(&bls;Q7RCdNEPo)L3=IuK9_;LYD_5Yjp zvpaM1ey7Zz->NWQXx6QK(3PE%StYWkqC>^7=bkq;f{mm2^1iF58t>8?>1>gawA>06IkFcve6k@{$7{(n(}H^3^GD zfeOC~{;=kJ`)W#luY0dPLNGyiv}&!l5W)kP?Rgwa=uDMwrl*4MP#IP8D{?qd8T6(6%8Eg$aK6UM~% zW=_UXcZ&PBxuGqd?^zTWJXPpeJYVRfDfmCTYQjg;CquS`10EI%&{7v&sRkzJ$`}8? zgCLv{jqA)9rCp(7wWw3)H4;FB%ADmDZt@{t^!2ko$u-`wyNjbBSeS*HSn?ZDGSkZT;Ew~stUukrEdWo3XoDD z!@eaOFF5&{U@9zJDQVP)5l16N6qAZNCe&m7e+-4YlzM2Mo7aS`J#>4)#I_*Pm}r7v z4@}>sP|t*QLR}HrDplJmvf6so^PXY2`2LE7mf){aLP)B~{=$nonQeRViMpw6T4$3hHFkowSd9EA_pe@<_TZ2sV@F6+F+WY?p`#6G@wB4)}xp z^ip`V)X_4K@i}zBKr*=>&32I9P!r}t-7yow?#mu(wMl%NIi%DuUwRT2scw`1llO8(UW8Qa29gjO^){Ak6YYBTZ*BFxgpdPD?#aS# zhAhO+WlgM(dcW}_5JqPbgL!5tnvzK&ob}vH=1VbuiWO!ZG$R^Ry@uvkRU)Q%kmOQ9 zBd6*j6mB)M3}=TrwCcpgmom=sFb+J4gvxKu~Ks(nzo(%)^zEHqwsL5=_c@f~YuC>UMj~hsS8(vt$YFU~)F2WT!*IK6z>- zYaXF*WcqWDhRGvkKjawbE=FQJEhJSdr3q`Fa0@~%vm+oSeE^p5X!hrGDph%Th^0|` zO(Dk78hH#B0kK(7(NgY)-R#IornY=tgdNj|wRdow(C5|=5tnNlB82kI+@xVPQfjq( z3h78{4EricnP&*4-CB7ulyTB_w--iB`QgDhWE}Ba!+bczY?!#e?>Dwy5FVT?VFM1m z$)|w#gLl%2X$o8lMhQxZIS%0Wze7w9Gl29K!efW9_&tF%8y^Z0IRz>XCS%|)fKae$ zjLm#nQ?tz>p=K$vm5LTeW&vBP*hwOn{I~Yf?Vzwn87~#8`KZ$)6$;GwN_b`W7SsYMD^7>RYNUK*H)XZPIgImSGw*_z4dv};~sm|tG?@P zK!dz%7|9XAhvOfz!81QfLuYx6hJ(+EVE_g5NmFZIHW9+$d8@w&-SqP&%d)mavgZs- zTJ75D-$aVzzw-a#iQcT&|5V)%<7a{7oGatOc`>V~WGVw?qAZk+a!@X+W_r*CbO{ac z#4HI*$#Y~mvs4U1P7P2@ERCy?hssN~$}>rtYB{kni7};`qnxvx%2=pen9MKS5{t7? z$u0O3Q6LVjLP=bPDpQrE%2ws5a#eMNhNveF5DkQuXa^mj6Lf)YbPn~X&J!0@7l})% z%fx_1bjS*_f$SiAXcFXv#aLFGq)F0-T4Jw~UMIatdYkkv>3!0Nq>o9TlZHbhq0!J- zXgo9#(*6H{4hMBOM2Ew4Jc5o#)X~gv3%1uS6t3cs{ApYgLCE`}?dY77F-xY)k}XH> zRkaV2B+blhg!nR`B>_nYV|!}##`^a_rXV>GaMPgs4?Rvnyw!JA%*F1ghqUo$Z(gi7z;|uIXrj%P%Q>mCYj2h zGG)n@Be(LoJ@zV5sw{QTsLug3(Eg-$j8ULKzl1B?HQaE^b1%JaZ+m)Z7{6H0FRjpM zh4CTArD{J8SgR=m00013EHHLsf+&;5A>vP>`kOct-O8u-*sDaTvZ~`W>K)KPyK?2H z!*%MaZj*C$p1bIBU7@bI;g;uKdfndk^w2O$%Ccg^j=f3cWU7`X+R);a*Lj1t-g)nX zk3MHOGJ;WK#!WO`KLA1s(@jTc#3w|NJEkz(nUWX9%Eyw=I4?#gOwYbIfx4-zoONlc zX_giTwL0p!6HYqiw5zVW>9&V@^?Tx(7hZYO-u0;Hn2j}a!qr&X=*B#G{9I*j7YF;Q zh~`2kE~LxW%Bdu2$|l*yuLJEb&x#5%7ecol~^LL;8T zD}S{0x$?2`PQ#hRIp>^nzU1=*S%X99a8k@}?Z?{7uLvQ85JFrB`dY25)AF^h>$8r~UkqsEMzXu5s?JV1(0={rTQmeXQ{xCz2@cqb`- zW@Tn2IyalmX0zG+B6HmDmy!PGg5{eeUr=cLdDc?8VGZtxh={l(pDPp}QCfqz&_Uik z5drQRmNV?CC54MQcgQFV4Lj=`bI-HMg*2zw;^v)i{*T6u`~%rCbs9Bm)2`Py-%lFy zdKi%M_o}3cd)4p$<3z_M@I=M-ZR1vQ{nV-*2F;aScrz3!c0zs8EWbAnjREG6a@SmL} zJ>$zTvxBIy3czP^XWajJ=L~dH#W`|Q^W@-(gFSYBcq|)=fvV4B5>V8C#5vGX&lnxo z@z4d_;d$eVxw&L-Zmc1S_ffI6m22d&N>7n}+nR0u3DIF`OF~Mg?x6GnY+2H6^aP9K zjgLp|lbJ{2TN3+5rp(4)+i2BQ?-XWQ_W|%T8~$>(q4BzuUhLU|JK2&HLSb@=3r4X5y@0Ei5TYMNUXw@geSQ*kRg|)JSh2xkpJv}_SR?eR)t12ErU8* zxW*SwpMB;mw7BC=6Y3^$7RxyjJuIDvyTH;#xJxWuhPwiC4de#MEs#499zc1B;}Miz z9DPvwaXg0d1jkb-&u~14@e;;s7;j;GfcpgZ8-W1?{vtAjZy1Tu7gDdk@EL!ilt(=U zkVOp;M(Z6qq+>t^CS*S11S(c=Vh2U~VG^f<8<#-_z@69!Bei#b>02*O+^0yhG=c?7)X zHW9cRk^2#Os6Z6JQb0-pCIp4NFa@EIS15p0$Qu;!D&!psNXdo*f&c^ohyo%C5FlPn z5*UVsNy6SS%7}5sM2R|`fuqpkEilV$5Lq!vEx5_LSY^dJYc|=i&6Ztu%akQsu4)stm?=}1Y&mk}$@iZE+wHK&UL{JEsjy$A zD%I*})H|SoR-`rwn_2K+T-*eDUhAQ6%w1?oX6q(M4lKqkav#ZEs?+zjGpm{Fp{nI_3HS=QMm zPmwZ*9COM!m)!EmJ5}o3d3rtBjI#SZ6PHv~Z4K*On`)_}&bsRBaj$yao8I=W_kHMN zpDxNCh9Ve3K#0!(Ub{B+a$9ni1Oj^KB|wI<5EUa>i~D*O1i%TJT!*(?r8<-bquCzJj)U6U!XbTcv|IrA>2J|}Zn zyn-yu$*supT&tF_)DF!p&pr+bB2H9;QokTegPvZ>!HqCrW(7J1ksy_jr0sGJ5F%!L z`H|7XkTY)qW{8w%i6p6V6)9Cs>yT5rU3Ocq7d}LWc>Kh>_N>3402C5GQc>;BZnsE# zxH-l?rCmufsVuy$gcQdU>Jw8=tUhs7SERffOy!4=<)yB$kSY`!N^(-mog(R|>`KQ& zhElTm2a=JlI30bu?R4wu-ZKc@_DuYlwlhsV7%ZUze_K|iVNeWuy+v9x zJ<|@QYH3@*Z>2N3U3A@Dy`FjHolkxkG-4tI5}_WTL4?XG$yN-lx8P5D0xU_nO0NQ< zyb;6T+FH+;!Z5I|-jTrIS>LQNgJ}DhL$qToASxV7h>AuE(aw=UR6JG?R<;nrw$|r{ zAO=o&6S)w1_iK^K$nz34CyjPrvaIh*$^Z|afFU6x#wOyOWrzi&jUU6)HAAkzW32*Uwt2qIEisO1yM+V zB&bK40r4cBU`DM!6m+K4yo^CL5N| zDiJ*#g!TPR1L!RNV-2BGY#shp$~it2264Rdw=N{sW}(bpS7FBv7b^VUuf5R3V?`^? zRl+YSLcfufXo!KpGa?3#f^f8v1s*rt$Bn_`hWEG;JSM^{ATpkuC0pVoF9I*-c_dg+ z2FK)xKbGgSU^Y_Rm;2cAZN!h>s4HzeY{08!97Gq`92N*}e&H2nS(KE23e@LkGb$E_ zJ`PUiVkMAe(Gwhj_>Ixvb6sVY0=fWJCGew6%{vC^rR$_f{vwIAoJ3pcdE&t=U=a|& zEPo;aI?Un82lSG%V!+bK81mzGuvFmq=R*8A44-cuAM4zOYV>~$8Fa?w$6X_LeqaXx z`q|C{6omm!s02+*13lUUrTKpxFr@+vq(Z<5AcN%CxfEPW^G7%?b7`*3)3tjwuJ+Y^ zCyNcmBC$klDOQNx#eSltSPoN(simo0f=G@^&PgsxxDrE&NMa)i@+5i|`ma8(y!}T< z86X3(>g2gKt@*E9_x@3OLNIzRtd zQK1c%H&LE_t+ckOi(#d#rw)rw-EA6>r5{`*E zrs!49^sjR{cL!(>_0)|u6|gyP8Rf{bU7Y`%gk9(&3azupK^Xfr|CMhRYcgcaWJ}h} z>E=E9fL*1}HBo=ufqn)T0{D0LS{S4Dc_`$#C_3G^*6MI#PbJz4j?l zELXO4$+NYK>`e`NK-7z?;O>f#X2`Z8pr=}rkI1TG&8<$RT({yMQ zz13V8oGVpA=Po&t(%?*R3FC%VU__8qdS+m~7-tDeX+fmLwf=GvDrIuhfKr}zJ1_DO zEoPSObX~zW6o$al8!Z;qh6(M(_mZ~py|OPggG74_K)k2?W5|*!;b>p1kZl2AR|XhT zJPe3l$Y7={`{dHR-E<~+FS|-;T0C5?u2w$4A&Setq%~SBZ{k}2-cAtOr;n3 zlOQc3oYA%Am)RH1m1Ojs@@)@+ik(s4S6t75Vm||@@C|_UCqOcQGFJh{g|zI0jzRzh zHY4{0aZouX3?d=a=MX|3Q^-=MQ>{4~GMNiR3LrgBS%07fu>%o*MTcvlmhy!R=-3fb zn~Uf*RO#`@hJyI(c`OwS^^FBnr|CYU!|2bTiyD@yy>)9s6#iAXIST0?Rb?6wR8h=@ z88^X4z5>35pZSveF>QfRI6~0jD*uQ2vuoMXz|yZi^`o&h#in@+(&;%hxK3E;fZ@*@ zp%P*lkS!xlfz}2AEHI0957ZRq0{`y-Tk<)WHKPaU>YGJ&muD!&d6^0 zrEgINKKOW!J;Ujc(^ghIm4k~M!9vZ1b|uxP%{knEDVuohQgfracDbFD8-Tsq)u55$ zdC6Z-&|g`fjD(00UETr|aM6Rz*5J5$wLK4Zf}w9#Dq#lW;3G(_XZGrn1qc9dO>}o& zh!%W-@8Y`Hf15lptLPkp4q4P|poW->J|gC}8~3G*hOgSN!#%1rE>U*LPm<%^ThB!p z4i_o4RHaOwmX@qfa~dtkkr=0yu{yONJm}DyJz=1l=JAt`J`1H48r& zNRwQI>~Qs~knNNpqB&h90A-Uqt{l8%50M$RD^)ijzv?@H@CLdxnmJm90w)fss9+qDts*H^SO<*)=x~_t|5v$$;YWh3vHdsSxCr>x$Q?I$Clq z)gXhI3()r~Ru)0%DeL*!g z@MFrC_8hQ6ZKF1b&5jF1-r*EPx|0J*KQ5=Otz$sxRIRT(F0602asTiBn)3)_kRcOs z>+=B%R@HLrH|2RhWJ?yzJa%e3v_j5XA`ohD=OdcrE*0r%F6BE|=UP<-UZmwjsXUM}?5291GnV3Kv1AFb$jpt5k}U^{8Hf(WijeJBdZ zImEZ8RA2j`9#*$4NT`B1Y&V_*6>^2;U?t-|@0MP^J9sootSGje!#|NvY4fb)r2|PHD9Ra8)_JZA8%6F4gzq4H`4>H znQ4VB!D5VU2NX`bdde{R>9*ua1!kOqDh!Q3Smb2<`NsG zJ^MZZgU;w2U(g~DeA(VQ(`RSrW~ZRb%7j`i&=LIbtP5#f(pIr?$dzx4f3;C>l+NFW zG>3XR<1D8foP;*!?HHEGQUJto4~K+2%?{6-^qNj&F3Ii?kkB8>IrARlz|EH-lJt+N zfVrBjDq!=A)t8v&>Cr7@q+?mVw4wp-TRZoLEpgZ)MKz9uWynX4mg9H;jKb9zW~)L5 z?og#1ruatlj*=mHwJvILwz#`IR=rm@s}VZ|%fQ!%hrAI|Mr>}yGl3QiA8ap0b$-}w z7J$Oexu^ih{XBn22A!><1Sy_c1<{xZZNAFmnL#wI#D5Y@jU0oYUa`% zB#2o35=?{fHKYMMs*}c|3InN@d4)Df>t?-v-Wi2Zfo3o>2&(kOVwmQ~<9?`8)eO)K z4Jv3nqJ>tJU;vxO%7TCJST+-hEP)Ey#R_(9Doe!;*p872OD3KUD8P)yT|ai|e7?9{ zJ6AG-(efzYvF$F1qU10}T70~f>)mFbvO7&5CB;uvi=Re@?TSrr*cGfT8O*N>#2lmL zzXufDL`7$=&>{AErLds_q&}$^Il81QqTTr{Mi>XqVMYFvA>F zkQ1Wqo+2r%pn^z7>V4eh)Om~{#gStUrQ>I_NE_|a##-}CfdGzcHG?mbLIX>yC~lM< zVO)@B*I0+n8oqL&RBD5%YI^(X>U|P+d?kcSg|#U~NKWoFs|Tt!s#Kxygws0KJ?02( z;bB4N4Yk_*_-bC$9K;5fYwr_&rSrcOXPDa|ZY>1$GNDV*?m5{xOAm6E=FV(enb_PU zq)};v(9QTl=eRN00gYvnvFQ~n1wIRjp$O2p^_f+82ysjGO(r$TJNt!d93W}RV=}Zi zUyEWNZeXq9L$dP$ZZRan%*{(=?Bl~yp|ZkeXaPygyW+k722*QV!{#5B$Uc*D?r$Ia zdeqxnFf~hZ94ujSQMwhhFVg(z-t@jqXpQDYsl&i%F6fu`Z8iPAt5N+eG za7n!BuHn?Kt+Yk649Yq&dOx}Tlwmaqo0>O$x(5|Z*s33)D6tGI;Snq`(zoha<>S() z*DZd?xZ7XuZdoUC893mS{>&b;Eq$)!Q)e9+=YWR=gZ&jy+s?8j3k3;fv}+6yp7juq zX2?$Ib_9}z3MMRCREC=g498*Y=2ZE5icL{Op$s4Qvf-KFF;vG1Qm$gcZP%Q;D!n}Y zM~q-9*ysj@Dt_Y(H35#B-C)g_Z?3T9gWX#E)^6jF17N}u<0tsJTtGmB0vAyD_@&`< z$oXTNwD}8?Zd0`FkNmtFcMvq>!Z%ogZanQoUnXiuU0vi+T}kW5v*{X2Ol3Buurf>4 z`l2+G9&a(ZUNgpLb|Y0Mv^kJ3@>XSHdL#EtKP!5hxL%AU%9@n}C--w%nezoLYjnDD zCZO3a&1~XH7V>U@Ml7y*Ontso=C#7ipXYz&lGC|N*I z#jC{N$gyMY`z9fSs4}_<$IgH@WiIc`TR%n#^zmbqs6Ve47?D8(%^sVFjKFDv>#)tu zx7cyqRuXRi2V$K>%7$)qat+F7-N*|@rK9G*z`r`y)ME-wP0!~@rr1ICX0mV(F%9(r zS;3$zw8=Z6C|JeIY;qwM6-)prJ?W5< z`#X@I4Vd8tc%D7Jry3k@U~z)aIvM{+0~D0Kf|By(^(gs(?UQkbljXDb*3?AK^S&OB z#%MeqGw7!=hA5eolJ8Q3(s!(wKiRj*jH)|&Ebg5mIIbNGuB1}cEsFNOkYCX+yoc1M zbqZzMNGkR0Z2Ff%D5Ei-Pv3MFQh0)$D9D|_{UQ;|I34JNg8N|>_yEc@1qtyA~yBXI<J%juQ8oe_7* z=eUs(L0X&XKdPz=nju1e`cbS;P36XPqh0!@u>)(b89VBvTDC_RDanHeoI^=lq$&}v zQ(|OsRcX6ZK>r4(qgHrlg!PNcjfO>cCq5A`DA^w*dOi&op@N#<%@|(E@5dcA@Gz3A z?9gjZ2Q`HY4odG6CK)+bGt!ec^gRB%nq>QXvCQnh-;9!CnK!~KBjlMUuQ}z}WGOqy z1e0=5qZQ+hwIp0m$e$El^+O2LlG#+bgTq?xOYU8eO?ZA=%0SX$3v;cya>LlGAlk`5 z0}fHt&*8R8$RAg<(j;UunG4QrZ3lL>>u@iqzAlisTdg92p2Y z1duA%#$%Q0qavu2;dJB9q}ew4RPPUP%iQ`iIe^wZIpKMLd~>ZE=1hI-+EPnFQy+8R zbbm<5P4`tN{gNn8Q5tS%O)D@%%3y(MN`O;t6t`L%pFa*a8@I@l_tV`Jy`=J z*>sUAtxk9oHtex|XJ?u|NPq^m3;3LSK=t}{rkk|Hb{ZzNwOM_;3hXD6FqVsuN3o&S z+I7XqnwoPL#_;o?ZAs6eQ^MUi85lcC!S%vAb_b;k5_L}P(ZAIPT4SVhZ{?6}`)y>k`E@4kMf5NUE zRkTQ$hE;tiZimjIUmN%ad~s|t_Q?52?m8lkP~ji0 z6+W~Z)yn?BKdZ%Qc0iJ8}@xO;I*uCnk?zpqb?NEO;yRX@DLXXiS^#2R= z{Q6E_v9es~9D97>mi*9(h(X5im^acf?&8>2KB!YTvl2!@!LLP5Q zg+RE=-a^2Sm(gLIuhdPCkGI{`-sSoB05X^=zzilkb^&d^Bd(}AuE84v0U#3T^28iQpKKiV;TwL@6u$)Yu@xM;8em#+p{?P>dv5EX=#QQEi`pw$$POMtU zG|CcbE|t`c-f6a&Rbyt_VwM|LTyag$0`A!2z#b#(L_)gly%Q7Eo73sUO!mtAv79v< z2tN}p$xm%+@N}$>q{q_f*&;=k&JYp|!R%bqop4EaC_&~EkZ?$Mu?CQ<$yaqDn)UDk z0~#`b1`$)3A@yh}9$Sn-Zd-``y8f$12QK7U1lb6KgyoP?r_J?T0?@5I0bTpT0j4wT zkc$*8pX8q)zLJ?`n6P*0rMB$~-yT3ZliF5q2wI;tH&b0ss*$DoH5aO?K!;<8B;l)c z3o>m(&VF`P22x!U9OW6}Ov|RTNJTB|8Pzjd=)|IwIj`@`xc;E!R`f*$S>D`fL9dE5 z8=diOM)XJqYmfBfGzWh5l*OX4w1MTrZe(HQiQ8m ztIf_i(7SYPAzHDW>e6zB)mov@lomZa0=7d_T#=G5Pf-`ce{>|EBWEu3H$L0EeAGxc z3;h4me+aa143@>Y7V6`9jLA7Ti7*>!l(NzjX$tbCh7Enh`DDZ8WS-Y5%R>nTSx^fn z(QthQWBx4#$UI6!qGz@xp}5UL#9opUMav*lEOjf$m&6(a#{=W=GvRt6%OXzExRhac zaLE#ODLibD(7dm+XH}1VHh$~*BZXaf{c|-p&!!CGBmzIez!hl@EamlIwPyb=#xLuV zqi6*Qxd{t*&%=(Z`KK^Jnv2#Y(LMZ~&lN{SqMt>)6t!4%c~GWc=Ude!BzbZ%$*N}O zCa1AWDVx7t-1e5TU^rIpCA_415u#H#v2$K%HdAxUs+7$sVX+H29CvIU8B3=9OeUS6 zQ{V1^C$ZfoSpiBS%}1G}Y zs}p>zbgk5f5^%jRwSaCVT$=*0j^qHrcf3bn$O#142k|lqLyikfv*6hbl49(g{aljC zrlhh^E}ovoq2Wu$1SjBD8k+&}$5}X@&X7#a)TQL%vC&G?8;I zRljt(B-=MzRuW9=N_Qzb%ZhrFT!tBp!t|8Mipuc7yWJ&VSr16ubC7XrfO-mj`e%-s zn3%u505U*y!9paQHy1I#WJdh(H`{W zu&^5gqk_6(9@c5H5V%}3Ars@|39v4+S!e}}_IvqWc~5EKY^ldHOIq}MlGi8iD$SoI zwv)5PK@VS?345Oj(tsP`)pzszq%BWjNCNJ5EnpfLTvRL56bzh;76hk2krNZ)X8bJ!*W0wXIBE?kp zU!o?VXp89F{FM2CYCRRJ+-aG})EjD;b_=sybzt)r?C;O$6bk*no7gQ|4kT>a64P^h z!@px|2aZ4zhkAcOd!IF(>)Bs(Cv4iC-7R;*YVYjEzF+?T!v8OQZ1~-NW#+@QhnIe} ze{Z?9Y|a)=)RJ3!$L%FtCejzWR-60q-I)Ug3!#z~lkb%VwgyT85;0gCF_8w=Mgf9W zWd8u)n+&+=Z@x9<*1}sW8gEVj_XpkwqAOGS<_?t2jdk62pq{Br^W&r{M4|5UVrdx9 zM&#nYYfFwSS)D_!jgduCMKrPsTYSG6iZ0%E5Eg$bWnrw+z~@~0gm`sh1dAE@osK}n z{XT-hj@H1r?`+oyF-S~PkLJFM=0sLN)RD6d=sDrFM$#miEvblP(XfJP zN@k%^7o^G)vngslrD$;oJwk|Rxep2@)lZpG7Yjf3DIF-PX|8GNZ^~}Y7VyCCcsC^# z+BVj3_%kx@-7p5T;rciV`SnIW1~d97Zp9HZbG+3sfuzy&(5dP5X?`5bq_d{s!m8|K zkvxN;(BpF?5`3=0n88Zo`>0DoRVz+eb;Waiu{#aeKXK#w|MaUv*RtNUMlF?5*!4~?fi}ZES8txK4K>;fOR*cyV8jfl!>(O{W@xH^Yv1Y zadG|M=T$O!28&C9P0nP76yG}Ukr`wH(~>+^ljYujlb6DL+2j! zzrx5YY*UAwnK0*0Dao!=E9#*B0b{8c6~y8y)lBtj-338 zK)kvoxa(VASHYF+LaVNbDo-k=T6AbB?RG(nwwRnGFCtsDkWRSpX{yD^0d(c5Z>#Tu zmrkh(rT0IsP=-~xIIoV3I)=nLcj%$5E(%Y+LCUxEBp0VDOu6E*aK`xc>S*HGb^8Dy z@@};$l&a_RqKWD7;yh6R2M@xa>pqRN-#kj;Q&nfJK$^0iR+3$i@!iLT2>8G3MdBa( z$lSbrCJ-g5lB5y6Z9Ga|PmbM?F=oTKB$P;tm;+QXZn&DAGuO>*XvTNxL#N+Z_zETJ z)3?k_G|9$zt}kvUkA0OL*Z&J%zw6Y`k#bE~xn@WFnfjnKG+(-L%iCSP0ltu?d-$CpMN2%7>4G0K11rX*AHW|E@mYTb&kG zn6@2Hn*RLvqn4rOHy=N@La(n#Gdp#I@WcFu*y`8@-XZ7~o!Ob@uHa+G!3MEO=fCa@ zJv4egnYaNq4$H3~B>o?gp3Qtlbv}!2;2(w$9(p$rlh1#C@c8*8?4a$|v2qLa5bwOA zT$uG6Vu}n2V}8F8iorJituC9Ok@5-iuj~H<#Pp(6#f;pucQ@UoS3@3spYbTE%N}tc zZwRp6j*u;t5i*rpFUzR1scv|2huvkrosJK- zy`EK~N+7=(E5x@?>V}9{)~#F{ww<&+VQqe0zLJT_P?`&Q26Z77$JDMy5C1lfM16TQ zjK&N<8bcw!{x-ZX%;+112r@^dyIh`XX#y)=2ioEFx!pc*G*C~ZypB$HWu@b4Fqzbo zb~ro}>`g7ap?66>>51l9D8aXIi5`ZPO_K$FM;Iv zdqjwl9)HpP1R}-9kM6sUp)m_jeL)~z-8_v$J^syTz3d~1gg%@~PVps5soqb1yg-ym zS=X^rBdquP>qHt&y-21-^_sJ{&gZWe65(CcrKlY#U8N=6a)+}=o+O|A1P5*r;Y6xeJq|w>v=atNJM?q;&)Ir7h3S2K z8P%W5JOEw$)SfLdb<(D~O|7Xto%JY+uKO}-?HPfz+KH!1BQ{lptK+R4sM$jgkL1l1SUFsu~?_XN=iLI2Atc<(a%5J^MZky3|JLR_i zZ|hbHUIxk;T7Gc^2x^4FPoSz|MQ3g=AmG*3>aT@dpjxqNri^M*vok?rydL(6 z^m*U6gh<2L*pU$i02yNx(orp8%B5883Y@-7i#;RZMY8K1_4vt4Hq za|Ae_Hw=q}`0o6|1)p`pMgVFh6}43OD-jE5g%cV{%uQpfSbal~N5KrDA#D=^oL{vt zQBia{9V(-jGV9EiJ&jm;cK<1-K2|%j8@WI+p9K==4+PF;Lu7-(m(Opt#Ra?UZdIg* z{l5x!;^_GMeA^aD2)12rxF~Dx$oP>p7D*=TEyccFmZNR2%IIbq5~RxUN(#{0ORMmv zwPV|U0~n|5+`40HPUg<-ySC+K?cBO;OO}7z*4^7fZWHt0M#sFBCWmqkQDi6OVAA_J zG@x2;a`vqhM--InWa^tbg_*jN|wf~K%)#Xj@Dh7q2bb#+jyPJ9}a^3bSA1CT)JM`G>&uYYh?7JMIKcq2eXsEY?^I^ha3q=-M9@RCxTN5=TYc}g9L6u(B1i%;gq%(mE`FL=l4 zS)^K-J*AL$p(Ky*C1?}sli8BI0BKURGJ^FlldQ%Tr)Lh;GnJ_hwql2$f#>c)6&*%i zV%CbejGPa^x!7*!-g!`CI+Q|OZ_XN*8n z?orNjQ}aU^8~&(E3^Q4nNgvs`C`v4U!GAm|*h_$P|0_a38K=`QVhG4D|m7q`E3_k9Mc@^&J2H=QhRr#YiqC>jzLa5ZBbxRus_HP@RFHP z)xm+Mmec%W0-y<4ZKf<1O73;9{%!d^MiptEi?XO14J}s@y0lOQIlGFiK?vp^veyhV zE^ZmP?o2xA2~mLeWeK{QAWgF@!;kN-J1@Ws_6HXQ7IlUp$Du|=QK$c5^rKrxsnb3T z^lglCbCAp1z6bfc{&xTu9~Ilk*a@0{vK*qX5(3`1TE4&ojqqDrlfFb zVBmh~oTRzXpRej45s&KutN1ims+?w53DTi#QF5PkF0Iz9>nI4OU1~jZDb`3ZA5EE$ zlMAfLDQsy)+&!n`IjQnOibWq`rVA`u>$@UX1_dL3#0!y1_OLkc^dtd!hDZX1nTF16ms-tN|7S>F_J{gQ<`Rn%l}#gmyAQ8$H`jV z@l%sVoesdo$@!N6(`TU!2+S%0$T&C0D99pwT_tbYHyC4jyh-q8Qf&uddLz>M+(=Gj zX@NUZCSOOBe=CYpweY*w6HAXU-xRHjw3*&Kci|6nQ?l^-V{K`DdzVL>(J2Vq~vq)AiC4U{I;PU4XsQv-;W2w z)W(niWpvGR@4n>X*8sOICsE&ztiwL3s~D)zcRRZs=Mx@4L0f7t*z0B9vS{qJa!h&j z!DD?{@hwpU$6Ac>eU$ob=dI*Z$L2Qko$*DHK_(ER z+p+UI&YzoxsuK>+9zHVl$g_^-!^3lik2W8D);X25IY>SBebl3V{w`TO*p;jo!CJzC z5LA*@vN2hM%tj#e(K=5K1Yk31Gap1U>Q)kl@PuWA`mXUq6?iH}6{12@scLixTE+FP zAD}jM=VJtbQ6;YEFhHi<=x;q3Bf$_}vF;jRmL^P@6+(gkrwW*1{j`}6)Qpg9@bN5Y zlBS$&PnGyiPk`3cCJP^o8v?>P%?q8V^3>cEl! z$(}#2$W=m4fl?%)Vy8Z)SXr%X%+Ja{s|X8C40Yy*hN4SXF3txFNu_Il3`7Ln)Suc=xi%L|b>rX>Z6_-%GOzb#NWEzx0Xkp>Ec?XE?<6X}kL6CI8d z#0})%xxByl+96jN7%RDw+TD#p*^LNzmp?yXf;|`s=H3l$dVDS<>VRHcjPbVaN9bLMm zVu*}`H{j_A{Y@Q~jaR*B2b1eB3J7c+<{eVUpd+-8H5fKA{pU^yr0JI+fvv$jMreiM z`-}`&i1XHhNu9tLC<3}4BS*vHY>M|H@Q`i>D%z+;!okkbA17%n*!Xd%6hgYf2@ev| zwbE4JCS4y$^C1nS)=g*ObYL~&6bw4wQa}Xjd_OYqkDoloL#FD3AwR)vPmvy{0juG| zaOjV^0wP#lxPytme&z%Y){+v0)2qyVlM;D>($+zi=SC~oGH;TM7bt4&XL+u+QXMsW zI(vNXZ2r>Baga(mhM$c4;*9XP-r_gp=jEkuSRIr1bc}Q~?dyo!{XJQ8vM;7sJW%~P zZJcT!jb9Jy{S2CYKEEiOf7+~?JNp|mw?3M5&z;z~855mtXAcZ~wuLVOT|d+69?j9t zvfY>S$Ii-(@gkD~sgohBeCwfvGU}Q1nGEpbr922kx$F_WVIX4wrfn{iB@nhN{t!uG zfnu5VyvT#i@>CW@|IWOR@?Hlo+xT z2pLSPC5t0n2_1w$2BCLtt007q1D$w6=THa1`0U!$Nx*mR@4$a;_{~Ycyp-Tgh`;yq z@=8F0SNDRR2SeH5(6~b#V+;N}6Tz}$ZhAvUo~m7Ej^2g~GGaNB(6U_o}hT zl2LbV{xb0Zk|xsEwg}ZAY*eHpqF3iYw!La>_HVcaHo(SWh7^G+aJi z``Ha)F|7%=p6_4ETs0Ag|H$sq6Z$VlYb9c;w<4I_ynilU_vV0tUMosI( zv4-8C7`73XiqWxf;kb@5P$RoeL-=2mMVzELDT8+i3QIFuS5Qv`szNII0RBhtY8a zWb2=Pj9Bc){6Vtv*u=nr8E3Eb9z_H^j1nfJO$oJBjr%W;BlTeH#E60qsF-klfRC~Q z$llB~V+8^uGNzfx`nKH>9!C+ScBgG=o$uZLTscB5xj`%0g?#2oMzT z8^6k+6I6L@wM;ecVEqdq^+g+txP5pTo7K5)HIcho`fT+~t$8AC{`e^so5=)y zMh4mBOxJ>Sf7*&0L+EFkaGdpzPCRZ94_-fUJx0KK(Z5t;t^k}BUVvtyz`hBHi^J@0r9{iWao=3zlXiy-HOwT1_!SdGy(n$goQ?}6+fyrj;%2MD&80x z6*ei*fY6KfAJK%4^;sw0do(pH%zG{PISLJCB$0>=L>L+~mcbwqlMs;YXq~XyXRl?d z(rTGryRcfP6;^p|waheCEz@TcR>i%P3aRTzNC8u_XHfi9;)PryY6T*q`BxuYk_x+n z)tcOCL@FId#F6PV0v;x#)E}xG+a9N%NO76il}0tMQqcce(&}reZX>5uC8K$HfWOib z;}=ao3nujAlKNX-@Y8|kNE$(k%=NhI&r{>i(#~x}{m|o?O@Ox{;3Moi`##)bO6evQ z#|dVrrm%bR$5-k|G-y2<1_=%^3ohUVw?ZxQYC7KLRN4P+IC z`inNhI9toNj$U94M_mXk2`o9XE9x5KLR{70FSop-#pjC79l0?FDVg@3^SbNQ<`3Mj zy;t?6_TaM{2{2RMkK?6s`*UR$8om&c9;bZD{@Gw{zZn9{i!wJ-gDq?pi^U^d*{cY4paSmph8){Fw4v$i+#Dy2&NR89-@p6oe~X4D;>t( zTwNX2W8#-4yqp(uKdw5eyw$!!7Fezhkyk2@d+>1@js`(a74e6HEm7U8 zuFr?e((YrWvfMJOq<_I!%lu`LgXF~+{70r8E4NAO2a*R(*7}MmvAYX8{{ z`EG#!nDJ_?dfb$$rCPCjMs~diY{P_{S#)I;^|>UbyK1AT-l{9XzgA`9+E?R>O_4MH zB|z`|6uJDo3+zE5hu40^D9^>U2iqJNRfU8O{C<)mJ%Grl=aAo)DIpNv(nlP|OggiE zI3i*o1GelJN3#O*=*j(dr0z*`hW_wd92@`Ck-#i$&w}K-FaZWUJQ54Q2Sn(czPvJ) zF1CA83nLjxZhmzH6W9|*A`>X2CgZ@AJkQ}jnds=P?rG({uewS@tG-fStEbVCdWr=v zlDmj2@+Qpwm5VqEqfM@zTzPT&4#rQfYA~~a8CiLmXm$KFe$#F&;^bslgQ+G5UBiqLP-*C0^>ijO;{~JR9t#!3ALNEFbDP3lg7G@}FP{~;1 zSU+q|y$)*fOBCo5BMObxN5V-xebkYs_FF}w!+icRq3GzKP{Gc%s7r`)c`?qaVi)T4 z$vru(H50AN^dCPgjU==7Wx{wK{0piV2^*$4oSV$+RSU|uQo`A}f)Y`=pokLyCCz)4 z9^G)u%FpHbnM@y#>nq$w`%dn^rBTO_$bdg)Cvnov(tM;?l8>x9=POZV%yfrdQ#$1$ zhD9d|AcTTUgigq`h~z1*??!(vq@(v(c`;uj0dJc~ba)d{o6?)pR$HI5)PPbYZ}~5h zwXYod_R2j{1v}58`j5tK!xM4KZP9DM z`o9K#O7Qw9*zk+u2>QxNfn13E`soT-9^r%JG1$0l?(S}oAD^f}HbY(aE5g9L2<&Iv0QYorD+{YO&hU`g zc#YhOj?+D$%K#0fg+L?&ol1?U&B5-4z8ZB(U>&GQZwc!CG*q&6w-EI6+VRcX>;b#V zpC>}K1fy20T8U_pg0;vfYoNENq2D-drUgo-vPqKf^F+u%TV?Y+Br?io=(Pd-HeJ0f z>Q#C;ZSgzt8n1xZZ9N&%{pyt=XTTuicrDGE2Ky-|Lhu;!Es*D^T?f-&%!mZYH#d9! z4EmJZ?%qCdy`Y@g#ok_V+SuDM%WVonh1z7)ihJSOzZQOUenxSbx|^p9fyGW-gY!U7 z-WRDnCoqmsx53T^yKB9R-LeRJi=nw+5$?yDzaGzJ{sG`H&WN>?vW5;>gDqjuz`>`+ zLl~#7FP)>K#;7Mpi@OwRts|#!?cY>y(d7J|hAyTkts;t-pf+pv(D(fsI9Ns4_vjh~ z=~X1}kpyl>*1NxpOt*^zFBo-_p`v#q*=jOSUbziD8P@^!O{M(`gG8r#=chVAkL5&F z6|)|p_kz=I1H>siNHV?Y;zSi+eEN?{aYVtuuk;p;1HW&%>$TEub?rk$R$l`yet2*Z zQ0)AtU}Fyn-R8=6Axk@+-o&n%6*1q9dl5RQ(+qG@F+tM>7^0bS4=mTz4ovGW255xK zy-ww!rkUWf#$6E}OQhRBW!H6NN?#sD=$m@UzD!dLnCs*U{@V#y{!{f+ME@6<;rs?3 z%VV0m&6DQ1uXye~hieJSJ{;>S;ueFw83ywT6FY$+M?|||`Qa4NKY)%WvLA<783LtU zmCfpgE3qZT&hR82!nJRc=Wt)&^I5~u9BsP0xHGW;=46BOwORqz)~GxS%>cJ{nczwU zu1PJgA|bF0ra9ig~Miw0QN!QdPfK@W1$lqph!kUWU-C^MC%v|8t%J zfT|1Nek@ zz;FGe`q00vAR|a%4Vh6{|K`dh+g)w^g-drGpRgK#=&ZHd0d~?h{jzM1#I8%|e8=la z0R_@MkgFa{e7*Gnd}56cplmzoZypmO7J;E{^DYoY|veM(B2aSImlPC_Egophn{;e=W}#cb8y-u zR1mrzYH0ahXG9k1l&1`4R;YnI)u3x0$?vw>X>ec5Dy^2C_x4+D+bwmO(fw3!>s7PS zn#R*6pr5}~3f^6Tgfk<&`MhyF0{2z0#bnVkW)YY^G9?=^@BKQGit4&Hfsiz6mk;Oz zt)3!uBX@HZ)PVVr8$@+X+W~E@{Tg7aS*;moGK=*?1sh%>n}FCxyFsn@BLzb=XCnc0 z#Dp9yF&(kxeM|KrU6Tn8qnc4j&9`_O=mdnd$3j9VuYF=9;8auS|pnTff&yCV%^3j>oNQkohKTR6*V< zQ2=)C{HAgM?9SW~wGZRpJLh&B!MriaS)*kEV8d6$Uh5myk*8$EOmqwmE-peZLle>| zS4-K~(WWec0Kmo~$*{!;>wWzgTwJtzc`OC?VusW`Z3Lv&S8Lzt!XV#`Tf+&vrVR;u z)Z24DxZT@-LHD$H^LfMz;KwBZeL#ITykXYG4xO_<^urs14&)_7>tAaxKiH6H#1v)J z(K-fKEbhVcQs>m!HrEo^6DN%xPM;45WPA~7Wb}j}p519aVSaVAjt_$iDlHz#MN3Lj zM=(GbFPvM4w5C|Opq!pegiM%qpd8;C2xofs;AeQ()@Qu|?mcgvb*FZkRVV1?EDUR? zw3gURO(e_bmv9UIE&s0qtb-wcM)c5=UU)2D0&>1{wCqtXNFibo38>PaCmVAzY zWIck+J}S%%UpjuPOxMxtMNb3HPX8K90CM{UWtV&&HO2W{YkaHJW=tp4RgzZV7bXS( zwBOs=EBHN2)5iCy%74G9skAc?FMv{Wt#vg=3jA$evkU|7c8jj#`D#^(kUs=7ICum} zNmZ42)%`s(AcS)9;~`!Mq$P!2c7{?CsINEO6T+Lm8S{ zi604(3ZslrpK#1|)EU{Zved_R8Dsu9frK$+lXY1kvDdRcVy6D&pO70v2(3qw`-H3e z8dA7BRY%T=-a{Da>GYV<&cC?`B@*vFITgOrbj6m zhggmp`HaFlG4=!CE-oGdN@S3!I2%C=1Vrv3 zR&melF?Kc9PCTi&H+Z-=%blDQOn$#$q-<59JsnFyr zz5y@2W0-f%9hRwcr-QxSJ?$);{Gp>xhhG$=BZ(=Nq>+O{;Xjj|K33B*?z-Du|Dz$PI`QGRwSeG7$lyOn*L~h-m-y! zH_X2|_GmAebxudDfiFv`V=lu8MvO4BqYVc-8QYk1IJ<&Tif-fa52sa%Z5-QI4V=7Azi(Rz zqAU<%nO7PuS}Zss=}m^(T@RPdER-MHW#Iq!PMC@Yq;fO4rMCBWyCQc;uHMyBd#pzm z%#H_GpL0fm(E=$?FiYae!)Zuq-89)e6~PfoY|R92LH z@D?AVbC$ygrmXO8bZ=b|t~R@F)Vp+5 z-C6f9Z;^;2rIjv^-fI=BFDyE;*S^-N)uEK*bty;E3U9ZK$J{xkpFf+YA72sI^9G+5 zm=ga`xG;4_VJvqS`~+7!UlyyTp3LX&IP20S_-e+LT$N2;-czBC?8chW`Z&VXk3B8K z=tk-~A9P)WtIxvGaMi0P>zCt;{@dm9D#r(4KT4@ya-P-VB4T#ny0-NB390XA1j}4$ z2mKSRanpFbaId2poEmRlJuz(ShO3!xEp~-91BJzRdU0C?<>5k4ocC?{vi-^X)l`C? zp3}<1Q%b+BN=%tsl+QQ4OEJX4Wsei|u$yGY&{02k`?afHu{Wp1J5eq`d-}ClynRf_ z)Pm6akW4fUj{YbcU~Ia>=7oF99ex1?p$5!An@g&lS*K*F%97pFyuo=sYxDl4kS!MS zdN%v|hWdK+ahwD}^mXB44Uo*TvlH!=uHZ7%2W^0wkkTxx`cxZK%c{23)o|FKju%lh zn@M1X>@-Qvo37?1*s(3ibZvFYtfKFFsJRqg-~M91HHD4r+WKEpih%Y z8mCiGf+N-3b1%A;?{_D1naKi6yy?{L#B<%+-JGUL!hhNd3=_jYX0XnskV)P$)CX;V zmZ3fH5~V3jT} zueMTa(J%?X+z+{XPNCt_VZXXI?qw$)TD@`u|Aw_U2qxEcAH#R-#x>n>ntR%eQfSgon|@!EgFxgG_{r;z+#x{ad0NNZ7Qt!CtZaOd&xr1=~yCKE{_Hn&&U|y`lw2!ETxUWVHAy)$V<+t)b__iIcuq;Sw>apz>lbDj(w%P(`h<6Cp=j(*fnJ4X$wdD zd28+lQDYufUr(YCwbANs3o{%ix@@=hK8{QK5djE5eMO*o#dFat8Cwz%MZpf6S6_9r zRfT8&lYgLBQ#DdqHYKy7YsY3{{s=d6bQWGI^{#T)%f;YL+-3Fi#cH`~8>h)Bit6my zdHG!W$^HFR4itr^IQo3p`08rOlD7(8iAH*5&3e7oQ-`+pkYBpL+%|N`t4w6;Me^w5 zc$B8|-PWoR*Yai~CwD*34OxBr> z?oMZzklH9f{lGfa(&=u*+i{|T_poa9+M10}y9^D?dw{_!&h^`-?G|2cl+QK|uu24R zJ-_2ek0!7`llaAI$^l`+IOpSdopl1kcGZDN!)L@a;<(BR+n-~s7@j)Gx zlEPAw^btal*YHF>ax}wKAT5>nJTBc6LHR zd^e>Hv$q8wcjV-8l`51BFcNT2fdKrxGcxHO}V~`L8GaKXw6{;;zfrD?QnnJ0PwyIhfqtSWNQm2-@E=4hHyYn9pap$4E7t(*E z%+)rrEMQ<)2;y(c#Z^Zi2i0-bWWUVW^Pu+M#Sj=o3%ZM}UgpQ42o)BDClYwK>e}W(S0O z7dB$Hsmv}_CyP-rMutJ`Ywm7egmIn|GG?uW1Qe6S+O}(%fHq_IKzV$P;`n~yXWhaM zlVj{*_o?cnsRgLn|KbEK+fj6>vYO@i5rC#Oare%r@(^K;+^i|i^QpQ8Kx;K)+`M{= zYqQMGf=kFLz$GpguKaNKq|}91uv>6_A%tBfF1sA41gPy4Q!#fswM7s<2b{NA8YM66 zQxR@DQm%eHlvFSXDWM|Tau8bm) zDt6H~cV>H2WPRKI81gV3z8_JZOGkbt5#T;@hqUya6+Mk(3_zUcJ^UmkQVIsNq|^vPyfHp9CPb(wh6nfs zqFH)2n5G(zMuFN!EU5RQ=x27I4gns|-IlKt|9CMceQ#v_?PoaiV-lSBmu zvA~8Rkw6sSYAORNL!d1S=P4I|0}vj z7La64PZ8r&Cba;YZc)0LE2ibK4bE=Y*u&BoOx%IbFc*p;=+D;>Pz&nE@Jdqbv>M76O6(iC3Rh|)led?V7Y?k^fMtrvrRpf`GE z2L=OMjS-ZLaR-XI2%EAM%#A_eB98`MG!3q#B_XBd(iI_5&sx32%|>rj$=EMSFbZC} zWX87riGkgUed7!;U+5Jrtrz#Ihh((vf%rzL;@0^qBE zd)*LL@i&=@e#oTXFwtVp?cL$b>H#5x@G7n^iK#z&Ins`Y0C9y?oTk6`U&TTZN1l9oS`0ou6@P&V6JwYTA~sU_gXE=k0n#i1ZD;hBllSQB7A zC0|X(iD~`__KMGJ-s3_5?81KAzgt^KQ*){clv?oY7TkM)DsGE2)7izRk4UFj+MHr5 zfSy=-zJCnP*=$FcDY5vhl~hx%wI`F#PO5X0RzTG~RIP>BA|B(iY4`-N?is%SMwU~pRWLrlr?v{JVf#*?ci<%i#@-y)^0GVTtnc-Vg zzyLAo5?WO`9|1b$w2xlUTJL2sPw^YlBb3`$-=lKV900b=NUWa6)D7K zi)(_aVpULAb3dEfm&YL}*yIesv1TjG$^FU_JZpZTnY~F2to3kgx3nclE5p2ql|~D1x7v3RC7{4zy$l{v zQW4Qa8dJx5q$Fz;YZ0qn*~G9sk#&CvUeEX(e!d;@CSa<>g3V1f?u0;FX1{WYdD{Md zEA1y9#L)H|!748>Zu?PxcC+dHBz)oM!I?5I_Eg>gfb9fMy+9SW*F0rL;r7H;)5E-o zPpo3){6+qG&fTe=%MO2zv+J-WO5#IoiMiu^L}nBB`{Ugo>?ds#9s))~I)$|tE})O1 zz1NDuiAz6$wi@d$or~E&Yh4_l37a6NHP>_QGjzR1uxvhK-~XhvYb~1A!2q8&Y=+$)*QBs0M4ow z2EqWpD2iq)fMufqYj6fQZ*#lWvKFweXkc8Gv@X0_118stua9GetXE;zYsqa?ter%V zK*Bo}e#pe1yOce}ndqu5q?&eSf7)x`;Ai2SiNA%z;iJ?a|2lk)-+2CQ$7h>H zZ8wo1anZmU(;x?$ZCEn1$*C2 zIs3Q&Ua3d^z7xOcwP>b`{eD}s)E#fb{!QYhY~1#yd9T@~@srPHINO-AO=s&g-?-*2 zZ|jYX|5f_H9$K#bi@50@;}cw~63g}8}F3DJi zp~`#OEzLxNUXb7}33J^AAeW^9GVlSa6H~q@Jr_ZmgIoa*4u`_*V>6YEOY7tm@>?>U zlDgPDVM_l7>t8)KJOabL7*+QQESgB%ErgjR<}r9r{WXcgRCu7Oo_D<`daaWcg)=Oz zdlDQMhnB1^O7FgGC%v5W58lU4v7Xl7JAo`fje3GW>QHJy@1#{ba}-dg+`|Mppf0I; zQ)aP4{i24Q`BvKW%TFTPKF$pa2$^gc3p@lxu;o(P@!`Or%$`RG@IvNhG7Io#BM|qW z7=kpCM3c@376v2EC`Kbv1ahYIgKW_`&g>Rs#bOYN7~oR*Sw>0{5Ng2His@qG5E2g2 zptz)tDLz``2+U(~Fc9lO__&dWEXgVh{B|$qSRx=gJig@IjI0zgXl|S?HO_)sa9U$@ zMzSK~$O;zbCis_e)pF9IDeF~$-)4Pbi_9h!Tdy$;G|-qbg`oheP~=R3a8nCh2_e&Q&=M{ zYZtH2&95a?J8U9M;>aM)chVTo8F30Ze@qn6dFa3*mhi39)yWV*q1Oq8M-T`~(eaf;-^FuIv879}u-i6tz-GFeDl=@{K|N@}2;Gsj>S%gsd_Hi7593U$ zf_`C!1X&dGc=Xj`o%k}69vN@MY z&Bj?qc(FNCZ3;f*%9=5wc-q*9_Z|ToY6@R9)$hbYA-g`BNqNPiYr|p*fxR_!xL_eg zwA%IP%oyEG&+}J~xS0O4$vaL5D<)qQno>w265u}kzh5=n01o1xlJQffs7*5FB-AY7aeb8ARxJBFoU4X z*eoK~JP}WBiPeWDWe6wmxYR}yNJqs9LQgnW+NyPOV{#sUuViPOj66?R^9jyUarfn+Gyj+D6H3yZD$LEPu#d!H-xyeL;f(}c# z>PEElEXqnbgOTW$EFRO1`Xt=q3z?cXw7|TLf%tmmur0|+#)t9B?kh{Ilgkh-!BEX% zs@}4}wb3vi{rTY)gJ7Lh0=HO}NK`#FKxUb}FE@E#450=0){`I1D|HFxC7&p{fb8H( z-LUUceIwyBHWgeR)kA#+X$^ZwiMDHQd8w!$7*%4iEHMKS87@RKcbb5 zzY=rUGl!Q=x8vfj$-?Ag{f%>|#F(`lP4qLFfHDQLZ=buw1w?QXzgJ_qL(vts44KMN zsJY&VCUu%uxKKyg$~rQ-RS)0<<$L_}`an+0K;4`5(L}50^5mzxu=!G*KzOr*N>_QX z%v4Ph2Xrpr)^c0V^T@|WwX2(>gk=KDquw>}|ASfZ+kAd+$}7C=Xmg9Mb2*Ff4u2@| zjDyT~rV*+-o0+!f_!Np_uyPa;?Grv#PQ&P2wJk#sgXeT6}Tyx{h*LFmSwE3p` z_^jD~V_CNG9m7E}?WFL!U*0UyRJX`jI-nbtz6EHq1j7U2rvb6uqu)#}Ju@4pj%|*n zLjcqB4KVe}rdVB2i9zwsrIXpqQ!J+zWC-0Ta5sTki_!Y2F6X$e1?Hecs|YW zU+_=}PzcdBX8jB&%7p9lOK+BW7Fi}umQ~i-81X3E?2>1nqDhD!%N3`2<#q0Pa5aQC zO4Wb4HeLD*_ye>peQV|{_)}@io+D>2qsF}Pw%Ndx(aZv6A-|0x^V+oj`5CORqKYf2 z)c-B6yoxHl^WK4$H=(MktI_LaNpztJ5&wKl!9(#t55c5-84JV5IZ z$5EdA7iTco9_s>n7?3!R?NI(0+e6&N?e}}oLvn}cNAg66^z&ZaKA<8M;30lukbbz-z<@{2gX(Sfx-b7ucr1`SAzt&FP9GTnEIg>!I&!HT#MVsDJh!L78(RdGuk&*Dy$_MN(RA*6Z78x?zR zYjoeK&e?lYCztmU&n)X*uex_s)OoyTyHm#oe=Lq7{>-L1cyZaRD*R=rvX!{yS;z1C zZhOCB@>+{G)8=VGUn{>Na5i~|7xhe%%73nO)=7*0uCpTz%4rCTwy*Wvq~;RJho;Qa6>&AvgBwWPl1qTG^a?3h?o}i zmxMAEsK#!V&1nI00?x7N8CF45wSb1R5m)AH(bt^f==& zEz>_S6x3<}x?<(Ti?d8OH8v4oTY$%hT!|K$>xgq6mn{5rJL*sBmTLpB38&%DjH3Kb|pXzGpij5BRyJ2nZ#fus$o zK(PYGM}a%)*u#zmM~sG-4|!pyJ{738k@BxFRM+{y<8UzDN7led(2jeb&i zPS(nXqR&&BxSAw$#cbJhCsayY^;B0yWi`~P7S*!7)@Zvgp&-XaHd(+X=;c$Jturdf zN2ge=E(g4$IEb?@b+Jp+vP!#DVV62u5{BXVTb!m2rmd`Wmc$cNGr8W9BNNfN)fC&f ze&Iekr{J%mVww6fHpH@tlN3xdwJ`r57u~f6G^6uA-tU`D3;F;BV#y0yNLEk*3f3G2 zjcLIi(So%=LF321`PEaW$A}mBdAw4b+mEQgs)`8M;N}hb9PvWC?^n5ey1~*cgJN91Dn800A}vBms za|fSW41!7<%J?_X({2R(ZW{oAwcl&>9tYTTaKEhd+-Bs;P03rpjiKJ%l+*-^+YkQ# z|I?C+93~xUJA5;6Kgr2M@E{KovMxzU73-GulMAvc5ac0;M@zTX?7XvhppiRdNrvpj z;hgZ2Ft!7`xSdw3xGceqbW<`VQ+LUA6xKODgLZte95p%Tr?Fwd)x&gIH)I{JTfVuq zTy7nyzc2yP?yHpZP61Eg@&(O&`OJq;S!nA~49|BuaW~;c5K%t`F@+ z13e6f$~D>Baq~8UPTC^ux0}DG8~vrmKIJeEQ<}>vFm`#2s1+wFUU;5x%if;};vul2 z&1#+7QWdC~v+5`2o&lO$Fi>)AFt)z!md(ZnjCC_=&?8b5L=+4#vFcO#xANZ#6!TF( z_031D_rI+VQ5b@o-L(d(!D_Ji5GlSN_OCtXuJ$Xw)qlz?M8E`C42e@nC6?u?AEK%eyqch-EN_kY&hRQ~G==}I9K zYJ-v?Q3-XTcA~;R*zNs0uz*5rOT&O~%jkftgjfDTOSaw{5+n-c-25k9+W(`41E7Z2&F{T_ zf4Od==jb<4XewWvGnvG)hP4iq8W2NTEWx~pM%Ei|nEs$!b_wBtQ%KE~ipgr*PZjmG zT{}!BKE2h4)_uS0126|F)Mc1+>K76pILF6{Cx-ro_MCPfbU2rH831IE4k+KDr9MPG zQ98^3jY3fRGS$wT`u4Wp&rp=r7B$sQ|0*iKs0CY^ARfM?%C}$#3zlzpkMt$n3-fV5i4?x~%@1khj}!~;Vx z3}E5;e^2C|e@c~Id!hxOLQ_f`nFe&U0S$oX_bpqV-$OqfIE2TTsgKvH)UPrAT!43)EVPCS50iR9(n+0*A#rRrKwZ?`U5cW!Doy^E^1 zfy9|#6X-bIvC7KThX zZh(PVAcsRbgYrhE$>+9I7-3A<$Fsf@zj9?m0x$~`f(gPkMir|1(0RSS-1PVL$KI>~ zjU>%U@Tq7!d)$(j#iF!tEWwI`gnc3FE|>8? zJo{=Yc8&S0CSF41-OGoaRuqtDId9(|0KE3hIskw-*OGxi5Evs0g$Lnh!Y_WM_^nl- ztgZ+`*3=G4P17NyZaAVb00ju(r-}w5eeawl5bb#*vkyA408Sz(C70dr9NGs?lSqY| zFj<)Ac=00;>)z_M|8`O%$mSE)ZpFZasB@+PhW`RJ$|L@x_0kA_^^ z9&@xGO)!5BJx9v7#o}w2toBvH3fy69B(tK&yqC7-WXtev>!DjLf^O@OJ^CQrklbR} zNH*wYM1J%3?h2{Ve;6{?n5>l{R*lJS!pp8&Kc=(5*^;v#&c;thr1->rDmbk@eRvu? z-97zx`v2-vbA&m^TxIStPmaWEn8YtSVuNxqLxJeUMWlw(AP@2MJI=-1>fh#gkNk*l zj=9HCbr#v%)aMb|m1O5uwhB+rs9;@k4crqR@^pD+d}C3r3{{tEpq4u7Y0$);IW53a z_4W-HXzE0hiD_oFPJ1hFdpE@T#wfwtuk&=DG3#8NCk zmhmM+6UmEEgVRJyXcI-Tg_5Dw#Cm#_=SjU;T3gSDX@&*vcwbCe;uKsP{VkFRDovJ1`uIZ*(w4NnMB4^Y$Du#BjaGcV#s&q2@r7b-oquhSyxh9F${lpjX z*%Lu*jSS^NE>{x1HG&hK-Dym>{EZ|%e`)f?^>A8>8>AiR`1OrCW?kb|g7-AC5JfC; zil0b`NvTwniHb<8J61z2b=1=k8*9zM0!wi@@%t_O2WD#%*PCj6?nIhYFBMp->w6Zk z3+;5>yMqrKFQ0O@=HvlTU_#oIrWJ1e6|RG5}#a8t5bLH(KA<^ zo;1?)m%?()vMAW?$FMBvk4$tIIrLC~Ba3G_Rp2f3UVA4_n9^D>-nrjqh9cyJLl=`S zB0eaqGalD8aA%N?%V;s3Yn4|as6%|aB7-Q1jd6VvKarrMbp7N+YF}igs=uL{qLw=9 zY4F~~iNaiIK`hN)?$Gbxe-cOS+}0#etus#arDyQ-4oMlC~>xv-?D!CYV-6`f4%I>YBX5Ds4${**WZhHNw73HPX-&~X_l znv^WSAq`6LXNaU#8zAeH#p+y*sHKj28s;{}no7O&(a!*bn%ijsmf~`11=iSLOIL8i z9S@y27g3Hy`K&~g&Br;8y%CozMi*OSJ&DrPyB^>|vzP*@^rAXf=1-ZawVq!2{28W!U5)s1C2z5GNR zAF5?UP4@C@0DxeXes$JtTU0E$CQ$;)Kq-`?64Byg+XAbt*@!RJtyShsP7zsfF%cPM zao<9GBnpsTmSZ_QO+{5E3F&2LzcoptR5x%lk};lA2G>)NhIROmS0b8ReppsbQGta3 zYJ5u!!>}1^r;z^SPB`%-GG)$Pm4%Ao1+bDt30!$XQFN!!G4uUPcuCLdDh^_GB1X!@UdWrYFMbz9G-_pl*HZ z%kRkW`2@#he-^2YvhEm*Yy`VcRW9AJwNr{lm(*0j@+0h~JD|5iwlnrPE?YDw`6il5}&30}^} zuxh{{iF^5(J3sI?&9u-8SL>$TUI_IQs{u!H;cnF}>H;!XQLS%?W#;*d(0FtiTqx-= zFkpAMoo-KcO8iP&=@>-qRzmHka}QV3w74^M(CmAUvqCOyBON76DM*tcOU~qzAt0ej zjB$M6L^G!FDV%#%VB~Uu2E-hC&i&QF#<+$`EJV}$+eP#9pT2bu0NP-bthI$ckRU~>H0d&A%90~jo_qz$Rj5>@TAg|g8a3&*Y}L9= zTej`mcj(x;OV@7Qx%bEu&%E&3Tc7>nH-GrkU#dc&;&7QnG6kkFSZpqjZzvQ?jZNj| z3JXgsM^4q=u-FosVL9HUuKg4$jn3e31wye@CRZp`TC2_OaJt+cuTNJ`-@wqw*u>P# z+``4x9gaYv&=@R^KqQeVEH;lX5Q@ao>-jz~ilS(Wp;(He8m{rcbzkrGT|anLFGTSC z@%>~-)6=o?&!m>@@?31(ZKB1Io7yjCIpDl(W(*hNE@oR)1c~)7NKcb6a|1T5DgH23 zVm3w7_}Dm8P*PRb?iBStN*~cCShb`AdK*&L^7UniD77IJ>2dO3HXd@-zi)UAf5M{* zHH)=jQD>)~Yn44{k?+~1-5aZXn85R~o%r#y-w7bdRb2ewDq=da-B}Y91YKB}?<)62 z0>a3fEkO%$w*xz)f;Ve7{Y|BeB7c>1RAvU?UzDRA$H21oBwv9Pa( zPyAF*_fe6JeilmgpYLt|#+@govh*$A@<5!+^jX+G(;v4onXw!x7kIxz=Ik8`+tiNt z&M$0IuXr(Hzyx3lGDEO{SR>gGvPE$~bH;EX;!4boga;`vGT!8ZuwWUUh`^$il5|oG z(o8ZjdyFzdtQ^csHOxfeHMEvj3F52|wh<4G3jO0RaJfO5>RF zS_f1B1OY`5Py_-30s@+%CKyn_5JFI(fPqiqt!<48HX+b3U}zXH7}d1iIRhH#O+{TZ zASOtr(n7?mBW?O&@+iX%lBsl>^(}QkH}-y;Z~4u(a=0bi%6HLYc#mz^-(Y{@_H(z! zh8t^R`(3rQ=WhDh{gd|PH%yyN*u(W}Ro-xll`3}i7*>B?Zp3@pc?p6(i;RpMs)s8ZzD#Z?W^94)t8w)8*%t*@8$!z(ItJpsy=X-kW0n@2p+dr4H&99 z7NtA6QAJf!?KK+XfeJ2y{ZpT5`gc*UPS!+l1sSdZ;V zdKPGHXKWmR;8a=&2~rBArKFrA7P(valya&6D{s8>!6!86*^mDc(c%&hBC08`u2yqEP8f0}jtnAd<*T5HnP%vUY6a9XwyG`KV{GUJqc z5J@jzY?J*0#`gFxVMKI`ll`IA0hw9ZrRo0fU#rs_%vRS+8FGHmwT-R4wm*gV*DmFw za{dZlljX$@Ij)1h%8B&%{V%QT9Gt58UhVv#H%|{QnD;K^yS_rD)2?Mf#y@amdbai` zpYp1rzU|7NH>9Bx%?U8^;y=AOBos6ZEF3%n0CiwBYeBz&Qwc z=P7p{y!cDeqE(xA9XfUC)}vRSeggX%|nm~j&(O_?@p&b$SSmMmKV>BeH03i|?G z#g!RMJNw)|9t8d8`btqO*)lkWkR|pWiRP?s7a(S0F=G1x2q zC}6s11t}v_+pU5ls5=f2b*_oV+il2d7|VR>CenBP*>aXg&PQ_qORavq| z6+DV(U8}X81t{B;^#>#o3tQJis>IB}JefyNKEUiqbR?Z;>XZn$81 zkhf=S&I9x2(}eJ!QNQmLPtNcBJt6880OaR+6u=e(N4rooN1Pj_?EYA3i?U|<`u;5x zMTnNTNu^y+s|P<)vpHAi!CJd^u2XC9X0h|_V!PC?w5#kfcG|vnC6$zxRF))473zpO zq0URQO7lyLO9z(DDBV!Hwc=^J|7S8bP680ZwmCsE>9u+=BQ+ayb#8aLk^GU+NN~hA;vUhDFh}4cP@Zz{cm9Kyb{yM5p5kuh zCqQRi!^ zY(g?+<E@)(rDn5Y(f{C{E6&&E!KwEO|Ah>R9?uazJ`F=$CiF>tHc&i_lSY$$g^4 zNE@m#pUy#n{P^(V#)X4?0a^7B;O2Sy_ut^HRdS|&l%oT9ot5paO*u5s|36jh6{CJh zY+fBZ?`YE32EiF?HsyqX>sVyqV*;o1T?y#d2^9ldTWFY9Hx*4YTy~lpL5-dGDR{*z zl=w{0UKk>|aeO!SyyfEN(u`SzCJ@g#;#18UhR}zgssj_=YK>PDoDyYCij&73+Midq zFhixd)vK5#m)Jh%AN@L{b<>ITjT^B8YX__YP0Q5RHIu!&-s5=z|g&nDZX9PS8k zJhlP{onlm&9yU~4!Dncwfw#xZjah~XTZV1XPQv%{zP1Vyp$Wu$MgJ*eNt5txdDuXQ zHt?Rh7?g0=B^E*&(k|Hf{@wQAXj18qXtVX@j6M#yX?% zg6tN7BJi_^ykzMCrD8W6bBtBq`g^x>LBo~>eEL(SvlvqzmRAF=-b{OjXd*}dJl!dE zM3B1b+#cO?DQNy<5j8$ha^PFVyysh2XGzih55gV36Q~m-JJurJ1&NIqA~u!E@||up z!^E1jB1&he7pVu+$zczISUPJ(q?S6rXj;vv;|sbN9GQNSr6lsN0FlMcQ4|>#Aqb&A zrQW+81&Ja>l$;VJ?vVIRhJd8ASupnYmBa+JfYh6F`YiLFxhL!n7zhG#$gPp1e?P## zyxA9}9N?OPs3Up-B95}x2}F|V(DV?`slMpcYG;!)$ZVYlcjF|Hh=|6-q}Nw!AOKGx zNg;~m9;HLYSQx6mreqJ5!bVKL8JpS|nKkJ07h^GrFWkkHH)rCP4DAtmm!LKIzqNn%c^utn0O)lT%YC21|{lMToKWys%Gz-{Leq<9W5Q>Ik_%FLg^?cST>k}&FeNIn?MUQ zcV0gyR_{;vQ<2;9&)qsq=XlB*Ew>PqsWlE{WDH2_FGN{8BogBW_Vf1SLSUCa+t7X~ zgVCU+)_VD3Rh7Xd2TIC+S8(%}2uMc#k8G+$gZ)>5ggom0mcDgH8*R09))|(-LP8)g z*hz{4EIRBk+ASu$!jMORtPN=tNkzdcs4FEEGmuM(Z?$#OfD51T?SV+~Gix8MAt_3x ziFCS~VlTUjQE#K=VM5|ED1<{(P-&N9{) z!Y|0_D@PChXwvW9NHmav%N9Mp+g0oF&9b2!lybjP%x6k(nhlH28PBv<{r)}vMM49V zaoEZ893b^y<%vWl%qPM>5&#eyrSe6N(s?1i&a8(&8P)Qq?h!NzUM2!X`c#tsxBlj- zfX#FCw@+Zn=hLN=_!oB(7oR+=QBrs=XsSnRDCR;Ft4xixl-<7s*LFL*=QY*~9Wc#P z)&aw4#|A4$cW{=Pn*&+#n@P2)*_nXoP_-opownTOpxh&RpB0$b5E%q(Gxq?Ut@mJh zC(kXp8s;5T9rYe>VZmw2QZF;Gv4(SjRv96tltjoTtE*OZa~!nc8vF4Mn3SZ+n!Ydt zO_p0D)pduBP@YgsmpbWV6;}LAE31Wnk8!)t9R?@4s3ejGqE6-ZqQb$5NAD`!BHmLZ zNPiioQF&pzr6ay?w229H(Wv%kq=~g0)gH>l3T|r+r;kp<+7uk$5Gf!;8LaIJrMhDj zw|pIg>VAHXl#b-E$IwBx_s|Cco||iio9dAPN=b&7-PMpQny;0Q56gALelABmPH13_ zyC2;ms#>1f9-C9UGAX$Xkl*@CuaQv!tpT5jaguhBrSQ|z@zPgtA?9)FCp4C$A%wQ% zoAhQQO|Z1uY5Z)$>R!xA4l4zA=1M#;?{G{UtP!&!A`A5lBs#$Yi#KjMn>^5@y^F%z zb9i6Bzfp3KjTSW@e?JJ#aHJ2@QX_i|#JQoTpHyxYYk?71vl z=7ey-VnI|ddLl8Nvu2}BL19$*MU42|gi#d8aaDPC{BKQ`G)4jHg90$HR-E-Pl_6Z!Im1CEK;i1UfkfI`wa-IIqK%c?Y4)24U!t5? zfiMB%7?ohgV{DsSh>MhrXvTmzj<<}|kU^WydQ1;(U^Tja*2FPitYn%}tY!Eq+yqXj zpGr|NSahZv#xTN8D@esrfgai)q}?Eu?P)BO*zg`H1tdu=u$tedPYtjm!$covBY z=Tbl^>6#x&`!o~LD9@7I$|?Bc$-viMlKp_0J$6bn0fxgKB6i-!GJXT5l+HY~OH$Wv z{n%Zi+O@|%F_)>u_3qKC4%i!6tT9rWaCs3pg~;2*1uq`)KD!oErbIh>JyS>I+8PDW zf}lRXSxe>S$%{9#>T^mRBcqpP-HbP}vDWU5YJZssMdy5}aFnz|V!wFvi-)11y#1%Zsbk+)*y%qY;>+8sEm_hANIqB_WYOWXw?elVZVB zaGIvei48mv@_Z74tRrT3&^xFy_JFli{=DF}Qo0<-XbXi3*|YbU>U`R4%jXa&A9nNc zjz5soiBK*Yo~q?AI<5la5XA=&8R{c6z0yjfp}UnI4-I5YD-N2W1D{ku^O)e(%B(RH z0m`rSJcwht6NN~ZFeQK-!68N5iM`FrgnAfMmeQ zly}hc2CA%9O7}9wp-?4yt6^i^tS-AZx#uz)`a$5D2&suR%5e;o7ftP<;o*fDp-i`M zuZ4}HqC}!ce-yaI8ed8JfUp9uy6ye_mO6xgQ2T_tr_r}!_`K)!efK2-DxxYu@I5f( zx(TnMQ7wIx)`T>?KZx*G^nwvP(Sg>MhUIdx#_>jdqjp0}pB$#!X8V4J(LxxbQB+6z zJzv65!>g|^YRM4cuVi0grwsaR_(FeS8jKz~&zt&NJo0J%*d0h{99`>mI43k^YD#Wt z^7>U@?J0azzlt-Th6d8(?fD>WNJK0Sy*d*azLspgcqy|&J7npy*^&~!u#ckVx{a@av7|0f*jKPi5XBlELtvVSGz?O-p@7c@`-JeWohi}VP)mC) zdkLGiE^Cx9!Zw^z5P?D^3{LJVJc6-vdu z12Q6k|EHdW*PR6Cx=gLVeZm2ac{1;}8m7rnCW&T#T)<_Y3b%DY zkRTaxf*^=>rfPCV8xnRlEMv5c3cYF{#c|?wbS-voG-C$UrY4IWmP1yKrkI-H$jpKA z#Z+4>&gJsm5ziuoiwp}4fdXZELM;_BCo9Hy++(tGNfXr~pisX#9KOO+g3vfzqNIqT z9WwfAI8RWDe?$c%eccFAJiA+^9Z5l*?x+%BHAZMp9-!9uiy5fQdv9nWAawaFl(+KR4v5p8d2CByO|B)CQ5n?%5bG1u!_1 zjMljRalcGZ9-xwS!-=Wjl^4VZ{xG%M|_5q#fyzZP6CRe`pwEi}ygs3SD0i zikF^ul~fxS3ki=V8cC=8MF{_)7Ecj)j(0Z+Y7VIOuAE>g&A|HMEBN6?kNeJi-_FL* zaq?3l+MkgWVAJ2=DBa@*ug+3GWy4m^T%!E$B5=YU2A5FFb{!5190XC#G{Ge_8T0nL z&-{wV8ylJBZ=g?U-_`QN2+vt2{GqV_t~IHX^usaE0Ks|sP}$GRFd>Bef+X}o*QQ%f zWD=?^*a)NZK)0xsPy?;0PU@RnbIE0OB@Vb338nCH*hlSqp`j@>A!3b+MygL+pOzCm z%uIGeF}+5DSGJD1o7em#M>50Ot8wo3?s>^&VL}S0Dr`sgdUhW*H3gz2qwE{2y-dPF z!wZv+Af)CKNMw|3c|I;!u(f8lMd1>09q)?yJhGcA%u2(!8THWclCm%&4ZMl)Qa{Fl zT#`6Jiqw$sSqxHB;L|Cz^!_NKh}lXd1=qmPtVYm80$jEu1QwcHj%8$ZyMbhak5KPs zn0KLI1%fR{&Fy}*Pt!(G;XYVISvLbi~$ z;CwI$jBzVMJhtVYP(2h-L|xV->Eud2UR+qsE)+B`m&r=59YU|zL7E*OWder}`HE9)aKmqb&JF#+(@rGrN~F_LT6};jL~)PB z70pV^;Os1aR?#b=VCQIsH51H z^M=9;epNdDyr@~->zcWh?LPTDNGS1#a|RV<>Fho^m1PyBp#^8dZ1s{>(ZN~kmwH3s zymYY73q@F+*=1AXWDGOOuutQwe0Th1K%vV#FdvJ}rtT(JvBzrDU$KMM?=X&NP@@n` z!zGxTj@#&<_W{L7#~>q|_)O0*Q~7%qn87 zs3j=3K&iE86_d|%bj#G#A|8iRC?l7(Q0963bp{;ut0FsTkZzP_P+VIa_>~s9MH}78 zdmr-e_p&@cowO5IkaQwG#WY|ev>D{)j>kUwrUyEz3dWE!N(_R|ByiZmurANgbmSW`yg+Z)F z%5X@TpAJ;sr?MOZK1I94grGA_>4l(%OQ~(vKbYF-owGQ%VC{$rRMJexsG-C!&-UxC z)YfXSfB-|SdN6v6Sxl8J;9}hixxr}$aj@OrrjrC)7YVkkg5?1fw)}qN{-5U}J-m2Y zAg($Qeg5yr-|^xtoXG^M&<7xT<9#I9{&ISJ80W{Z*ccO%5T?@;poka4W+88#)J4k! z7w481OLKCM9xrbnKCf>6k^22+5N|oUgN#A`vJAyrwWF2LyXz}Enj`RG z9#YLBr6Kkhh6zMoksNX*XSl{( z&%3nptIC?nH65h?LgdLCV;>_j@&T=a=96c$ijC?pSynK^hc`Dee=$l#_!nXw$UZzc z3rN4XYuUd^^VSHqJs^-}NRrCtP!lQASR#>XkfvTbG%4!%mnQU5?o)gs1+&PYDWS*} zVVY6P$d?k=f&+;MQn8Yu(Pmt589P)76KQehQh0cUQ6>NhKpD*Ax2$7{H z-yqSkSDlCoffsv@V&dnjyc0b#o?|A<7#>|_0bVLCz+2!OBBK=8->rxIt+MCxDVFmd zJn{Hb0$GkCscf!Ms(pBJ6snX!DdX3x!-uEbJ??Rz&)z;$3Y zlg&bKWP_nnwD^}W3J3lW**Bmp%v&n2ESE3xda@VRR4!4t4YQdQ?yTwF9I&X#L}aqw z0F!>c%QsjHEF8R7ZD#No>W=8?1&mWbIV|-Of+_KvbC|`Z+;UQux|U~kvFdYmoI0ni zfvNRQlR~3~nCvA(m}J|to^*U+=l*nf$@5J)!_Y=jGb#IUlW1tAc0j5gScV_2n}X?h z`U_QI=Q=wYTh&^zK%{3{s=I5_S}MIr;Lf3&&7niadgGP4)}L|Cp{vdI z^NM-}rw4nSRxpPU$Xh0_u28&)N^q%YdtP{N8C$6+WU7T*G$o}(V=QK5dygGjR|}Im zhkA&1V$X%1EPGZD0RmXG#GOx=@F3sn7wYmN!8GGkaNd7pJeAf)yw`(rwkU~Vig(#e zWwQ>-D`F~p;H8iNzjZg%&eX-D|HK^r=hB64CFGVO|9b^Q*-1R7xZRQpN$a_=*-e2^ zd$5NpM-n5SA(t007|{5XnUt{FSisE8%pWOfkvynaR8_h}>ht$Yt4qly=+~I)ihjA@ zw?tl5L2D9DT~6vevH>Km-x>jmhr2U=R+S@-V!AUko9niTDv^qEdJlF}l{BBO*3ydP zN=k9AHbj$UJ&v{2}%6Y?q? zM$AmTjkDmdGmIHZcEFe!#%CCNC94YjYx39})Lm-?Agn#{W#a#1e3DKg=Q%BsVvI=M zOrI~fAH35nYQB@#1DhM8;YRG{8iq<$!*G~65zS!FNzyy_bw2;P`yJ_I4?JOL*?BPb z0=Ni2)RaDHXvv~D$VYMWHpW5v;}+Z)>e`wH*_zfx{BOoR>&8_tR=imCqvL(Yraj25 z$c^y-Bnc}&Jjni%z1l9Gw1-NWGUxHk=G3-%ql;Ss^w_e(`-QH-&OvDKjb%W<5i}X* zblwax+x`pgSpDb9KM}9iy|%xOKOikxx?)jc%UwM1+LMbjmKDy)Vug*`VyaA5!935{@`4bD&!&>I>)BKqpt&j7hiBcT<}E-EWBbJJYIR*EA1v+v`oS64!DuVBG6 zS4&yToKBpupUh-2L4eL-gJg?UP9$YoGk@|Q){<& zDrB{XCXt7jIeK!TGy^Qk(dRMc(h&P2h(+N0L#P9{B8+riXFRf)#sq+MhaO-icfRfn zL7Ml-AD|TTfL&zr6%y$RnY;@=zw==y^2btLH2*yp>ZsL`<*@JPCR9&JjYDp_mw|-f zt*<(NiaC7s!>@1OpSm%6{uOpsZEEUE5?QQ-dI-U(2{|Fl0iFTE~?jZyJ5(p;l*2=*HR95m9dI6S zt-7dQ`XOm8X~Cd+>5Z`+_^4Ahu&*RiQvK?-ho#RMQdXxUey#fYRz9;%0Hpm|apUGz zbIvFT`*%}(Dk2B{=H&ew3AgARfdPK8j>c!`?>mu9k_LLxN~p+6GgIg=^g&!2N)YOB zo~YY0K*hiN9LK(7=Qxj95%lbO4o>hvWTa#OqH-qlaM6SvbFB)MUmP7D466URpC}Xss4GQ(@KT^Jj|!lv`{1MroXZ!z@)aq) z@B$o3&8*bLk|v|maOs-UUq)V&nUrr%p!Zq1jsH&FXP0ak-7sR4c=w#vMAVynEJ9>Q z;`2agLo!3oNO4d4TwDs2nPXcKp+`bA?m~^WK6@4mFlHD47Rv}2k_?Lp81=C87yv0& zE~I*geH5Y4Pq{}(NFu)beyWR)dW|M2Ap0~fO?hSMQ0KDklqZ9KX7M1Z>I zzm2@T4wS997P+><9AGyhH%JE?clxM~fz1=*IQkA6H;E8R;?1p;5((}Vvq4V(3Gx~| zf$$te{)|FCFa^^`T&j#5uQCTX_sJN7Mj1F;O2`aKvjdn;5WsvuN}bgI1cpZ*9$K_? zMM>hxkyq)WL>@@&9XN@ZY;+&YmiW^^n*F1{J1-F4c*QPUD^bUkkj>YE=^0R6;oF9{ zg=jGaukT>-eQHlaEW-4y5Qkq|6^|nBv$gnn@sjwn(4@Wprp3qm=GCeSvgquHmjFgO+R5bhjtEGue(#uS=m&51EJt@S-d=OkH$Bi-(|<{# zOV^gW&)B|zmM3Jnvx0f{#i`cClwR9F$g!QDuz?@kz9|U_&{QZCP8Y#W2(LCIPdWa< zg&|C{<&eByexWSNd+uwD6s|)COXwzIyWhlF^u*lHYnAgYA#1m7;k9V{mK5R4| zI&|!~)q3Qd?L$_}vBO7?n@v&soEYhBDW0*$isCDa<}hESFEge1(D~AyBbAv&46Tt? z)~+Pv%R@Vb^dL~2=qm)}^8y-o8M;O!dd1bj!x(T`iLerZsPLC)sW!%wJ04^N)BpNg%l-nOLg@ReK57ts-gC- zoK1p8V0=Fh@#Rb}j`m>xM*N#j<`y}BN1|T|8-w^@If_L^1OJu2lwve9EtL~t&vZQ$ z{Wiy?d6a5P#n(+G@*q(Q^RrkIdm(Xpf-X_MUqZ8xA~}}!dU~eXEmp57(<5)1!*?! ziV~Vp$1GMVnZ*WO5iNr}FOd3y%G=T)KGr1uX}}$pZ%NqInxWYGNx1)Sc-vs^A)O@s zS#n`hT5|3^gK3cH6Qe7;{%m%=?dk{%CX7 z`#~(dSP)M@?cL{^NfA=_^pbo|287Xh8(acI&zt(;Z#6VRy6sXFZZKP;$26N6_(d!o zY7z|vPkdZ93PbEdqzvz1F%0LLWzP>L+*_2f=uD4;vxV8+hZNgEZ}}17CqKxQXK{pW zH|(GbYU3OPD&@C6C*=B)WM`CSVtN^tkYSAW==x$Y(FVm21zpN+>Fr9c| z6(4RAdRp=05O98EYp(wI>T;&p%&N?dcN}9-NhwhogFMEr!lXS=z^$ab>ESEd;4Y<( zS$(C^50#Qy$T%|3!-#u{f|OQTQ0T(h8+b+Q7bG*^F3m`uQrL@ZuEOe8UE_f(&hU%( z6Hs3edc~>!F46P5ac)G8I}jJ8h62^QwQa@1DJxQPhia8(b^ad*H&p!*gNxp&i?bFQ zEtVoftSv>R8WSX*T8<@QaZzd`Lzd)i{xSZM!9%?{QHr*=O}RRx^LnU`pI#jcpH(JW zmYMm->S|Zt#puk$#nt1RqEEK6(d6EW7Q*<^uJ$fd zL>_VfkrdPVOA4~iLzr?oP#lO?UM3V1;y*c=FK9|=8T!t$2eRy@86Q_l_&vOKk;SK% zT=w7Pvdic;^rf;(!)=(d#B*imVEUpb+D;6X4Z==#yp3Whr=Oh|o2QRWoSknNqxJ6~ z@@_j|^~+O@iJo(4SjOKhRmUC#dv55~kb0Bp89*e2v zXx%b@q$rB+Hbt!vRFnk2oTEZ=&ljWRhFZE^E6h6(zz6w>sHEh0oCOGGK2wG~xe;=X zD3G?7UfHCF(uoJj}Sr}<~tB>sCNxq34vke=b{RuohU`UljKq6y)^EsRu?p7c=fD$t zGpB)J$f@_rG6Z!sg}#T5C}I8iA zCk@mfl9M#)M8ai@Ir{5X8Z{fy#FI|=y*)x6CjPtzWZD7iiV#m+F)wnM?z|UCF)uIR zN-DY|2k6dQ5xP63;cdhJvc~@pOo_BdT3Wg8W^D8J9e@o@slh_p$z{%IC$s|{fMG$^ zfd%SRUUhH*w1HReK3@b)5!+uL3l6&{yjtqBmcKZrCs9l>=l2@OCXAWg2B|O|mzXf* zh+i~_skEEb`l&-pHDEK7z7OfyCZfMwYNXxLsCduczIRA~ban%HjSSueueO}U1D&Bx z)YCKbR-~c3HcI|j-Hk%}Pw3{l@QGFzWU9Bj5Nq+t$+aI`^%$kbmjx7`&%OMaW>G%I zYE}^q8?IF7rRIA)C&LRm)UpfqXDHGHnH-k46aG^ud5R!X|r z0y|oEHyz1)vKXI?A=0579OR+}kwPzU{tM5}=Iq(W=2NLcHj7WC@~<2EFQ#_lXwQDz&*Fim zHXEMHv*O!`MvjOQdeD9ZVF0?zzB|2m9|lUJDW-cgpjylT6$S@ zADc^3jpK4{%NeuzQY!F~J|*RDdg^i8{#CT7Q&Ca>Ah=ynEo%0UduTF|xFb^Ci zgLlBIS39x(rtO5~M5?*{7hsXFeMHdShdplrfHHs0u+ioMXcFI2=;6gs0WCM&A-_la z>(OBbbMbi0FiFIB9Ja%l!nLNmW!GOit8FWJDcJ2c>E9W*ob&tjGIv#Sw>DTJ6_0l9X4WcA%sBUE5z} zf6Y#)?M2yvrkYoCo>n})*@Y64F4mzn`ewGv&aKsGdA05#mZGVF<_i>CO#p*=^^;Nt z6Ro-NKU31&(p>Vhzz%fX9J$#=?0PctqzelH%zBb8LWJ+stnzZMqD@M>tJg z2v>^_As0smUXD$WFa7#GWV|c66!PVRhES3v?CXxibVYU$r_O~eo)f(KK<2h#Ld>B}7Y4_9PhP!5W7R&=~LR@LP723rcMbFWQDxzA8G?paP}qqTcCP%WXbpWd@)2lb3u z+d#FO*b%*o8*y6eS!#71-D%`j=4yHQgqSv1j4+kHKN*d9zWfc`)IZ~oiySL_0hFJe z?YKVY$;yWBWZ!q;8kfYKr^0SF-h{z^__}}Fk*%+vF~tfngHO?XU_mexwaow714llsIa2fK(JpB6R~b~#EgwNB^bu}RJQ@Bj zn?$0O%cWY0tt&MK=vz1|cJZv9+dv&`60op*CZu-e!n&D|%9*{N1AR^Hkf!!t>~Z3b z@l}=EDz+`z7JU}KVd}}2ldF=?-M^|?(RFvm-6dBw54worazuV= zazzf%DeI5Nv{}AcD`%|G`}98oUJ0%wLiEye<~IQ;V~gG~;#f4|gR`D7qy8+|gE3Wj z`vq-g<5kWdT?-nD8aD5R2X�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 literal 0 HcmV?d00001 diff --git a/packages/web/public/fonts/avenir/AvenirNextLTPro-Heavy.woff2 b/packages/web/public/fonts/avenir/AvenirNextLTPro-Heavy.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3a6863411fa78c3c7324edb1721c374faa86b619 GIT binary patch literal 30160 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 Py}lQw7b3>JEiM26!Er+H literal 0 HcmV?d00001 diff --git a/packages/web/public/fonts/avenir/AvenirNextLTPro-Medium.woff2 b/packages/web/public/fonts/avenir/AvenirNextLTPro-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b4432fda77921809f335ad6d654e74296c985e0d GIT binary patch literal 30488 zcmV)2K+L~)Pew8T0RR910CyMw5&!@I0VQ|<0Cund0RR9100000000000000000000 z0000#Mn+Uk92#aD$z~j)Ls zD+ixj41!8qNd<8OJ#80=-)#ec*j{>*KCp&)mSebW1Sd9k*}PsLH{BHI4xCgxd%4K| z|NnE7ij0|dlBOF1cTChP3OXSPqDdi8n~=m@ab0Rft{arXA1ZH&o^79-W^X|5XyfYb zlUqWxT_MnP-H#24MB-sIG95hwFFPc&qCtmSF>YvEqNk%8ZUqauc9n@Tfk2?5vn0(D z_TSK#c77o5`WhI1B(ba}X^iHocP%CR{$(w;o| zvhvS^UH$*sr+RpMF8n^okYpre-$4Q?mQw&VJk9OjySoL;+p&#NV^oci@uhkrRWN^P zW6E2*IQ*#A?1GnE4e8v^T)7&Bp^IuYjv~7s&;8#~mCO5!@Yca2y<&!VD}* zCpx<)_VjNUi7w2Q+tkI^ZGQbzhdqb!quK1A^b|(YXr$4MG+{$xVFAM$vLn98-H)N9 z{!K&C8q7MRroFcLMQwV%hRl8cK(*q*NnEp_KtiguQ7TSnBDtY8$1)kOR!OEIPeNX4 zkZBXq7qOY2fHK%%FR|}c)xTlOmKiC((@1NR-KG9)>bLC(fZ$2s9fKm8nwCGz8UKB` zS7)RTuQOWzQ;~Q<(mIyEWqac&X^`}<&eaSd;@)m;hxbqT=l`jL{dwCoO|TM00e!JA z47dK^fBtf}3foWggEmzoEyO!oV>33GVr%StUw^MFEqnL*Eu+u=&mL5PgD$WJmmSii zk_uKxp&N2(X)Yfw$#JXH2;A8Cl-Zdf4sNUm4Fc)F5ek!*E9}?ekPeOOZn+^}TyH1ZGE^pfuwGsurg(LI5%$+zCn}-3P>hx zrKkk-Q3X|pPKo;bn`&=6kKjnaO4v_q!XKcw6-D6O=S(k3~k%0=~a=z&6|*IdvpvP)QDSxdKV zDU}&HxA`l=5QJMKh{zW8`_Af1o(%P8lFYIeO<@{ioI(g8gb>2L+$P8D@0Ya+kf0;2 zJY>colx!0Txud1%Gknza0!DM-`@LE%PnTFu%&Z3(y$D&7)FC6 zYPjovc_RsL{@<(CuRMx9#op|cnmEO_ItUOT=>nIgtzYlFUi5xHey)8lj_|97sx zw&xGWw#**RVD3>tYQBe{$=T$}r@%)(dCrV?ZK^m3=k_+QQj+RsV?AwY!!ZmPl77yi zIieu9z5TKV)>9vq8MI~{*7dFDp|`nrtpNXS_gFsM`yMN!#6SD@l*dH|Di2uMvD$)h zY{xkQJlIcvH~up~8UZ|VJfzUX876rwkr>KWL`~YSulj9)iC*L#ej0I#as?t2na$54 zc$bMf$qvfPRNAbTRNgHZZ)!*Pu4760=Y}RGuT|4V%YS4N@_zkKNSMf0{^%qn?^P3+ zVmb?K+azjW%gV$|U!|)jS>RSRW%h?L9Qs`;`Ykw0#Lh%ij`63JCjsyP#21$7NWV@v z&#Iosc67&fX%l<6=lf~@E}81Lw)Jey&e^KnR_1qP|Hdcw<&hhsXW#lxGy}H!bL0Bm za?2 zp{{q-2GC6~*?ex1qNpWZ`?w!#FhrG`t$VbqJb|p;*($Jc!g7i*r)LSCCHx>VPaOO7 zQ7VaX)apY^`jvNepp6dZ%^d?4aB`OYU~e2-a7I?<))ZQF_3;Ear>ukHaO=&15ENey z)|QIxt>Q4XxDQjvt566URbIXAeU`*O+E6uG8d zjq16LExRcDMUL3-rtzki8AY`KLF7lJuhjDam!}imBCOKWlx1MA)s^TF+iWg2jKzf! zpGuBU7a|mjh>Ry-{Zq~&6+~SJAvPxpT8l`(eAh>5;gem;uHYJ3E_{(R(oP4uuIWsE zQ4+`Qpk@VA5T_wyDdT4MJh!a8r{VRIswLCjiFgVgq(RxHiLU1QA&+48yDl_cLd}J3 zKd|CN=>j5kX0rql@sjx({f~t}B7I<%AdFB6X<4$hYZ1!@B3V$im9a2ILk*9VB%Ym!|;Iw6d9ws^xQ{(Y#OqEDMT1Y=Rf`UXDo6M;@5mohV zG}IG&Qf#({6n*2;H!2DHrGP%cG3E=x-O*rM5Nu!BFk?^0*8>=yKkAlOjiLgiXgSMb z$1kEs>_L%NZ6NwvZi8#Po1>+q!E(2{06vK@>fbbwR+mrW#PiaT$RTUdx`YNU5A|H7 zR9DMNhd?b8xveWO3F&42Sw}X+cJ!ugD;f>yB-AIvL>01$T}IBRv?Do`F?duP*XC9v z18V^n11%kr%;kfNdVa5fH{-Ph!dvnV1BfJ#Q@j0%!{sMpxvO z*C!RjKpe&r@+Rg=VrnUtR$(RQS6C}hMyx^=N88nMQ?H4)R$ct`=o9LoVUb3i7wh81 z0+(6nDvMmtFLu)dOFUwgC#?32HD0pTYf^lo(@eh07q4~u(bijnL3&fa2r^2BY>*i| zfx@&d+mw#U6TU%Zq6}4Ka@m&5Y-<*_Ei2oe*mfj&gPqysOp)tlyK}e3ym})4X-)a0 z)tt1D){=_os=RVNZLdymyKA(+mRcRGy>UHzjM+T(ZOGvH2nLhqBN}pEj?vKaYD|Wee*)hV!2mxdO8fm}H|Q_UcU6?nxlh;A z^~`%}KEltwcjP^{aXV)R_Qv3s_VxLl?^fKvor(axAP!t|?!oi*s!WbrVWCK|5~a%0 z)aN8~n$8~2oZL@zodIIEIdD4l*}lY?;VB_;>MV1I25I8%-3UO7&Z&?K-67O*>}895 zN|?)(H=ky!+R_v|V^gNQk-OrPBelpTOINT)j1M-88~9fxCXx!Pl)@@SP^?6$vb0Xp z2JJd@Qts~F9ED?!x6y{NoSZwA)8UM>&b^xH5EIv#8%x$~*v=gr#dK7B%5#)R?>pZj z-|2^+e)(NgbpV7kOcf&)@lF^%{a`>_wV;+s`lP71peNwE^8%34LR-3~h`)V9_{ zn|2*KDZi5o&KY5ZEyel5MY!y$2OfD+p4Dg=SU;Gbr6&zzGPIc9D*lTcJuK%Pg*@Yl z)-Ka-0}@}alWJCYD$I5}?4(fJT7x$2I&@O*zM|(S9CN&lwi#=u3TK>a=ez5o%dUFh zktgL@jfR2MOzWAmWX*={Ysa?AjWWI4H{bIE`3b-LE~@JRfslr&+DL^wLzd7{`V9TC zEsbRUnRs|8ro``kQaeigj3IMpf`p3Itw*mt`W$e`fI&lsU2w@2*NnSi!lc{oy6>UK zo|fk|Iwp4E+@JPm4Dq4mZM?mm&X;Unki^vIG{A0+X{wDHJDxeYKk{`3Y$o;0Sg;}{ zVRvf3lLzM*oZ>T0_df1b9STD#ct^=hW^#{QsB_6&am~0JCQQ2RuKON(?5XGTnWpF}iHVKVM9CP1 zh=i18yRcOJ(`i>SBT2bSrI0pH|EAJ!EaRI_^E58wI_?Eep}Z%`eHrMkc8%Bc3B`ne z=}>2)L<#Fmlqk(ICS-gcrIZKag+5G#q>;BHm8@#Jd(;fH*=hLm*DIgO&LB#zTv|&U zdyRmAfPjF2)C2^UQDRgY`FWu0Y;Q)J&B6J>O?n&W3vy0Tx50!og85}`g}you@a{&N zJs#RgY?{A^P@)(u{!a`flz@RF1BZm1f|`v?jJf8oP(V=Vz2-m7Td7v7F8z*}^v?8{ z26VH60k6NG-WbCAyfeI?ZSlAUbaTI@^Uf#{6w3pMC>rK zyW%?pgI|^4vZrqLM5ZLGu<%iFGo9qZT3mJVr9S}z!h$4j73cHm^-se^r^2hyo7Mc; zFFY;#-i>BtMI*nkFVnCVYCYUYxPd#Uv%DR?ugFa!`EQ(^+iP6xaQXqCj+|G^;ZOJ# zgd?ghK^K4Cu+n%E$P!Z1aEAnYxM%9~qgh5oZ)B&Bgc}pVF5H6VTAHCRbb0t(m?1H@ z^>E3T{s=(hN8@q++b01i%oF^RBg-DswZCYM61jKq8ge*R6PYmvOo7Zmn1iweBZkBV zG6@v+P&uK-85$SpTw!pB$rBbY*!;l-z!3~r7`R9@NCPk9gJZNwXH{q(B9avPBp!T) znL&Yz&?Z$-yDg*cHDYLjJWDGjTvu?dw~SjLk2_=-$0+(vz%hotlNdM!?lcC@fIEwU zbKuScT?D!ebQS12h?}4$;JO8B60Rvwx8b@2>MmUOK;4Jy0hmW%o`87<<|Vk-;69OP zhD2YO>MJPUNb)0+>_6cdKBksOX*8flH{irb6((fDf-KmOoxr#erk1+t#7zJ%9{l)d zq%kVMJerv(nrIbT0i&mH!VHqZFvHSb6hjO##1NyxC}_;=O_YPNay0#%jFs~|w)rTw z*cDm)EGQ(3 z7-EVcrWn=Cu?uFBmyKNlcrF87ndCt;b`9Vehvx=76Tze4;SxMhf`^EBtI)$3ylfSE z48g-?6?zK6gJuz>6NK1MCwAMzJg{-<7Ad9 z=9y!W1(sQ2l@-=mBTkG>Hb|0Sn{Ao?!bBEH6p>c&Txc4(Cd4f_+;hhxk5O;T;{zc? z>Y_?bEK#K$3_C7it3IBhRlRo(*ygaYyDKO}L$dhCe<0*$vQ{1~L#eCGGLWZcf zx9c7Q2~U!}7Lwlsd06(}I%gr}{W?O%hnN5b-RGBmUsZaj`krDLw*6jd2B`bJVMx%@ zecbzG*M7)=X;6nVPu;uD!0dN$@nB)E2W26mXOx)T+yoX^&W%yaztQ5vOMnOo7W&5; zdCJsKXri>&kWuGcGwGq1Q6Zin(eA8$6i*Aw!s+=<%MKpRM!C82HSs!c-ZKlkr61Zk za5#uNn0~P7-~u-tJYPH%WYs1eF0g8!YH9VF$-I!s8mijeyv3`v!eEm>a4Fs+V~kNS_gkH+uUQ(>&8<3@|e=S)w=NVW?vnI{Gr)o?w&N%Cwlg_)~qDwBjV%!ZA59)_e z;VqM<+;Q7Icis2M124Sv${YVrZ@rt|n)coYvu1qp)9-?JsVYGbDAGhmDAZ6V-9GJp zecCX3Ef}o!;0no{0#pX14im=k35khhzPST0>H0i=>Dj86A8zfJb9~!R6eX@c(PhJ`pYWchCUpFzg5G= z7L6gK$}xgeHO7#t#{^Q%m_ph-W{|dwImF6VKxDVg4Tzs;EP0T;`pCR95ljoef2?$N zS#jh}@;B82nzU%Q{^WESv*%A{gN?Gnr&~pvl8^ovj3J230ED=HsAx(p06 zI_9`mqE4Oq@)ulk#Wmw@m>}xZsXyaGk3IE#`v2Z}@41(F@W0-87l5OaBptxisZ+1k zOgr85i26MlXPSAIS!a`N_B7okw>qaO|&Oxtswexp&;`q|?so=+u91Qm0Pc;)7p!<&C$dbHgm_t@i~{NP?6g86a_@PF=7;TQM@o z%a;j-;L`!&00Q}Ubsj+hm?D;>fC~kLv4S9P370Ow-_xE98%gOfXwHp7;Npoe5iOW@ z4Gke?_W0@(U`O3%C?}%NUATY0TjZQIHg3uT_7$u z67)^O`=;T4(`bCtXnsSqOTb2K22EIDO)er60b&|m1gk|QxuVbYm)Ou73D}(XjTJbE z20f&a8qc=S2oejTYRO0hVi_;FM3gKk@s~u?$^@O}!>Hrp4xi8hvdlWEDadb%LBJ(W zNevo=;u3GDylI!;zkY*UB?!ypj}=;ePS=2qX`dyUtEiX+z+L9#Q~>>qU0Z-TM#hlF zS+G3dgAYJ-XD@$_cfDV4U=;H|gUs%Ob8Fo9Tj1>g{rH>$Tmc4H+NH~Ye)%q;plid* ztMX7jNbsQw9Lb5BbHVl1uw@_|NCx@>^cCor_!aSc;!nn(C1;VbWFnbDW{`zsIoUwo z2V?>ifC2C+Aj(tWb^r) zpUKG2I7fH-j`Q`c$nSbXFX{iZ^*jBKzxs(CMJ9vSG7Fi5ftkf@en_7+9v})I>gHpF% zJ!RVUd-bOd8b}QqmPg5;N(t6gJGz%uBK=Qhtrb;DwY)avcD2&_+UxL-w5qGCHg_#T zFq%^rtX^QL)itGTbu|_6mBW@OR6-FRr{ayuII86{jI_>JPKE%pOD{dGo{D8uSg2CP zD#_iX9-M0BP;P_ms=)|X|1sZeQZi-EA~So|4D(z%FkeG(=?0zOy+6h@_r5s!3mgA; zT2E^HT3){09&lUV4fhd$4EHHS9?nyN`+WK3KS+Xjv7{n}39(unsVEeYCh31nw1W&* zpRdtsmfP!V^F3XiZLKZM3)nf2bW*e@F3@^WbAH@!n!Q+V*7ZtW^{;gaSFB-c*K`fW zq&Slq^k`40GmgH~tRvYb&V_s?tRfZApPfAj@Qogw9jiW%L^-Y7`Lh^z)NmF;GUK(w zt-v}<>?0&HNEuojH?ouBJiUnUGtLsT=`9AM)fVqd(}P#916VPh~Fji_%bqH|JW86G$oE6Cyz00k;gO9=V=CIZaR75|fX)4Z zehOUi4ZyYU3~avv?EO>RHC_wT(A1wFMS_C6NGeZ50$ug)7&%27?G$-d=(Eg6%(}S* zbQ~cM)(vX|t;3)nBI{SbF@mw_9}?*5*TK6_z;y93OT4{8Eg21r@fe)=cx&`V?&mWn zg}$(!u^nXCj{j#A<)1t$w+v0gC5&wcKA8Jv$~T|vmX8Mz<6nq6!b$s>9@jxk3V2$X znT}+wT}^!B0nJ|}UcPddU5}#R7}Qo57gMTQzS0HiNj?c`nzaK^y5~g=WA#p zJUi!yL7+eeS~;c~rFxKL(U**g%6M?T%9LqnRuNS{fmtdla<0hXT5BycW$U+VLZd&v z?CS~cE5XrElfAT6dA?NB{D8dSd)Uk8cd_w64hb1!bOPx->v`ak^P z-@(F}fqAHQ)jb^We~sBJ;=ve!@BSt6LVy`MeBN`kkiq1J5DT%znxo`%!a$mVEE|%9 zV9*AZ8-N^o^j}V7ySKnj5>3loMfTF~_M)#D2L2~y$Z&?x$c;z}d*CktfFC3V!n?0E zy{dL89-XPiT7_K+5l9Y{>7`hi7Z+>%{Wsp(B?}ny17?23ZHhdEwetudHBBt$#kD=m zR=akYTBmicPAJmH5e)j9Verr2w4>jgfAQvn`mA61*;a<>8k@t2yvxE0F?AcIYA9;% z5I-K)|B|idzUmh(e>0lDQpn&K2nY!oS&`wCkU5DFUT)UDMF@bzFWv)5VxZYybRBHZ zLBz0r=r}U(qU@`<5}@0r$WyxBt^wgd3X`+9pD(;=( zZ+9(0{=Op1OJ`E%!>f-^K;_#tsW+WLUWiQ4mJw;QX_gy}-4!@0>$2Ceb|F#Z}zdTq|#e|njS7xVQfmo^^|cN>A-Md@;-W{0FCdh=dLDa447fhfpMXIL;DqTF6i>zinG+)RkI=ZoLe0=xJjb?A78TQCF z@^JmcJHfQwEezZN`W7!&MHExE@meuBAz-HTN!cTGPJ}Yf9cam*G}B&+~c zhXNO}@Rktm-V_MNUYbd>cpzsa6bAfFv9lbuP#lttS&-k#k>%#4GX>OP7GNcz0t1yf zF>O+Dk&sK2adb1JHQvCAQWt-@NcHJu4wE960sXIId+m05dEH4vA#e6=DOr#M22B@ka9CYtAb4&vT=#)0j`qJA@|l!IEkjVBb!eyyRb!3wY(P1XfD{V&pY z-g_`Wdw7BA*sQHAN2IAH765Oxxu9*#c06(`!{D`X7x$JyjW4gFpEj-w zaYLwlLT5y1l{dXiMTTiS0wg7Z{k|oUwNN~fQ`MXrRe9I9u9s@nQebA;GrJ@K^TXFR zvjOJiW)^Ga)~Wd!Wqrx}J{(7olXInOR}*U`ljv>+7JVwY4c#r5R9)7xn11~>r=XZ4 zwh`}8-V#zw%NxzguvDZarF)h79>ScCKY25GT-$GAcFh6;bcDjLvr#qPxE421dn=WK za)Q(>(AlOktir1PYC+N!%}h(UOH@wVjs4`!g+G&_D z#pNbP8b)J(t~V}>W~`h-TC(B4RQ9-0N~fqTdFk}xfvePW_I})k412m7xp7YY=JfiP zv$%zwLq;Cvq)5im2ZC9SYY@As7Lv?HHb{AruKv*L#W~58f0>P4PqFmhYE$i^`O~!K z#PH&TIKe_U6UHOornR|_7D<6T)uL+JMhc9@jI8DIZ;P>G+MYh~m5EKb62jqA$($nv zTN%jJEUen-Vff#gq!OkT2p~H8uzh=@zB+J4iT&F0NB-ZOc&RxXS93Qk2A^|f=klab zBVg*s@lcN@wxj1REVsrRAM9Y86-`#$Y z+CfSGkmVF+y7b>JN+}>BO0OFt9l?Nzq8Wk(4$Sy4YX))b)K~@Te68m^uX6#Keww_p z;n3rn^4zB+aOjc~rN5{t>$c4{B9ksam@iz<^_tf|z@Tv@I3cr;ep1QiQSmp5s|1-ptw~zYzrG2{1BqE8GTb7r`*pe^5GMt4MBM#u&lligHWv7(mtkSQ$ z)KA%u&2{#)NJgb*SlsTKQ(Ss=HEp0Q}$yxMAT{;-Ge)~i$p#lgltM{YCwCL z0Uxib_XC?kZ4p18!s@Ks8A!?;qPJ@9aTNYSI7jR*3WMx5x-0v_d3gY5{*>wuE&nq5 zZ*xHBhq#}yb_OEu#8C^sfmVKIj=CPUi2F(o zZbPdMvmLADmmp$3HM-wVnY|h-;^ph7tCCizr&YtQ1L^Qju6KaGT?|5S(Wv5SxxEX! zg*$knn^69w*C2-!LX7<|;hdpJm4^lVv!~67bIb&36f!Im7NQEn>UOx{!3!~fm_eZ5 z;3li!A{dR`olueEP@o`M@*%S(hgH6Z&z|IU*&2{+V8f4}l|1tIk!*R6?INY)jnwfb z@_$%JPW3`lZ*U6a?@71ekODE2#uR_?XT6RvB=*vpAKQy*aa>m|m!Kar01W86-y&Ay z&jWCrrc71zFOko>>-%KP(-Ey|^{L<6-9N9|l_(srHRDpubhiEEkQd!H6{CjjPI?p= zXuVfskt~tAlR1j?o=XTfrnB%g&x5N|$1T>>NX;3WEHEmAgZY+5`yh_rMJV3Q9X*mF zYrLVqsv5(n7@ZVvHE!-HNjEh1PDwf2b692Bn4G!1+NCK49F9Iz0p#Unv3HOLDCX8- zC1FWcC6$p`jp%c+Lp-Uo# zqMaS?==E>xq%(%Uiqig$6>6l;eqB0c=4wA~mW2#D8rjx)iU!?JVo9af&!=TJ$#7Qz zDcUhTz5vE4GOJOphJkL8iCgx;^ap)r$ic($fS=P)^U1HSB;SX?6aWLevt{uH0{3n1 z(I3_X6+z!k_a+bMSR)1o3naam*oT|Fu@SKGuH6*|w-p6UT%+AhIzwPw6eUKj7%^O@ z`YBI(*T8nD@#<^Ui`f~s%_#>ZDpyJhT`N`~XlWL(unsF#ia*dMTFDE=I2mVF|9a!b z6|3sh?Av4;;x?V{(nd|U4NQC4FqWJ+uApe?Ow_v8Z{=-uo-?roWtbd{moS}1 z1{sR&r_;cTP#aP~vN$JGyuaCcwCi-eXLx%g-HRMKd+O&^j+;vMz&s4LoAHuGDs}WZ zFQG6h0D~21#S|K=zn}@5Fn}zKY)G-?XmQZgZI%2ktzd3g-m4q+%2BQ;88xkOD-&x0FwTjO2ll4P zAK8ofFCYlDz5^2oa9mrNt>Njr4i=~+e~H{oSL6rm3SwU3b5dtkq{+otU@UT%(ajcf z%7K>nfH~*XG{^WHL)Z?M_HF$umSrs&-cp287GrEvz1um7W5w$G8mw=LYOQ8L7_Uig zn7Gmcx;kFBxf~@;QX#y^W705EbhAsrYL-D08Y~unR#hCkynO1SB)0IXOn?g~wC8Rh zfV4MsNT4;u??N#=@4aVEdMj&~&A+7pl6DnpKg~zfAhQKt<}3YQO+imr!A}C;K5HMx z3XnP{EKI76JIaeYJMBkurJ5Yc*;QQ^|7N;X0S0q}V`+Q@4)d$t&mzuh;P4F+Bk6@3 zjNvz;VJ?P{MZWyzZH^AKWhi~_c693DRgU}YC2WdB;)T6NYBq*oqN(#$n`nG9s3n$! z6A8mdD$vyBn-ksZf7ssvBTCX$OE+hApF(i{up~tXWNg&!_!BsnI3c8`}?)$>HQQ!imgv^1NsrkKLFv@FMmGh(47O`F{YZy z6cIw$)wlH~On$R4Kmo=x6r0W;CDRVJt$;vI*A)q-zSjQ7I)+m^7h!y z*SoM1^~Zp|q3vf=bqM1Sc=y$Ud^16p+&1Lje&@6_9MN0!2K`@uf&aM|ABb<2yFU16 zs)zriiTit=IZk@~+joEI`~E>})kvjAlY-pu)A;-nVV6EnuY6E|4H57)SX_`m2*7({ zFJh>F$9@0$w!EHvh5d}1ma(Y2_D0m&kiJr9rL`IVjh*n#w4-k&)~d`!W!4(Pw{{QH zj#`^IY0f71WQ#Y;GMX zkPDR*tmAmpCHe9y+>q0S8!S}K)#`9Q$DqrJ8zT5+1DjFd8feYaeYq_}NWE5uK~3M`F!lSjB;vy3`zbg%?<|J*=%0Av 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 literal 0 HcmV?d00001 diff --git a/packages/web/public/fonts/avenir/AvenirNextLTPro-Regular.woff2 b/packages/web/public/fonts/avenir/AvenirNextLTPro-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6a81ba8726e9f01afeb5ae10c12096313c4baa03 GIT binary patch literal 29856 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 literal 0 HcmV?d00001 diff --git a/packages/web/src/public-site/pages/landing-2026/LandingPage2026.tsx b/packages/web/src/public-site/pages/landing-2026/LandingPage2026.tsx index 7876ae066fe..013775717c2 100644 --- a/packages/web/src/public-site/pages/landing-2026/LandingPage2026.tsx +++ b/packages/web/src/public-site/pages/landing-2026/LandingPage2026.tsx @@ -30,7 +30,7 @@ const BASE_PUBLIC_PATH = const LANDING_FONTS_CSS_HREF = `${BASE_PUBLIC_PATH}/fonts-landing-2026.css` const URBANIST_HREF = 'https://fonts.googleapis.com/css2?family=Urbanist:wght@400;500;600;700&display=swap' -const DUST_BUCER_OTF_HREF = `${BASE_PUBLIC_PATH}/fonts/DustBucer.otf` +const DUST_BUCER_WOFF2_HREF = `${BASE_PUBLIC_PATH}/fonts/DustBucer.woff2` type LandingPage2026Props = { isMobile: boolean @@ -163,8 +163,8 @@ export const LandingPage2026 = (props: LandingPage2026Props) => { diff --git a/packages/web/vite.config.ts b/packages/web/vite.config.ts index d071f4471aa..70e95acd1b6 100644 --- a/packages/web/vite.config.ts +++ b/packages/web/vite.config.ts @@ -91,6 +91,33 @@ const nobleDedupe = (): Plugin => ({ } }) +/** + * Harmony inlines every Avenir weight as base64 (~240 KB, avenir.css) so other + * consumers work without extra setup. Web serves the same fonts as separate + * woff2 files from public/fonts.css instead, so drop the inlined copies, both + * from the harmony source web aliases to and from dist/harmony.css. + */ +const stripHarmonyFonts = (): Plugin => ({ + name: 'strip-harmony-fonts', + enforce: 'pre', + transform(code, id) { + const file = id.split('?')[0] + if (file.endsWith('/harmony/src/foundations/typography/avenir.css')) { + return { code: '', map: null } + } + if (file.endsWith('/harmony/dist/harmony.css')) { + return { + code: code.replace( + /@font-face\s*\{[^}]*Avenir Next LT Pro[^}]*\}/g, + '' + ), + map: null + } + } + return null + } +}) + const SOURCEMAP_URL = 'https://s3.us-west-1.amazonaws.com/sourcemaps.audius.co/' // Matches what mobile's react-native-svg-transformer runs on the same icons, @@ -239,6 +266,7 @@ export default defineConfig(async ({ mode }) => { } }, nobleDedupe(), + stripHarmonyFonts(), // bip39 bundles every language's wordlist; keys only use English { name: 'bip39-english-only', From d28db1463a93bdb609f06bb451c77d39535da35e Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 23:43:17 +0000 Subject: [PATCH 2/6] perf(web): stop re-rendering the app shell and play bar on every tick - The playback rate/position hooks move out of WebPlayer into a PlaybackPersistence leaf, so play/pause, track changes and the 1s podcast position updates no longer re-render every route, the nav and modals. - Position polling only runs while long-form content plays and selects just the long-form flag from the track. Position writes to localStorage are batched to one per 5s and flushed on pause, track change, pagehide and when the tab is hidden. - Desktop PlayBar and NowPlaying only re-render when the displayed second changes, and prev/next read the position from the player, so the hotkeys are no longer re-bound every 500ms. - The mobile-web PlayBar created a new interval after every render; the progress bar now owns its own interval and state. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DmUrAQMioSmE4rsEgLPEQL --- .../app/web-player/PlaybackPersistence.tsx | 14 +++++ packages/web/src/app/web-player/WebPlayer.tsx | 8 +-- .../src/components/now-playing/NowPlaying.tsx | 22 +++++--- .../components/play-bar/desktop/PlayBar.tsx | 30 ++++++---- .../components/play-bar/mobile/PlayBar.tsx | 55 +++++++++++++------ .../hooks/usePlaybackPositionPersistence.ts | 53 ++++++++++++++++-- .../src/hooks/usePlaybackPositionPolling.ts | 17 +++--- 7 files changed, 145 insertions(+), 54 deletions(-) create mode 100644 packages/web/src/app/web-player/PlaybackPersistence.tsx diff --git a/packages/web/src/app/web-player/PlaybackPersistence.tsx b/packages/web/src/app/web-player/PlaybackPersistence.tsx new file mode 100644 index 00000000000..c98eb2e802a --- /dev/null +++ b/packages/web/src/app/web-player/PlaybackPersistence.tsx @@ -0,0 +1,14 @@ +import { usePlaybackPositionPersistence } from 'hooks/usePlaybackPositionPersistence' +import { usePlaybackPositionPolling } from 'hooks/usePlaybackPositionPolling' +import { usePlaybackRatePersistence } from 'hooks/usePlaybackRatePersistence' + +/** + * Renders nothing. Keeps the playback hooks out of WebPlayer so play/pause, + * track changes and position updates don't re-render the app shell. + */ +export const PlaybackPersistence = () => { + usePlaybackRatePersistence() + usePlaybackPositionPersistence() + usePlaybackPositionPolling() + return null +} diff --git a/packages/web/src/app/web-player/WebPlayer.tsx b/packages/web/src/app/web-player/WebPlayer.tsx index 9de5a30e0c5..ec49facb262 100644 --- a/packages/web/src/app/web-player/WebPlayer.tsx +++ b/packages/web/src/app/web-player/WebPlayer.tsx @@ -66,9 +66,6 @@ import PlayBarProvider from 'components/play-bar/PlayBarProvider' import { RewardClaimedToast } from 'components/reward-claimed-toast/RewardClaimedToast' import { useActivityPing } from 'hooks/useActivityPing' import { useEnvironment } from 'hooks/useEnvironment' -import { usePlaybackPositionPersistence } from 'hooks/usePlaybackPositionPersistence' -import { usePlaybackPositionPolling } from 'hooks/usePlaybackPositionPolling' -import { usePlaybackRatePersistence } from 'hooks/usePlaybackRatePersistence' import { MAIN_CONTENT_ID, MainContentContext } from 'pages/MainContentContext' import { TableType } from 'pages/pay-and-earn-page/types' import { SubPage } from 'pages/settings-page/types' @@ -81,6 +78,7 @@ import { shouldShowCookieBanner } from 'utils/gdpr' import 'utils/redirect' import { CREATE_PLAYLIST_PAGE, getPathname } from 'utils/route' +import { PlaybackPersistence } from './PlaybackPersistence' import styles from './WebPlayer.module.css' const { getFrostedSurfaceIntensity } = themeSelectors const TrendingGenreSelectionPage = lazy( @@ -510,9 +508,6 @@ const WebPlayer = (props: WebPlayerProps) => { useSelector(getFrostedSurfaceIntensity) ?? FrostedSurfaceIntensity.DEFAULT useActivityPing() - usePlaybackRatePersistence() - usePlaybackPositionPersistence() - usePlaybackPositionPolling() // Convert mapDispatchToProps to useCallback with useDispatch const updateRouteOnSignUpCompletion = useCallback( @@ -1704,6 +1699,7 @@ const WebPlayer = (props: WebPlayerProps) => { + diff --git a/packages/web/src/components/now-playing/NowPlaying.tsx b/packages/web/src/components/now-playing/NowPlaying.tsx index 8abc7a55209..491f674cf5e 100644 --- a/packages/web/src/components/now-playing/NowPlaying.tsx +++ b/packages/web/src/components/now-playing/NowPlaying.tsx @@ -178,11 +178,18 @@ const NowPlaying = g( const startSeeking = useCallback(() => { clearInterval(seekInterval.current) - seekInterval.current = window.setInterval(async () => { + seekInterval.current = window.setInterval(() => { if (!audioPlayer) return - const position = await audioPlayer.getPosition() - const duration = await audioPlayer.getDuration() - setTiming({ position, duration }) + const position = audioPlayer.getPosition() + const duration = audioPlayer.getDuration() + // Only re-render when the displayed second or the duration changes; + // the scrubber animates itself between updates + setTiming((prev) => + Object.is(Math.floor(prev.position), Math.floor(position)) && + Object.is(prev.duration, duration) + ? prev + : { position, duration } + ) }, SEEK_INTERVAL) }, [setTiming]) @@ -325,15 +332,15 @@ const NowPlaying = g( const onPrevious = () => { const isLongFormContent = track?.genre === Genre.Podcasts || track?.genre === Genre.Audiobooks + const position = audioPlayer?.getPosition() ?? timing.position if (isLongFormContent) { - const position = timing.position const newPosition = position - SKIP_DURATION_SEC seek(Math.max(0, newPosition)) // Update mediakey so scrubber updates setTiming({ position: newPosition, duration: timing.duration }) setMediaKey((mediaKey) => mediaKey + 1) } else { - const shouldGoToPrevious = timing.position < RESTART_THRESHOLD_SEC + const shouldGoToPrevious = position < RESTART_THRESHOLD_SEC if (shouldGoToPrevious) { previous() } else { @@ -346,7 +353,8 @@ const NowPlaying = g( const isLongFormContent = track?.genre === Genre.Podcasts || track?.genre === Genre.Audiobooks if (isLongFormContent) { - const newPosition = timing.position + SKIP_DURATION_SEC + const position = audioPlayer?.getPosition() ?? timing.position + const newPosition = position + SKIP_DURATION_SEC seek(Math.min(newPosition, timing.duration)) // Update mediakey so scrubber updates setTiming({ position: newPosition, duration: timing.duration }) diff --git a/packages/web/src/components/play-bar/desktop/PlayBar.tsx b/packages/web/src/components/play-bar/desktop/PlayBar.tsx index 30bb3626c31..81a7bc02fd0 100644 --- a/packages/web/src/components/play-bar/desktop/PlayBar.tsx +++ b/packages/web/src/components/play-bar/desktop/PlayBar.tsx @@ -113,14 +113,20 @@ const PlayBar = () => { const playable = !!playingTrackId - // Update timing state + // Update timing state. Only re-render when the displayed second or the + // duration changes; the scrubber animates itself between updates. const startSeeking = useCallback(() => { clearInterval(seekInterval.current) - seekInterval.current = window.setInterval(async () => { + seekInterval.current = window.setInterval(() => { if (!audioPlayer) return - const position = await audioPlayer.getPosition() - const duration = await audioPlayer.getDuration() - setTiming({ position, duration }) + const position = audioPlayer.getPosition() + const duration = audioPlayer.getDuration() + setTiming((prev) => + Object.is(Math.floor(prev.position), Math.floor(position)) && + Object.is(prev.duration, duration) + ? prev + : { position, duration } + ) }, 500) // SEEK_INTERVAL }, [setTiming]) @@ -212,14 +218,16 @@ const PlayBar = () => { dispatch(shuffle({ enable: false })) }, [dispatch]) + // Read the position from the player rather than state so these callbacks + // (and the hotkeys bound to them) don't change on every timing update const onPrevious = useCallback(() => { if (isLongFormContent) { - const position = timing.position || 0 + const position = audioPlayer?.getPosition() || 0 const newPosition = position - SKIP_DURATION_SEC dispatch(seek({ seconds: Math.max(0, newPosition) })) setMediaKey((prev) => prev + 1) } else { - const position = timing.position || 0 + const position = audioPlayer?.getPosition() || 0 const shouldGoToPrevious = position < RESTART_THRESHOLD_SEC if (shouldGoToPrevious) { dispatch(previous()) @@ -227,19 +235,19 @@ const PlayBar = () => { dispatch(reset({ shouldAutoplay: true })) } } - }, [isLongFormContent, dispatch, timing.position]) + }, [isLongFormContent, dispatch]) const onNext = useCallback(() => { if (isLongFormContent) { - const duration = timing.duration || 0 - const position = timing.position || 0 + const duration = audioPlayer?.getDuration() || 0 + const position = audioPlayer?.getPosition() || 0 const newPosition = position + SKIP_DURATION_SEC dispatch(seek({ seconds: Math.min(newPosition, duration) })) setMediaKey((prev) => prev + 1) } else { dispatch(next({ skip: true })) } - }, [isLongFormContent, dispatch, timing.position, timing.duration]) + }, [isLongFormContent, dispatch]) // Effects useEffect(() => { diff --git a/packages/web/src/components/play-bar/mobile/PlayBar.tsx b/packages/web/src/components/play-bar/mobile/PlayBar.tsx index fae9ba8ef38..9aff3d096a7 100644 --- a/packages/web/src/components/play-bar/mobile/PlayBar.tsx +++ b/packages/web/src/components/play-bar/mobile/PlayBar.tsx @@ -48,6 +48,42 @@ const messages = { preview: 'preview' } +/** + * Owns the progress state so the 200ms updates only re-render the bar, + * not the whole PlayBar + */ +const PlayBarTrackingBar = ({ + isPlaying, + trackId: queueTrackId +}: { + isPlaying: boolean + trackId: ID | null +}) => { + const [percentComplete, setPercentComplete] = useState(0) + + // Sync right away whenever play state or the track changes, then poll. + // Polling while paused picks up seeks; an unchanged percent doesn't render. + useEffect(() => { + const updatePercentComplete = () => { + if (!audioPlayer) { + return + } + const duration = audioPlayer.getDuration() + const pos = audioPlayer.getPosition() + if (duration === undefined || pos === undefined) return + + const position = Math.min(pos, duration) + const percent = (position / duration) * 100 + if (percent) setPercentComplete(percent) + } + updatePercentComplete() + const seekInterval = setInterval(updatePercentComplete, SEEK_INTERVAL) + return () => clearInterval(seekInterval) + }, [isPlaying, queueTrackId]) + + return +} + type OwnProps = { onClickInfo: () => void } @@ -70,25 +106,8 @@ const PlayBar = ({ const isMatrixMode = useIsMatrix() const { data: user } = useUser(track?.owner_id) - const [percentComplete, setPercentComplete] = useState(0) const record = useRecord() - useEffect(() => { - const seekInterval = setInterval(async () => { - if (!audioPlayer) { - return - } - const duration = await audioPlayer.getDuration() - const pos = await audioPlayer.getPosition() - if (duration === undefined || pos === undefined) return - - const position = Math.min(pos, duration) - const percent = (position / duration) * 100 - if (percent) setPercentComplete(percent) - }, SEEK_INTERVAL) - return () => clearInterval(seekInterval) - }) - const { imageUrl: image, hasNoArtwork } = useTrackCoverArt({ trackId: track ? track.track_id : undefined, size: SquareSizes.SIZE_150_BY_150, @@ -152,7 +171,7 @@ const PlayBar = ({ return ( <>
- +
{shouldShowPreviewLock || isUnlisted ? null : ( { const dispatch = useDispatch() const positions = useSelector(getPlaybackPositions) + const playing = useSelector(getPlaying) + const trackId = useSelector(getTrackId) const { data: currentUserId } = useCurrentUserId() const hasHydrated = useRef(false) @@ -59,8 +67,45 @@ export const usePlaybackPositionPersistence = () => { } }, [currentUserId, dispatch]) + const pendingPositions = useRef(null) + const persistTimeout = useRef | null>(null) + + const flush = useCallback(() => { + if (persistTimeout.current) { + clearTimeout(persistTimeout.current) + persistTimeout.current = null + } + if (!pendingPositions.current) return + localStorage.setItem( + PLAYBACK_POSITION_LS_KEY, + JSON.stringify(pendingPositions.current) + ) + pendingPositions.current = null + }, []) + useEffect(() => { if (!hasHydrated.current) return - localStorage.setItem(PLAYBACK_POSITION_LS_KEY, JSON.stringify(positions)) - }, [positions]) + pendingPositions.current = positions + if (!persistTimeout.current) { + persistTimeout.current = setTimeout(flush, PERSIST_INTERVAL_MS) + } + }, [positions, flush]) + + // Write right away when playback starts, pauses or moves to another track + useEffect(() => { + flush() + }, [playing, trackId, flush]) + + useEffect(() => { + const handleVisibilityChange = () => { + if (document.visibilityState === 'hidden') flush() + } + window.addEventListener('pagehide', flush) + document.addEventListener('visibilitychange', handleVisibilityChange) + return () => { + window.removeEventListener('pagehide', flush) + document.removeEventListener('visibilitychange', handleVisibilityChange) + flush() + } + }, [flush]) } diff --git a/packages/web/src/hooks/usePlaybackPositionPolling.ts b/packages/web/src/hooks/usePlaybackPositionPolling.ts index be40661ba3e..0eb3b3e4e4f 100644 --- a/packages/web/src/hooks/usePlaybackPositionPolling.ts +++ b/packages/web/src/hooks/usePlaybackPositionPolling.ts @@ -20,23 +20,24 @@ export const usePlaybackPositionPolling = () => { const trackId = useSelector(getTrackId) const playing = useSelector(getPlaying) const { data: currentUserId } = useCurrentUserId() - const { data: track } = useTrack(trackId) + const { data: isLongForm = false } = useTrack(trackId, { + select: isLongFormContent + }) - const stateRef = useRef({ trackId, playing, currentUserId, track }) - stateRef.current = { trackId, playing, currentUserId, track } + const stateRef = useRef({ trackId, playing, currentUserId, isLongForm }) + stateRef.current = { trackId, playing, currentUserId, isLongForm } useEffect(() => { const player = audioPlayer - if (!player) return + if (!player || !playing || !isLongForm) return const interval = setInterval(() => { const { trackId: tId, playing: isPlaying, currentUserId: uId, - track: t + isLongForm: longForm } = stateRef.current - if (!uId || !tId || !isPlaying) return - if (!isLongFormContent(t)) return + if (!uId || !tId || !isPlaying || !longForm) return const position = player.getPosition() dispatch( setTrackPosition({ @@ -50,5 +51,5 @@ export const usePlaybackPositionPolling = () => { ) }, RECORD_PLAYBACK_POSITION_INTERVAL) return () => clearInterval(interval) - }, [dispatch]) + }, [dispatch, playing, isLongForm]) } From 63b0081facf55bc0a80f767126520b805d405120 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 23:44:21 +0000 Subject: [PATCH 3/6] perf(web): don't load localforage on a new visitor's first render PersistGate holds the whole app until redux-persist rehydrates. For any key not yet in localStorage, persistStorage dynamic-imported localforage and read IndexedDB to migrate it, which meant every first-time visitor waited on an extra chunk download and an IndexedDB open before anything rendered. Check indexedDB.databases() first: with no `localforage` database there is nothing to migrate, so mark the key migrated and return. Browsers without databases() keep the old path. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DmUrAQMioSmE4rsEgLPEQL --- packages/web/src/store/persistStorage.test.ts | 18 ++++++++++++++++++ packages/web/src/store/persistStorage.ts | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/packages/web/src/store/persistStorage.test.ts b/packages/web/src/store/persistStorage.test.ts index 7274a6d4196..0db6f06e110 100644 --- a/packages/web/src/store/persistStorage.test.ts +++ b/packages/web/src/store/persistStorage.test.ts @@ -11,6 +11,7 @@ vi.mock('localforage', () => ({ describe('persistStorage', () => { beforeEach(() => { + vi.unstubAllGlobals() window.localStorage.clear() localforageItems.clear() getItemMock.mockClear() @@ -51,4 +52,21 @@ describe('persistStorage', () => { await persistStorage.removeItem('persist:search') expect(await persistStorage.getItem('persist:search')).toBeNull() }) + + it('skips localforage when its database does not exist', async () => { + vi.stubGlobal('indexedDB', { databases: async () => [{ name: 'other' }] }) + localforageItems.set('persist:search', 'old') + expect(await persistStorage.getItem('persist:search')).toBeNull() + expect(await persistStorage.getItem('persist:search')).toBeNull() + expect(getItemMock).not.toHaveBeenCalled() + }) + + it('migrates when the localforage database exists', async () => { + vi.stubGlobal('indexedDB', { + databases: async () => [{ name: 'localforage' }] + }) + localforageItems.set('persist:search', 'old') + expect(await persistStorage.getItem('persist:search')).toBe('old') + expect(getItemMock).toHaveBeenCalledTimes(1) + }) }) diff --git a/packages/web/src/store/persistStorage.ts b/packages/web/src/store/persistStorage.ts index 30293796b1a..e22951fc658 100644 --- a/packages/web/src/store/persistStorage.ts +++ b/packages/web/src/store/persistStorage.ts @@ -13,12 +13,30 @@ const getLocalStorage = () => { } } +// localforage's default IndexedDB database. A browser without it (every new +// visitor) has nothing to migrate, so skip loading localforage at all. +const LOCALFORAGE_DB_NAME = 'localforage' + +const mayHaveLocalforageData = async () => { + try { + if (typeof indexedDB?.databases !== 'function') return true + const databases = await indexedDB.databases() + return databases.some(({ name }) => name === LOCALFORAGE_DB_NAME) + } catch { + return true + } +} + const migrateFromLocalforage = async ( localStorage: globalThis.Storage, key: string ): Promise => { let value: string | null = null try { + if (!(await mayHaveLocalforageData())) { + localStorage.setItem(MIGRATED_PREFIX + key, 'true') + return null + } const { default: localforage } = await import('localforage') const stored = await localforage.getItem(key) if (typeof stored === 'string') { From 18b5a0164727cf2b6690d2c4a86c5a9535d694c1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 23:44:42 +0000 Subject: [PATCH 4/6] perf: stop re-rendering every lineup tile on play, pause and skip Lineups rebuilt every tile on each play/pause/skip because togglePlay depended on the playing state and current queue item, and the lineup hooks returned new trackIds arrays and loadNextPage functions on every render. - Web and mobile TrackLineup (and mobile library TracksTab) read playback state from the store when a tile is pressed instead of subscribing to it. Tiles already select their own active/playing state. - Lineup hooks memoize data and trackIds, and a new useLoadNextPage keeps loadNextPage stable between page loads, so the load-more IntersectionObserver isn't recreated on every render either. - Mobile lineup SectionList uses windowSize 11 instead of the default 21. - Library selectors use createSelector, so the library page no longer re-renders on every redux action; web useLibraryCollections builds its Set in useMemo. - useToggleTrack (explore tiles, chat unfurls) selects one boolean instead of the whole current track; usePlayTrack and the collection page no longer create a selector or callback per render/track change. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DmUrAQMioSmE4rsEgLPEQL --- .../tan-query/lineups/useExclusiveTracks.ts | 18 ++- .../src/api/tan-query/lineups/useFeed.ts | 18 ++- .../api/tan-query/lineups/useForYouFeed.ts | 18 ++- .../api/tan-query/lineups/useLibraryTracks.ts | 18 ++- .../api/tan-query/lineups/usePremiumTracks.ts | 18 ++- .../tan-query/lineups/useProfileReposts.ts | 18 ++- .../api/tan-query/lineups/useProfileTracks.ts | 18 ++- .../src/api/tan-query/lineups/useTrending.ts | 18 ++- .../lineups/useTrendingUnderground.ts | 18 ++- .../tan-query/lineups/useWeeklyRotation.ts | 12 +- .../utils/infiniteQueryLoadNextPage.ts | 19 +++ .../common/src/hooks/chats/useTrackPlayer.ts | 27 ++-- .../src/store/pages/library-page/selectors.ts | 138 +++++++++--------- .../src/components/lineup/TrackLineup.tsx | 29 ++-- .../src/screens/library-screen/TracksTab.tsx | 16 +- .../web/src/components/lineup/TrackLineup.tsx | 25 ++-- .../collection-page/useCollectionPage.ts | 3 +- .../hooks/useLibraryCollections.tsx | 16 +- 18 files changed, 264 insertions(+), 183 deletions(-) diff --git a/packages/common/src/api/tan-query/lineups/useExclusiveTracks.ts b/packages/common/src/api/tan-query/lineups/useExclusiveTracks.ts index 6dba670f4b5..5878971f04f 100644 --- a/packages/common/src/api/tan-query/lineups/useExclusiveTracks.ts +++ b/packages/common/src/api/tan-query/lineups/useExclusiveTracks.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { EntityType, OptionalId } from '@audius/sdk' import { InfiniteData, @@ -13,7 +15,7 @@ import { ID } from '~/models/Identifiers' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, LineupData, QueryOptions } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeTrackData } from '../utils/primeTrackData' const DEFAULT_PAGE_SIZE = 10 @@ -89,10 +91,14 @@ export const useExclusiveTracks = ( enabled: options?.enabled !== false && !!userId }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) + + const loadNextPage = useLoadNextPage(query) return { // Raw data @@ -108,7 +114,7 @@ export const useExclusiveTracks = ( isInitialLoading: query.isInitialLoading, hasNextPage: query.hasNextPage, fetchNextPage: query.fetchNextPage, - loadNextPage: makeLoadNextPage(query), + loadNextPage, // Identity queryKey diff --git a/packages/common/src/api/tan-query/lineups/useFeed.ts b/packages/common/src/api/tan-query/lineups/useFeed.ts index bd764aad852..81fc24e1e0a 100644 --- a/packages/common/src/api/tan-query/lineups/useFeed.ts +++ b/packages/common/src/api/tan-query/lineups/useFeed.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { EntityType, Id, type GetUserFeedFilterEnum } from '@audius/sdk' import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query' @@ -14,7 +16,7 @@ import { Nullable } from '~/utils/typeUtils' import { QUERY_KEYS } from '../queryKeys' import { LineupData, QueryKey, QueryOptions } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeCollectionData } from '../utils/primeCollectionData' import { primeTrackData } from '../utils/primeTrackData' @@ -126,10 +128,14 @@ export const useFeed = ( enabled: options?.enabled !== false && currentUserId != null }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) + + const loadNextPage = useLoadNextPage(query) return { data, @@ -142,7 +148,7 @@ export const useFeed = ( isInitialLoading: query.isInitialLoading, hasNextPage: query.hasNextPage, fetchNextPage: query.fetchNextPage, - loadNextPage: makeLoadNextPage(query), + loadNextPage, refetch: query.refetch, queryKey } diff --git a/packages/common/src/api/tan-query/lineups/useForYouFeed.ts b/packages/common/src/api/tan-query/lineups/useForYouFeed.ts index 382da7af7d7..ba8f4302bdd 100644 --- a/packages/common/src/api/tan-query/lineups/useForYouFeed.ts +++ b/packages/common/src/api/tan-query/lineups/useForYouFeed.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { EntityType, Id } from '@audius/sdk' import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query' @@ -8,7 +10,7 @@ import { ID, UserCollectionMetadata, UserTrackMetadata } from '~/models' import { QUERY_KEYS } from '../queryKeys' import { LineupData, QueryKey, QueryOptions } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeCollectionData } from '../utils/primeCollectionData' import { primeTrackData } from '../utils/primeTrackData' @@ -102,16 +104,20 @@ export const useForYouFeed = ( enabled: options?.enabled !== false && currentUserId != null }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) // When the query is disabled, react-query keeps isPending/isLoading true // (data is undefined). Surface them as false so consumers can render an // empty state instead of an indefinite loading state. const isDisabled = currentUserId == null || options?.enabled === false + const loadNextPage = useLoadNextPage(query) + return { data, trackIds, @@ -123,7 +129,7 @@ export const useForYouFeed = ( isInitialLoading: isDisabled ? false : query.isInitialLoading, hasNextPage: query.hasNextPage, fetchNextPage: query.fetchNextPage, - loadNextPage: makeLoadNextPage(query), + loadNextPage, refetch: query.refetch, queryKey } diff --git a/packages/common/src/api/tan-query/lineups/useLibraryTracks.ts b/packages/common/src/api/tan-query/lineups/useLibraryTracks.ts index 4d488d24952..5853865c99a 100644 --- a/packages/common/src/api/tan-query/lineups/useLibraryTracks.ts +++ b/packages/common/src/api/tan-query/lineups/useLibraryTracks.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { Id, EntityType, @@ -19,7 +21,7 @@ import { userTrackMetadataFromSDK } from '../../../adapters/track' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, QueryOptions, LineupData } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeTrackData } from '../utils/primeTrackData' const DEFAULT_PAGE_SIZE = 5 @@ -121,10 +123,14 @@ export const useLibraryTracks = ( enabled: config?.enabled !== false && !!currentUserId }) - const data = queryData.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => queryData.data ?? [], [queryData.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) + + const loadNextPage = useLoadNextPage(queryData) return { data, @@ -138,7 +144,7 @@ export const useLibraryTracks = ( isInitialLoading: queryData.isInitialLoading, hasNextPage: queryData.hasNextPage, fetchNextPage: queryData.fetchNextPage, - loadNextPage: makeLoadNextPage(queryData), + loadNextPage, queryKey, pageSize } diff --git a/packages/common/src/api/tan-query/lineups/usePremiumTracks.ts b/packages/common/src/api/tan-query/lineups/usePremiumTracks.ts index 18db36bea58..be072cee47e 100644 --- a/packages/common/src/api/tan-query/lineups/usePremiumTracks.ts +++ b/packages/common/src/api/tan-query/lineups/usePremiumTracks.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { OptionalId, EntityType } from '@audius/sdk' import { InfiniteData, @@ -13,7 +15,7 @@ import { ID } from '~/models/Identifiers' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, LineupData, QueryOptions } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeTrackData } from '../utils/primeTrackData' const DEFAULT_PAGE_SIZE = 10 @@ -68,10 +70,14 @@ export const usePremiumTracks = ( enabled: options?.enabled !== false }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) + + const loadNextPage = useLoadNextPage(query) return { data, @@ -84,7 +90,7 @@ export const usePremiumTracks = ( isInitialLoading: query.isInitialLoading, hasNextPage: query.hasNextPage, fetchNextPage: query.fetchNextPage, - loadNextPage: makeLoadNextPage(query), + loadNextPage, queryKey } } diff --git a/packages/common/src/api/tan-query/lineups/useProfileReposts.ts b/packages/common/src/api/tan-query/lineups/useProfileReposts.ts index b4c0a0c1f85..08640ebfca3 100644 --- a/packages/common/src/api/tan-query/lineups/useProfileReposts.ts +++ b/packages/common/src/api/tan-query/lineups/useProfileReposts.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { EntityType, OptionalId } from '@audius/sdk' import { InfiniteData, @@ -12,7 +14,7 @@ import { UserTrackMetadata, UserCollectionMetadata, ID } from '~/models' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, LineupData, QueryOptions } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeCollectionData } from '../utils/primeCollectionData' import { primeTrackData } from '../utils/primeTrackData' @@ -102,10 +104,14 @@ export const useProfileReposts = ( enabled: options?.enabled !== false && !!handle }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) + + const loadNextPage = useLoadNextPage(query) return { data, @@ -118,7 +124,7 @@ export const useProfileReposts = ( isInitialLoading: query.isInitialLoading, hasNextPage: query.hasNextPage, fetchNextPage: query.fetchNextPage, - loadNextPage: makeLoadNextPage(query), + loadNextPage, refetch: query.refetch, queryKey } diff --git a/packages/common/src/api/tan-query/lineups/useProfileTracks.ts b/packages/common/src/api/tan-query/lineups/useProfileTracks.ts index 78f9c9017de..91f661d3be2 100644 --- a/packages/common/src/api/tan-query/lineups/useProfileTracks.ts +++ b/packages/common/src/api/tan-query/lineups/useProfileTracks.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { EntityType, OptionalId } from '@audius/sdk' import { InfiniteData, @@ -13,7 +15,7 @@ import { TracksSortMode } from '~/store/pages/profile/types' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, LineupData, QueryOptions } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeTrackData } from '../utils/primeTrackData' const DEFAULT_PAGE_SIZE = 10 @@ -96,10 +98,14 @@ export const useProfileTracks = ( enabled: options?.enabled !== false && !!handle }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) + + const loadNextPage = useLoadNextPage(query) return { data, @@ -112,7 +118,7 @@ export const useProfileTracks = ( isInitialLoading: query.isInitialLoading, hasNextPage: query.hasNextPage, fetchNextPage: query.fetchNextPage, - loadNextPage: makeLoadNextPage(query), + loadNextPage, refetch: query.refetch, queryKey } diff --git a/packages/common/src/api/tan-query/lineups/useTrending.ts b/packages/common/src/api/tan-query/lineups/useTrending.ts index 9ba7340d0a0..b76ca82fa7e 100644 --- a/packages/common/src/api/tan-query/lineups/useTrending.ts +++ b/packages/common/src/api/tan-query/lineups/useTrending.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { OptionalId, EntityType } from '@audius/sdk' import { InfiniteData, @@ -16,7 +18,7 @@ import { Genre } from '~/utils/genres' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, LineupData, QueryOptions } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeTrackData } from '../utils/primeTrackData' export const TRENDING_INITIAL_PAGE_SIZE = 10 @@ -111,10 +113,14 @@ export const useTrending = ( enabled: options?.enabled !== false && !!timeRange }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) + + const loadNextPage = useLoadNextPage(query) return { // Raw data @@ -130,7 +136,7 @@ export const useTrending = ( isInitialLoading: query.isInitialLoading, hasNextPage: query.hasNextPage, fetchNextPage: query.fetchNextPage, - loadNextPage: makeLoadNextPage(query), + loadNextPage, // Identity queryKey diff --git a/packages/common/src/api/tan-query/lineups/useTrendingUnderground.ts b/packages/common/src/api/tan-query/lineups/useTrendingUnderground.ts index e57a22b2039..527534254ab 100644 --- a/packages/common/src/api/tan-query/lineups/useTrendingUnderground.ts +++ b/packages/common/src/api/tan-query/lineups/useTrendingUnderground.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { OptionalId, EntityType } from '@audius/sdk' import { InfiniteData, @@ -12,7 +14,7 @@ import { ID } from '~/models/Identifiers' import { QUERY_KEYS } from '../queryKeys' import { QueryKey, QueryOptions, LineupData } from '../types' import { useCurrentUserId } from '../users/account/useCurrentUserId' -import { makeLoadNextPage } from '../utils/infiniteQueryLoadNextPage' +import { useLoadNextPage } from '../utils/infiniteQueryLoadNextPage' import { primeTrackData } from '../utils/primeTrackData' const DEFAULT_PAGE_SIZE = 10 @@ -64,10 +66,14 @@ export const useTrendingUnderground = ( enabled: options?.enabled !== false }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) + + const loadNextPage = useLoadNextPage(query) return { data, @@ -80,7 +86,7 @@ export const useTrendingUnderground = ( isInitialLoading: query.isInitialLoading, hasNextPage: query.hasNextPage, fetchNextPage: query.fetchNextPage, - loadNextPage: makeLoadNextPage(query), + loadNextPage, queryKey } } diff --git a/packages/common/src/api/tan-query/lineups/useWeeklyRotation.ts b/packages/common/src/api/tan-query/lineups/useWeeklyRotation.ts index 604c86e5901..9bbe5aff4ac 100644 --- a/packages/common/src/api/tan-query/lineups/useWeeklyRotation.ts +++ b/packages/common/src/api/tan-query/lineups/useWeeklyRotation.ts @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { Id, OptionalId, EntityType } from '@audius/sdk' import { useQuery, useQueryClient } from '@tanstack/react-query' @@ -71,10 +73,12 @@ export const useWeeklyRotation = ( enabled: options?.enabled !== false && !!userId }) - const data = query.data ?? [] - const trackIds = data - .filter((d) => d.type === EntityType.TRACK) - .map((d) => d.id as ID) + const data = useMemo(() => query.data ?? [], [query.data]) + const trackIds = useMemo( + () => + data.filter((d) => d.type === EntityType.TRACK).map((d) => d.id as ID), + [data] + ) return { data, diff --git a/packages/common/src/api/tan-query/utils/infiniteQueryLoadNextPage.ts b/packages/common/src/api/tan-query/utils/infiniteQueryLoadNextPage.ts index 5a4540330aa..8a0180caeec 100644 --- a/packages/common/src/api/tan-query/utils/infiniteQueryLoadNextPage.ts +++ b/packages/common/src/api/tan-query/utils/infiniteQueryLoadNextPage.ts @@ -1,3 +1,5 @@ +import { useCallback } from 'react' + import { UseInfiniteQueryResult } from '@tanstack/react-query' /** @@ -24,3 +26,20 @@ export const makeLoadNextPage = if (queryData.isFetching || !queryData.hasNextPage) return undefined return queryData.fetchNextPage() } + +/** + * `makeLoadNextPage` with a stable identity between page loads, so lineups + * and lists that take it as a prop don't re-render on every parent render. + */ +export const useLoadNextPage = ({ + isFetching, + hasNextPage, + fetchNextPage +}: Pick< + UseInfiniteQueryResult, + 'isFetching' | 'hasNextPage' | 'fetchNextPage' +>) => + useCallback( + () => makeLoadNextPage({ isFetching, hasNextPage, fetchNextPage })(), + [isFetching, hasNextPage, fetchNextPage] + ) diff --git a/packages/common/src/hooks/chats/useTrackPlayer.ts b/packages/common/src/hooks/chats/useTrackPlayer.ts index 0d33d43eb0f..789c5224a2c 100644 --- a/packages/common/src/hooks/chats/useTrackPlayer.ts +++ b/packages/common/src/hooks/chats/useTrackPlayer.ts @@ -1,8 +1,9 @@ import { useCallback } from 'react' -import { useDispatch, useSelector } from 'react-redux' +import { useDispatch, useSelector, useStore } from 'react-redux' import { ID, Name } from '~/models' +import { CommonState } from '~/store/commonStore' import { playbackActions, playbackSelectors, @@ -17,6 +18,7 @@ import { TrackPlayback } from './types' const { playFrom, pause } = playbackActions const { getPlaying, getTrackId, makeGetCurrent } = playbackSelectors +const getCurrent = makeGetCurrent() type RecordAnalytics = ({ name, id }: { name: TrackPlayback; id: ID }) => void @@ -43,11 +45,12 @@ const queueablesToPlaybackTracks = (entries: Queueable[]) => */ export const usePlayTrack = (recordAnalytics?: RecordAnalytics) => { const dispatch = useDispatch() - const playingTrackId = useSelector(getTrackId) + // Read at call time so the callback doesn't change on every track change + const store = useStore() const playTrack = useCallback( ({ id, entries }: { id: ID; entries: Queueable[] }) => { - if (playingTrackId !== id) { + if (getTrackId(store.getState()) !== id) { const tracks = queueablesToPlaybackTracks(entries) const startIndex = Math.max( 0, @@ -61,7 +64,7 @@ export const usePlayTrack = (recordAnalytics?: RecordAnalytics) => { recordAnalytics({ name: Name.PLAYBACK_PLAY, id }) } }, - [dispatch, recordAnalytics, playingTrackId] + [dispatch, recordAnalytics, store] ) return playTrack @@ -92,15 +95,15 @@ export const useToggleTrack = ({ recordAnalytics, entries: entriesProp }: UseToggleTrack) => { - const currentQueueItem = useSelector(makeGetCurrent()) - const currentTrack = useCurrentTrack() + const isCurrentQueueItem = useSelector((state: CommonState) => { + const currentQueueItem = getCurrent(state) + return currentQueueItem.trackId === id && currentQueueItem.source === source + }) + const hasCurrentTrack = !!useCurrentTrack({ + select: (track) => track.track_id + }) const playing = useSelector(getPlaying) - const isTrackPlaying = !!( - playing && - currentTrack && - currentQueueItem.trackId === id && - currentQueueItem.source === source - ) + const isTrackPlaying = playing && hasCurrentTrack && isCurrentQueueItem const playTrack = usePlayTrack(recordAnalytics) const pauseTrack = usePauseTrack(recordAnalytics) diff --git a/packages/common/src/store/pages/library-page/selectors.ts b/packages/common/src/store/pages/library-page/selectors.ts index 861f93d5aa1..ac536b00518 100644 --- a/packages/common/src/store/pages/library-page/selectors.ts +++ b/packages/common/src/store/pages/library-page/selectors.ts @@ -1,4 +1,5 @@ import { uniq } from 'lodash' +import { createSelector } from 'reselect' import { CommonState } from '~/store/commonStore' @@ -61,102 +62,93 @@ export const getLocalRemovedPlaylistReposts = (state: CommonState) => state.pages.libraryPage.local.playlist.favorites.removed /** Get the tracks in currently selected category that have been added to the library in current session */ -export const getSelectedCategoryLocalTrackAdds = (state: CommonState) => { - const selectedCategory = getCategory(state, { - currentTab: LibraryPageTabs.TRACKS - }) - const localFavorites = getLocalTrackFavorites(state) - const localPurchases = getLocalTrackPurchases(state) - const localReposts = getLocalTrackReposts(state) - let localLibraryAdditions - if (selectedCategory === LibraryCategory.Favorite) { - localLibraryAdditions = localFavorites - } else if (selectedCategory === LibraryCategory.Purchase) { - localLibraryAdditions = localPurchases - } else if (selectedCategory === LibraryCategory.Repost) { - localLibraryAdditions = localReposts - } else { +export const getSelectedCategoryLocalTrackAdds = createSelector( + [ + getTracksCategory, + getLocalTrackFavorites, + getLocalTrackPurchases, + getLocalTrackReposts + ], + (selectedCategory, localFavorites, localPurchases, localReposts) => { + if (selectedCategory === LibraryCategory.Favorite) { + return localFavorites + } else if (selectedCategory === LibraryCategory.Purchase) { + return localPurchases + } else if (selectedCategory === LibraryCategory.Repost) { + return localReposts + } // Category = ALL - localLibraryAdditions = { + return { ...localReposts, ...localFavorites, ...localPurchases } } +) - return localLibraryAdditions -} +const EMPTY_IDS: ID[] = [] +const getNone = () => EMPTY_IDS -const getSelectedCategoryLocalCollectionUpdates = ( - state: CommonState, - props: { collectionType: 'album' | 'playlist'; updateType: 'add' | 'remove' } -) => { - const { collectionType, updateType } = props - const currentTab = - collectionType === 'album' - ? LibraryPageTabs.ALBUMS - : LibraryPageTabs.PLAYLISTS - const selectedCategory = getCategory(state, { currentTab }) - let localFavorites: ID[], localPurchases: ID[], localReposts: ID[] +const makeGetSelectedCategoryLocalCollectionUpdates = ({ + collectionType, + updateType +}: { + collectionType: 'album' | 'playlist' + updateType: 'add' | 'remove' +}) => { + const isAlbum = collectionType === 'album' + let getFavorites: (state: CommonState) => ID[] + let getPurchases: (state: CommonState) => ID[] + let getReposts: (state: CommonState) => ID[] if (updateType === 'add') { - localFavorites = - collectionType === 'album' - ? getLocalAlbumFavorites(state) - : getLocalPlaylistFavorites(state) - localPurchases = - collectionType === 'album' ? getLocalAlbumPurchases(state) : [] // Can't buy playlists - localReposts = - collectionType === 'album' - ? getLocalAlbumReposts(state) - : getLocalPlaylistReposts(state) + getFavorites = isAlbum ? getLocalAlbumFavorites : getLocalPlaylistFavorites + getPurchases = isAlbum ? getLocalAlbumPurchases : getNone // Can't buy playlists + getReposts = isAlbum ? getLocalAlbumReposts : getLocalPlaylistReposts } else { - localFavorites = - collectionType === 'album' - ? getLocalRemovedAlbumFavorites(state) - : getLocalRemovedPlaylistFavorites(state) - localPurchases = [] // Can't remove purchases - localReposts = - collectionType === 'album' - ? getLocalRemovedAlbumReposts(state) - : getLocalRemovedPlaylistReposts(state) + getFavorites = isAlbum + ? getLocalRemovedAlbumFavorites + : getLocalRemovedPlaylistFavorites + getPurchases = getNone // Can't remove purchases + getReposts = isAlbum + ? getLocalRemovedAlbumReposts + : getLocalRemovedPlaylistReposts } - switch (selectedCategory) { - case LibraryCategory.Favorite: - return localFavorites - case LibraryCategory.Purchase: - return localPurchases - case LibraryCategory.Repost: - return localReposts - default: - // Category = ALL - return uniq([...localReposts, ...localFavorites, ...localPurchases]) - } + return createSelector( + [getCollectionsCategory, getFavorites, getPurchases, getReposts], + (selectedCategory, localFavorites, localPurchases, localReposts) => { + switch (selectedCategory) { + case LibraryCategory.Favorite: + return localFavorites + case LibraryCategory.Purchase: + return localPurchases + case LibraryCategory.Repost: + return localReposts + default: + // Category = ALL + return uniq([...localReposts, ...localFavorites, ...localPurchases]) + } + } + ) } -export const getSelectedCategoryLocalAlbumAdds = (state: CommonState) => { - return getSelectedCategoryLocalCollectionUpdates(state, { +export const getSelectedCategoryLocalAlbumAdds = + makeGetSelectedCategoryLocalCollectionUpdates({ collectionType: 'album', updateType: 'add' }) -} -export const getSelectedCategoryLocalAlbumRemovals = (state: CommonState) => { - return getSelectedCategoryLocalCollectionUpdates(state, { +export const getSelectedCategoryLocalAlbumRemovals = + makeGetSelectedCategoryLocalCollectionUpdates({ collectionType: 'album', updateType: 'remove' }) -} -export const getSelectedCategoryLocalPlaylistRemovals = ( - state: CommonState -) => { - return getSelectedCategoryLocalCollectionUpdates(state, { +export const getSelectedCategoryLocalPlaylistRemovals = + makeGetSelectedCategoryLocalCollectionUpdates({ collectionType: 'playlist', updateType: 'remove' }) -} -export const getSelectedCategoryLocalPlaylistAdds = (state: CommonState) => { - return getSelectedCategoryLocalCollectionUpdates(state, { +export const getSelectedCategoryLocalPlaylistAdds = + makeGetSelectedCategoryLocalCollectionUpdates({ collectionType: 'playlist', updateType: 'add' }) -} diff --git a/packages/mobile/src/components/lineup/TrackLineup.tsx b/packages/mobile/src/components/lineup/TrackLineup.tsx index f95ded43ac5..bebabeee22b 100644 --- a/packages/mobile/src/components/lineup/TrackLineup.tsx +++ b/packages/mobile/src/components/lineup/TrackLineup.tsx @@ -20,7 +20,11 @@ import { type UID } from '@audius/common/models' import { playbackActions, playbackSelectors } from '@audius/common/store' -import type { PlaybackQuerySource, PlaybackTrack } from '@audius/common/store' +import type { + CommonState, + PlaybackQuerySource, + PlaybackTrack +} from '@audius/common/store' import { makeStableUid } from '@audius/common/utils' import { EntityType } from '@audius/sdk' import { range } from 'lodash' @@ -30,7 +34,7 @@ import type { ViewStyle } from 'react-native' import { StyleSheet, View } from 'react-native' -import { useDispatch, useSelector } from 'react-redux' +import { useDispatch, useStore } from 'react-redux' import { SectionList } from 'app/components/core' import { useBottomChinHeight } from 'app/components/core/BottomChin' @@ -44,7 +48,6 @@ import { make, track } from 'app/services/analytics' const { makeGetCurrent } = playbackSelectors const { getPlaying } = playbackSelectors -const { getCurrentTrackId: getPlaybackCurrentTrackId } = playbackSelectors // Threshold for `onEndReachedThreshold` (fraction of viewport length). // 1.0 means "fetch when one full viewport of content remains below" so the @@ -183,12 +186,11 @@ export const TrackLineup = ({ const dispatch = useDispatch() const ref = useRef(null) + // Playback state is read when a tile is pressed rather than subscribed to, + // so play/pause/skip don't re-render every tile. Tiles select their own + // active/playing state. + const store = useStore() const getCurrentQueueItem = useMemo(() => makeGetCurrent(), []) - const currentLegacy = useSelector(getCurrentQueueItem) - const isPlaying = useSelector(getPlaying) - // playback slice is the source of truth when present; subscribed here so - // tiles re-render when the current track changes. - useSelector(getPlaybackCurrentTrackId) const uidFor = useCallback( (id: ID) => makeStableUid(Kind.TRACKS, id, source), @@ -242,6 +244,9 @@ export const TrackLineup = ({ source?: PlaybackSource collectionId?: ID }) => { + const state = store.getState() + const currentLegacy = getCurrentQueueItem(state) + const isPlaying = getPlaying(state) const currentTrackId = currentLegacy?.trackId ?? null const currentSource = currentLegacy?.source ?? null const isSameTile = currentTrackId === id && currentSource === source @@ -290,10 +295,9 @@ export const TrackLineup = ({ dispatch, tracksForPlayback, querySource, - currentLegacy?.trackId, - currentLegacy?.source, + store, + getCurrentQueueItem, source, - isPlaying, playbackSource ] ) @@ -448,6 +452,9 @@ export const TrackLineup = ({ ListEmptyComponent={LineupEmptyComponent} onEndReached={handleLoadMore} onEndReachedThreshold={LOAD_MORE_THRESHOLD} + // Keep ~5 screens of tiles mounted either side instead of the + // default 10, since feed/trending/profile lineups all stay mounted + windowSize={11} sections={isEmpty ? [] : sections} stickySectionHeadersEnabled={false} keyExtractor={(item: any, index: number) => { diff --git a/packages/mobile/src/screens/library-screen/TracksTab.tsx b/packages/mobile/src/screens/library-screen/TracksTab.tsx index 39cc8cef66f..ce65fd5d27e 100644 --- a/packages/mobile/src/screens/library-screen/TracksTab.tsx +++ b/packages/mobile/src/screens/library-screen/TracksTab.tsx @@ -11,11 +11,11 @@ import { playbackSelectors, reachabilitySelectors } from '@audius/common/store' -import type { PlaybackTrack } from '@audius/common/store' +import type { CommonState, PlaybackTrack } from '@audius/common/store' import { makeStableUid, type Nullable } from '@audius/common/utils' import { debounce } from 'lodash' import { View } from 'react-native' -import { useDispatch, useSelector } from 'react-redux' +import { useDispatch, useSelector, useStore } from 'react-redux' import { BottomChin } from 'app/components/core/BottomChin' import { EmptyTileCTA } from 'app/components/empty-tile-cta' @@ -211,10 +211,9 @@ export const TracksTab = () => { fetchNextPage ]) - const currentPlaybackTrackId = useSelector( - playbackSelectors.getCurrentTrackId - ) - const isPlaying = useSelector(playbackSelectors.getPlaying) + // Read playback state at press time so play/pause/skip don't re-render the + // whole list + const store = useStore() // Matches legacy `saveTracksLineupActions.prefix` so AudioPlayer's // source-based offline-download check keeps working. @@ -230,6 +229,9 @@ export const TracksTab = () => { const togglePlay = useCallback( (_uid: UID, id: ID) => { + const state = store.getState() + const currentPlaybackTrackId = playbackSelectors.getCurrentTrackId(state) + const isPlaying = playbackSelectors.getPlaying(state) if (currentPlaybackTrackId === id && isPlaying) { dispatch(playbackActions.togglePlay()) return @@ -248,7 +250,7 @@ export const TracksTab = () => { }) ) }, - [dispatch, currentPlaybackTrackId, isPlaying, playbackQueue] + [dispatch, store, playbackQueue] ) const commitFilterValue = useMemo( diff --git a/packages/web/src/components/lineup/TrackLineup.tsx b/packages/web/src/components/lineup/TrackLineup.tsx index 9f44b9b15ce..8ff51976635 100644 --- a/packages/web/src/components/lineup/TrackLineup.tsx +++ b/packages/web/src/components/lineup/TrackLineup.tsx @@ -5,6 +5,7 @@ import { usePlayTrack, usePauseTrack } from '@audius/common/hooks' import { FeedTab, ID, PlaybackSource, Name } from '@audius/common/models' import { playbackActions, playbackSelectors } from '@audius/common/store' import type { + CommonState, PlaybackTrack, PlaybackQuerySource, QueueSource @@ -12,7 +13,7 @@ import type { import { Divider, Flex } from '@audius/harmony' import { EntityType } from '@audius/sdk' import cn from 'classnames' -import { useDispatch, useSelector } from 'react-redux' +import { useDispatch, useStore } from 'react-redux' import { make } from 'common/store/analytics/actions' import { CollectionTile as DesktopCollectionTile } from 'components/track/desktop/CollectionTile' @@ -42,7 +43,6 @@ const LOAD_MORE_VIEWPORTS = 2 const { getPlaying: getPlayerPlaying } = playbackSelectors const { makeGetCurrent } = playbackSelectors -const { getCurrentTrackId: getPlaybackCurrentTrackId } = playbackSelectors export type TrackLineupProps = { // Ordered list of track IDs to render. Tiles read full track data from the @@ -168,16 +168,11 @@ export const TrackLineup = ({ ? MobileCollectionTile : DesktopCollectionTile - // For tile highlight: prefer new playback slice's current track when - // present, else fall back to legacy current (non-trending flows). Also - // reads isPlaying/isBuffering from legacy state (the audio service still - // drives those via the player slice). + // Playback state is read when a tile is clicked rather than subscribed to, + // so play/pause/skip don't rebuild every tile. Tiles select their own + // active/playing state. + const store = useStore() const getCurrentQueueItem = useMemo(() => makeGetCurrent(), []) - const currentLegacy = useSelector(getCurrentQueueItem) - // Subscribe so tiles re-render when the playback slice's current track - // changes (even if legacy queue hasn't caught up yet). - useSelector(getPlaybackCurrentTrackId) - const isPlaying = useSelector(getPlayerPlaying) // Build a single ordered list of mixed track/collection entries. When the // caller passes `lineupItems` (mixed feed) we use it verbatim; otherwise we @@ -206,6 +201,9 @@ export const TrackLineup = ({ const togglePlay = useCallback( (trackId: ID, clickSource?: PlaybackSource) => { const analytics = clickSource || playbackSource + const state = store.getState() + const currentLegacy = getCurrentQueueItem(state) + const isPlaying = getPlayerPlaying(state) const currentTrackId = currentLegacy?.trackId ?? null const currentSource = currentLegacy?.source ?? null const isSameTile = currentTrackId === trackId && currentSource === source @@ -251,10 +249,9 @@ export const TrackLineup = ({ tracksForPlayback, playbackTrackIds, querySource, - currentLegacy?.trackId, - currentLegacy?.source, + store, + getCurrentQueueItem, source, - isPlaying, playbackSource, feedType ] diff --git a/packages/web/src/pages/collection-page/useCollectionPage.ts b/packages/web/src/pages/collection-page/useCollectionPage.ts index 9c36829f309..b4331e1ab1d 100644 --- a/packages/web/src/pages/collection-page/useCollectionPage.ts +++ b/packages/web/src/pages/collection-page/useCollectionPage.ts @@ -200,7 +200,8 @@ export const useCollectionPage = ( const playerBehavior = useSelector(getPlayerBehavior) const previewing = playerBehavior === PlayerBehavior.PREVIEW_OR_FULL const status = tracksStatus - const currentQueueItem = useSelector(makeGetCurrent()) + const getCurrentQueueItem = useMemo(() => makeGetCurrent(), []) + const currentQueueItem = useSelector(getCurrentQueueItem) const order = useMemo(() => { const map: Record = {} sortedEntries.forEach((entry, idx) => { diff --git a/packages/web/src/pages/library-page/hooks/useLibraryCollections.tsx b/packages/web/src/pages/library-page/hooks/useLibraryCollections.tsx index 46041553495..f53fb0eb646 100644 --- a/packages/web/src/pages/library-page/hooks/useLibraryCollections.tsx +++ b/packages/web/src/pages/library-page/hooks/useLibraryCollections.tsx @@ -33,13 +33,15 @@ export const useLibraryCollections = ({ : getSelectedCategoryLocalPlaylistAdds(state) }) - const locallyRemovedCollectionIds = useSelector((state: CommonState) => { - const ids = - collectionType === 'album' - ? getSelectedCategoryLocalAlbumRemovals(state) - : getSelectedCategoryLocalPlaylistRemovals(state) - return new Set(ids) - }) + const locallyRemovedIds = useSelector((state: CommonState) => + collectionType === 'album' + ? getSelectedCategoryLocalAlbumRemovals(state) + : getSelectedCategoryLocalPlaylistRemovals(state) + ) + const locallyRemovedCollectionIds = useMemo( + () => new Set(locallyRemovedIds), + [locallyRemovedIds] + ) const { data: fetchedCollectionIds, From 2cb989300fd199d0fa9c1d92e10eb7039c3e0df8 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 23:46:04 +0000 Subject: [PATCH 5/6] perf: cut render-time and network work in shared data hooks - useCurrentAccount: placeholderData re-read and JSON-parsed the cached account from localStorage in every observer on every render while the account loaded (and for the whole session when signed out). The parsed result is now reused until the stored strings change. - useTracks/useUsers/useCollections memoize their queries array, so tanstack doesn't re-hash and re-sync N observers on every render. - Track page lineup: the remix parent/remixes, more-by-artist and trending requests run in parallel instead of one after another (3 round trips to 1). Section order and dedupe are unchanged. - Track rank: trending IDs get a 30 minute staleTime instead of 5. - Profile page: an artist's reposts are only fetched once the Reposts tab opens. Until the profile is known, reposts still load in parallel. - Mobile: offline-downloads persist is throttled to 1s, and ChatScreen no longer renders every cached message on mount. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DmUrAQMioSmE4rsEgLPEQL --- .../tan-query/collection/useCollections.ts | 61 +++++++++++----- .../tan-query/lineups/useTrackPageLineup.ts | 69 +++++++++++-------- .../src/api/tan-query/tracks/useTrackRank.ts | 7 +- .../src/api/tan-query/tracks/useTracks.ts | 61 +++++++++++----- .../users/account/useCurrentAccount.ts | 46 ++++++++++++- .../src/api/tan-query/users/useUsers.ts | 57 ++++++++++----- .../src/screens/chat-screen/ChatScreen.tsx | 9 ++- .../src/store/offline-downloads/slice.ts | 9 ++- .../components/desktop/ProfilePage.tsx | 6 +- .../components/mobile/ProfilePage.tsx | 6 +- 10 files changed, 245 insertions(+), 86 deletions(-) diff --git a/packages/common/src/api/tan-query/collection/useCollections.ts b/packages/common/src/api/tan-query/collection/useCollections.ts index c7ca598ce28..6df9ae28557 100644 --- a/packages/common/src/api/tan-query/collection/useCollections.ts +++ b/packages/common/src/api/tan-query/collection/useCollections.ts @@ -25,31 +25,58 @@ export const useCollections = ( const queryClient = useQueryClient() const dispatch = useDispatch() + // Callers often pass a new array each render, so key on the ids themselves + // to keep the queries below stable. + const collectionIdsKey = collectionIds?.join(',') const uniqueCollectionIds = useMemo( () => collectionIds?.filter( (id, index, self) => self.indexOf(id) === index && !!id ), - [collectionIds] + // eslint-disable-next-line react-hooks/exhaustive-deps + [collectionIdsKey] + ) + + // Rebuilding these every render makes tanstack re-hash every key and + // re-sync every observer, so only rebuild when an input changes. + const queries = useMemo( + () => + uniqueCollectionIds?.map((collectionId) => ({ + queryKey: getCollectionQueryKey(collectionId), + queryFn: async () => { + const sdk = await audiusSdk() + return getCollectionQueryFn( + collectionId, + currentUserId, + queryClient, + sdk, + dispatch + ) + }, + ...options, + ...entityCacheOptions, + enabled: + options?.enabled !== false && !!collectionId && collectionId > 0 + })), + // eslint-disable-next-line react-hooks/exhaustive-deps + [ + uniqueCollectionIds, + currentUserId, + audiusSdk, + queryClient, + dispatch, + options?.enabled, + options?.staleTime, + options?.placeholderData, + options?.refetchOnMount, + options?.throwOnError, + options?.refetchInterval, + options?.refetchOnWindowFocus + ] ) const queriesResults = useQueries({ - queries: uniqueCollectionIds?.map((collectionId) => ({ - queryKey: getCollectionQueryKey(collectionId), - queryFn: async () => { - const sdk = await audiusSdk() - return getCollectionQueryFn( - collectionId, - currentUserId, - queryClient, - sdk, - dispatch - ) - }, - ...options, - ...entityCacheOptions, - enabled: options?.enabled !== false && !!collectionId && collectionId > 0 - })), + queries, combine: combineQueryResults }) diff --git a/packages/common/src/api/tan-query/lineups/useTrackPageLineup.ts b/packages/common/src/api/tan-query/lineups/useTrackPageLineup.ts index 5cd89c0f5b2..31885f4a053 100644 --- a/packages/common/src/api/tan-query/lineups/useTrackPageLineup.ts +++ b/packages/common/src/api/tan-query/lineups/useTrackPageLineup.ts @@ -98,11 +98,44 @@ export const useTrackPageLineup = ( const heroTrackRemixParentTrackId = heroTrack.remix_of?.tracks?.[0]?.parent_track_id + // Fire every request at once instead of one after another. Recommended + // tracks are only shown when there are no remixes, but requesting them + // up front saves a round trip in the common case. + const remixParentPromise = heroTrackRemixParentTrackId + ? sdk.tracks.getTrack({ + trackId: Id.parse(heroTrackRemixParentTrackId), + userId: OptionalId.parse(currentUserId) + }) + : undefined + const remixesPromise = heroTrackRemixParentTrackId + ? undefined + : sdk.tracks.getTrackRemixes({ + trackId: Id.parse(trackId), + userId: OptionalId.parse(currentUserId), + limit: pageSize, + offset: 0 + }) + const moreByPromise = sdk.users.getTracksByUserHandle({ + handle: ownerHandle, + userId: OptionalId.parse(currentUserId), + sort: 'plays', + limit: pageSize, + offset: 0 + }) + const trendingPromise = sdk.tracks.getTrendingTracks({ + genre: heroTrack.genre, + limit: pageSize + }) + // Only awaited (and so only fails the query) when it's needed + trendingPromise.catch(() => {}) + + const [remixParentTrack, remixesData, { data = [] }] = await Promise.all([ + remixParentPromise, + remixesPromise, + moreByPromise + ]) + if (heroTrackRemixParentTrackId) { - const remixParentTrack = await sdk.tracks.getTrack({ - trackId: Id.parse(heroTrackRemixParentTrackId), - userId: OptionalId.parse(currentUserId) - }) const processedParentTrack = remixParentTrack?.data ? userTrackMetadataFromSDK(remixParentTrack.data) : undefined @@ -112,14 +145,7 @@ export const useTrackPageLineup = ( indices.remixParentSection.pageSize = 1 } } else { - // If hero track is remixable (not a remix), get its remixes - const remixesData = await sdk.tracks.getTrackRemixes({ - trackId: Id.parse(trackId), - userId: OptionalId.parse(currentUserId), - limit: pageSize, - offset: 0 - }) - + // If hero track is remixable (not a remix), show its remixes if (remixesData?.data?.tracks) { const processedRemixes = transformAndCleanList( remixesData.data.tracks, @@ -133,15 +159,7 @@ export const useTrackPageLineup = ( } } - // Get more tracks by the artist - const { data = [] } = await sdk.users.getTracksByUserHandle({ - handle: ownerHandle, - userId: OptionalId.parse(currentUserId), - sort: 'plays', - limit: pageSize, - offset: 0 - }) - + // More tracks by the artist const processedTracks = transformAndCleanList( data, userTrackMetadataFromSDK @@ -162,10 +180,7 @@ export const useTrackPageLineup = ( // If there are no remixes, get recommended tracks based on genre if (indices.remixesSection.index === undefined) { - const { data: trendingData } = await sdk.tracks.getTrendingTracks({ - genre: heroTrack.genre, - limit: pageSize - }) + const { data: trendingData } = await trendingPromise if (trendingData) { const processedTracks = transformAndCleanList( @@ -241,8 +256,6 @@ export const useTrackPageLineup = ( * live observer so the warmed data is shared with `TrackScreenLineup`'s own * query. */ -export const usePrefetchTrackPageLineup = ( - trackId: ID | null | undefined -) => { +export const usePrefetchTrackPageLineup = (trackId: ID | null | undefined) => { useTrackPageLineup({ trackId }) } diff --git a/packages/common/src/api/tan-query/tracks/useTrackRank.ts b/packages/common/src/api/tan-query/tracks/useTrackRank.ts index a8512ea082e..0a93ca859a5 100644 --- a/packages/common/src/api/tan-query/tracks/useTrackRank.ts +++ b/packages/common/src/api/tan-query/tracks/useTrackRank.ts @@ -31,6 +31,10 @@ export const getTrendingIdsQueryKey = (args?: GetTrendingIdsArgs) => { ] as unknown as QueryKey } +// Trending lists change slowly, and every track page reads them for its rank +// badge, so don't refetch on each track page visit. +const TRENDING_IDS_STALE_TIME_MS = 30 * 60 * 1000 + /** * Hook that returns trending track IDs for all time periods */ @@ -42,7 +46,8 @@ export const useGetTrendingIds = (args?: GetTrendingIdsArgs) => { const sdk = await audiusSdk() const { data } = await sdk.tracks.getTrendingTrackIDs(args) return data ? trendingIdsFromSDK(data) : null - } + }, + staleTime: TRENDING_IDS_STALE_TIME_MS }) } diff --git a/packages/common/src/api/tan-query/tracks/useTracks.ts b/packages/common/src/api/tan-query/tracks/useTracks.ts index 36aa2d1b3b5..9226c79e5e9 100644 --- a/packages/common/src/api/tan-query/tracks/useTracks.ts +++ b/packages/common/src/api/tan-query/tracks/useTracks.ts @@ -46,30 +46,55 @@ export const useTracks = ( const queryClient = useQueryClient() const { data: currentUserId } = useCurrentUserId() - // Filter out duplicate IDs + // Filter out duplicate IDs. Callers often pass a new array each render, so + // key on the ids themselves to keep the queries below stable. + const trackIdsKey = trackIds?.join(',') const uniqueTrackIds = useMemo( () => trackIds?.filter((id, index, self) => self.indexOf(id) === index && !!id), - [trackIds] + // eslint-disable-next-line react-hooks/exhaustive-deps + [trackIdsKey] + ) + + // Rebuilding these every render makes tanstack re-hash every key and + // re-sync every observer, so only rebuild when an input changes. + const queries = useMemo( + () => + uniqueTrackIds?.map((trackId) => ({ + queryKey: getTrackQueryKey(trackId), + queryFn: async () => { + const sdk = await audiusSdk() + return getTrackQueryFn( + trackId, + currentUserId, + queryClient, + sdk, + dispatch + ) + }, + ...entityCacheOptions, + ...options, + enabled: options?.enabled !== false && !!trackId && trackId > 0 + })), + // eslint-disable-next-line react-hooks/exhaustive-deps + [ + uniqueTrackIds, + currentUserId, + audiusSdk, + queryClient, + dispatch, + options?.enabled, + options?.staleTime, + options?.placeholderData, + options?.refetchOnMount, + options?.throwOnError, + options?.refetchInterval, + options?.refetchOnWindowFocus + ] ) const queryResults = useQueries({ - queries: uniqueTrackIds?.map((trackId) => ({ - queryKey: getTrackQueryKey(trackId), - queryFn: async () => { - const sdk = await audiusSdk() - return getTrackQueryFn( - trackId, - currentUserId, - queryClient, - sdk, - dispatch - ) - }, - ...entityCacheOptions, - ...options, - enabled: options?.enabled !== false && !!trackId && trackId > 0 - })), + queries, combine: combineQueryResults }) diff --git a/packages/common/src/api/tan-query/users/account/useCurrentAccount.ts b/packages/common/src/api/tan-query/users/account/useCurrentAccount.ts index 86a5dc6d1ae..902bbfa8e36 100644 --- a/packages/common/src/api/tan-query/users/account/useCurrentAccount.ts +++ b/packages/common/src/api/tan-query/users/account/useCurrentAccount.ts @@ -6,7 +6,11 @@ import { primeUserData, useQueryContext } from '~/api/tan-query/utils' import { useAppContext } from '~/context/appContext' import { Status } from '~/models' import { UserMetadata } from '~/models/User' -import { LocalStorage } from '~/services' +import { + AUDIUS_ACCOUNT_KEY, + AUDIUS_ACCOUNT_USER_KEY, + LocalStorage +} from '~/services' import { AccountState } from '~/store' import { QUERY_KEYS } from '../../queryKeys' @@ -55,6 +59,44 @@ const getLocalAccount = ( return null } +// Last placeholder result, keyed on the raw stored strings. Every entity hook +// observes this query, and tanstack re-runs placeholderData on each render +// while the account is pending (or disabled, when signed out), so reuse the +// parsed account until the stored values change. +let placeholderCache: { + localStorage: LocalStorage + account: string | null + user: string | null + result: AccountState | null +} | null = null + +const getLocalAccountPlaceholder = ( + localStorage: LocalStorage, + queryClient: QueryClient +) => { + const account = localStorage.getItemSync?.(AUDIUS_ACCOUNT_KEY) ?? null + const user = localStorage.getItemSync?.(AUDIUS_ACCOUNT_USER_KEY) ?? null + if ( + placeholderCache?.localStorage !== localStorage || + placeholderCache.account !== account || + placeholderCache.user !== user + ) { + placeholderCache = { + localStorage, + account, + user, + result: getLocalAccount(localStorage, queryClient) + } + } else if ( + placeholderCache.result?.userId && + !queryClient.getQueryData(getUserQueryKey(placeholderCache.result.userId)) + ) { + // Re-prime the cached user if its query was removed + getLocalAccount(localStorage, queryClient) + } + return placeholderCache.result ?? undefined +} + export const getCurrentAccountQueryFn = async ( sdk: AudiusSdk, localStorage: LocalStorage, @@ -131,7 +173,7 @@ export const useCurrentAccount = ( // Render cached account immediately while fresh data loads, so the UI // doesn't flash empty but server data still wins once it arrives. placeholderData: () => - getLocalAccount(localStorage, queryClient) ?? undefined, + getLocalAccountPlaceholder(localStorage, queryClient), staleTime: Infinity, gcTime: Infinity, enabled: options?.enabled !== false && !!currentUserWallet, diff --git a/packages/common/src/api/tan-query/users/useUsers.ts b/packages/common/src/api/tan-query/users/useUsers.ts index f327649529c..a8cf662d3be 100644 --- a/packages/common/src/api/tan-query/users/useUsers.ts +++ b/packages/common/src/api/tan-query/users/useUsers.ts @@ -25,28 +25,53 @@ export const useUsers = ( const queryClient = useQueryClient() const { data: currentUserId } = useCurrentUserId() - // Filter out duplicate IDs + // Filter out duplicate IDs. Callers often pass a new array each render, so + // key on the ids themselves to keep the queries below stable. + const userIdsKey = userIds?.join(',') const uniqueUserIds = useMemo( () => userIds?.filter((id, index, self) => self.indexOf(id) === index && !!id), - [userIds] + // eslint-disable-next-line react-hooks/exhaustive-deps + [userIdsKey] + ) + + // Rebuilding these every render makes tanstack re-hash every key and + // re-sync every observer, so only rebuild when an input changes. + const queries = useMemo( + () => + uniqueUserIds?.map((userId) => ({ + queryKey: getUserQueryKey(userId), + queryFn: async () => + getUserQueryFn( + userId, + currentUserId, + queryClient, + await audiusSdk(), + dispatch + ), + ...options, + ...entityCacheOptions, + enabled: options?.enabled !== false && !!userId && userId > 0 + })), + // eslint-disable-next-line react-hooks/exhaustive-deps + [ + uniqueUserIds, + currentUserId, + audiusSdk, + queryClient, + dispatch, + options?.enabled, + options?.staleTime, + options?.placeholderData, + options?.refetchOnMount, + options?.throwOnError, + options?.refetchInterval, + options?.refetchOnWindowFocus + ] ) const queryResults = useQueries({ - queries: uniqueUserIds?.map((userId) => ({ - queryKey: getUserQueryKey(userId), - queryFn: async () => - getUserQueryFn( - userId, - currentUserId, - queryClient, - await audiusSdk(), - dispatch - ), - ...options, - ...entityCacheOptions, - enabled: options?.enabled !== false && !!userId && userId > 0 - })), + queries, combine: combineQueryResults }) const { data: users } = queryResults diff --git a/packages/mobile/src/screens/chat-screen/ChatScreen.tsx b/packages/mobile/src/screens/chat-screen/ChatScreen.tsx index bb1a7706d0f..88f6a7f825e 100644 --- a/packages/mobile/src/screens/chat-screen/ChatScreen.tsx +++ b/packages/mobile/src/screens/chat-screen/ChatScreen.tsx @@ -88,6 +88,8 @@ const { } = chatActions const { getHasTrack } = playbackSelectors +const INITIAL_MESSAGES_TO_RENDER = 20 + const messages = { title: 'Messages', beginningReached: 'Beginning of Conversation', @@ -595,7 +597,12 @@ export const ChatScreen = () => { renderItem={renderItem} onEndReached={handleScrollToTop} inverted - initialNumToRender={chatMessages?.length} + // Enough to show the screen and reach the earliest unread + // message, without rendering the whole cached history + initialNumToRender={Math.max( + INITIAL_MESSAGES_TO_RENDER, + (earliestUnreadIndex ?? 0) + INITIAL_MESSAGES_TO_RENDER + )} ref={flatListRef} onScroll={handleScroll} onScrollToIndexFailed={handleScrollToIndexFailed} diff --git a/packages/mobile/src/store/offline-downloads/slice.ts b/packages/mobile/src/store/offline-downloads/slice.ts index 16802c20781..00bf26597ca 100644 --- a/packages/mobile/src/store/offline-downloads/slice.ts +++ b/packages/mobile/src/store/offline-downloads/slice.ts @@ -456,7 +456,14 @@ export const actions = slice.actions const offlineDownloadsPersistConfig = { key: 'offline-downloads', storage: AsyncStorage, - blacklist: ['isDoneLoadingFromDisk', 'queueStatus', 'currentNetworkStateType'] + blacklist: [ + 'isDoneLoadingFromDisk', + 'queueStatus', + 'currentNetworkStateType' + ], + // Each job update otherwise re-serializes and rewrites the whole slice, + // which adds up during large batch downloads + throttle: 1000 } const persistedOfflineDownloadsReducer = persistReducer( diff --git a/packages/web/src/pages/profile-page/components/desktop/ProfilePage.tsx b/packages/web/src/pages/profile-page/components/desktop/ProfilePage.tsx index ac25f22a969..6ee7b8bdab9 100644 --- a/packages/web/src/pages/profile-page/components/desktop/ProfilePage.tsx +++ b/packages/web/src/pages/profile-page/components/desktop/ProfilePage.tsx @@ -193,8 +193,12 @@ const ProfilePage = ({ containerRef }: ProfilePageProps) => { () => ({ handle: handleLower ?? '' }), [handleLower] ) + // Artists land on Tracks, so once we know the profile is an artist's, only + // fetch reposts when that tab is opened. Everyone else lands on Reposts. const userRepostsQuery = useProfileReposts(repostsArgs, { - enabled: !!handleLower + enabled: + !!handleLower && + (activeTab === ProfilePageTabs.REPOSTS || !profile || !isArtist) }) const repostsQuerySource = useMemo( () => ({ diff --git a/packages/web/src/pages/profile-page/components/mobile/ProfilePage.tsx b/packages/web/src/pages/profile-page/components/mobile/ProfilePage.tsx index 790ea834ca5..03aef932289 100644 --- a/packages/web/src/pages/profile-page/components/mobile/ProfilePage.tsx +++ b/packages/web/src/pages/profile-page/components/mobile/ProfilePage.tsx @@ -157,8 +157,12 @@ const ProfilePage = ({ containerRef }: ProfilePageProps) => { () => ({ handle: handleLower ?? '' }), [handleLower] ) + // Artists land on Tracks, so once we know the profile is an artist's, only + // fetch reposts when that tab is opened. Everyone else lands on Reposts. const userRepostsQuery = useProfileReposts(repostsArgs, { - enabled: !!handleLower + enabled: + !!handleLower && + (activeTab === ProfilePageTabs.REPOSTS || !profile || !isArtist) }) const repostsQuerySource = useMemo( () => ({ From c32651a7daf28567020c7787b9954b43f4924923 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Oct 2026 23:57:40 +0000 Subject: [PATCH 6/6] perf(mobile): stop resolving the whole queue's URLs when playback starts - AudioPlayer: starting playback ran makeTrackData over the entire queue, so a lineup or 1000-track playlist fired a HEAD request for every track's stream and 1000px artwork (about 2N requests), competing with the track that was buffering. Only the start track, the one before it and the next 2 are now checked against their mirrors; the rest, and appended tracks, go in with their primary URLs. If a primary URL fails when its track plays, the existing PlaybackError handler re-resolves it against the mirrors. Offline tracks still use local files and gated tracks are still signed. Queued tracks no longer reset the playing track's retry count. - AudioPlayer: the offline-availability selector, which runs on every dispatch, builds its map in a loop instead of spreading in a reduce. - useImageSize reads preloadImageFn from a ref, so callers passing an inline function (every mobile image) no longer re-run the resolve effect and prefetch again on each render. A cached larger image is only used up to 3.5x the requested width, so 150px thumbnails don't decode 1000px art. - The collapsed Now Playing drawer loads 480px artwork and switches to 1000px when opened. Feed collection tiles use 150px like track tiles. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DmUrAQMioSmE4rsEgLPEQL --- .../common/src/hooks/useImageSize.test.tsx | 83 +++++++++++++++++++ packages/common/src/hooks/useImageSize.ts | 35 +++++--- .../src/components/audio/AudioPlayer.tsx | 76 +++++++++++++---- .../components/lineup-tile/CollectionTile.tsx | 2 +- .../components/now-playing-drawer/Artwork.tsx | 10 ++- .../now-playing-drawer/NowPlayingDrawer.tsx | 2 +- 6 files changed, 176 insertions(+), 32 deletions(-) create mode 100644 packages/common/src/hooks/useImageSize.test.tsx diff --git a/packages/common/src/hooks/useImageSize.test.tsx b/packages/common/src/hooks/useImageSize.test.tsx new file mode 100644 index 00000000000..c045f3cefbb --- /dev/null +++ b/packages/common/src/hooks/useImageSize.test.tsx @@ -0,0 +1,83 @@ +// @vitest-environment jsdom +import { cleanup, renderHook, waitFor } from '@testing-library/react' +import { afterEach, describe, expect, it, vi } from 'vitest' + +import { SquareSizes } from '~/models' + +import { useImageSize } from './useImageSize' + +const makeArtwork = (id: string) => ({ + [SquareSizes.SIZE_150_BY_150]: `https://a.test/${id}/150x150.jpg`, + [SquareSizes.SIZE_480_BY_480]: `https://a.test/${id}/480x480.jpg`, + [SquareSizes.SIZE_1000_BY_1000]: `https://a.test/${id}/1000x1000.jpg`, + mirrors: ['https://b.test'] +}) + +describe('useImageSize', () => { + afterEach(() => { + cleanup() + global.IMAGE_CACHE.clear() + }) + + it('does not preload again when re-rendered with a new inline preload function', async () => { + const artwork = makeArtwork('inline') + const preload = vi.fn(async (_url: string) => {}) + const { result, rerender } = renderHook(() => + useImageSize({ + artwork, + targetSize: SquareSizes.SIZE_150_BY_150, + preloadImageFn: async (url: string) => preload(url) + }) + ) + await waitFor(() => + expect(result.current.imageUrl).toBe(artwork['150x150']) + ) + rerender() + rerender() + await waitFor(() => expect(preload).toHaveBeenCalledTimes(1)) + }) + + it('falls back to a mirror when the preload fails', async () => { + const artwork = makeArtwork('mirror') + const preloadImageFn = vi.fn(async (url: string) => { + if (url.startsWith('https://a.test')) throw new Error('down') + }) + const { result } = renderHook(() => + useImageSize({ + artwork, + targetSize: SquareSizes.SIZE_480_BY_480, + preloadImageFn + }) + ) + await waitFor(() => + expect(result.current.imageUrl).toBe('https://b.test/mirror/480x480.jpg') + ) + }) + + it('uses a cached larger size only when it is not much larger', async () => { + const artwork = makeArtwork('larger') + global.IMAGE_CACHE.add(artwork['480x480']) + global.IMAGE_CACHE.add(artwork['1000x1000']) + + const { result: forThumbnail } = renderHook(() => + useImageSize({ artwork, targetSize: SquareSizes.SIZE_150_BY_150 }) + ) + await waitFor(() => + expect(forThumbnail.current.imageUrl).toBe(artwork['480x480']) + ) + + global.IMAGE_CACHE.delete(artwork['480x480']) + const preloadImageFn = vi.fn(async (_url: string) => {}) + const { result: withoutMedium } = renderHook(() => + useImageSize({ + artwork, + targetSize: SquareSizes.SIZE_150_BY_150, + preloadImageFn + }) + ) + await waitFor(() => + expect(withoutMedium.current.imageUrl).toBe(artwork['150x150']) + ) + expect(preloadImageFn).toHaveBeenCalledWith(artwork['150x150']) + }) +}) diff --git a/packages/common/src/hooks/useImageSize.ts b/packages/common/src/hooks/useImageSize.ts index 95044f52f4b..d4c05d8f148 100644 --- a/packages/common/src/hooks/useImageSize.ts +++ b/packages/common/src/hooks/useImageSize.ts @@ -1,4 +1,4 @@ -import { useState, useEffect, useCallback } from 'react' +import { useState, useEffect, useCallback, useRef } from 'react' import { SquareSizes, WidthSizes } from '~/models' import { Maybe } from '~/utils/typeUtils' @@ -28,6 +28,11 @@ const getWidth = (size: string) => { return parseInt(size.split('x')[0]) } +// A cached larger image is used in place of the target size only up to this +// many times its width, e.g. 480 for 150 but not 1000, so small thumbnails +// don't decode full-size artwork. +const MAX_LARGER_SIZE_RATIO = 3.5 + type Artwork = { [key in T]?: string } /** @@ -64,6 +69,13 @@ export const useImageSize = < useState>(undefined) const [failedUrls, setFailedUrls] = useState>(new Set()) + // Callers often pass an inline function. Reading it from a ref keeps the + // effect below from re-running (and preloading again) on every render. + const preloadImageFnRef = useRef(preloadImageFn) + useEffect(() => { + preloadImageFnRef.current = preloadImageFn + }, [preloadImageFn]) + const fetchWithFallback = useCallback( async (url: string) => { const mirrors = [...(artwork?.mirrors ?? [])] @@ -71,7 +83,7 @@ export const useImageSize = < while (mirrors.length >= 0) { try { - await preloadImageFn?.(currentUrl) + await preloadImageFnRef.current?.(currentUrl) return currentUrl } catch { const nextMirror = mirrors.shift() @@ -84,7 +96,7 @@ export const useImageSize = < throw new Error(`Failed to fetch image from all mirrors ${url}`) }, - [artwork?.mirrors, preloadImageFn] + [artwork?.mirrors] ) const getNextMirrorUrl = useCallback( @@ -140,14 +152,17 @@ export const useImageSize = < IMAGE_CACHE.has(artwork[size as SizeType]!) ) as SizeType | undefined - // Check for larger size + // Check for the smallest cached larger size, up to MAX_LARGER_SIZE_RATIO // If found, set the image url to the larger size and return - const largerSize = Object.keys(artwork).find( - (size) => - getWidth(size) > getWidth(targetSize) && - artwork[size as SizeType] && - IMAGE_CACHE.has(artwork[size as SizeType]!) - ) as SizeType | undefined + const largerSize = Object.keys(artwork) + .filter( + (size) => + getWidth(size) > getWidth(targetSize) && + getWidth(size) <= getWidth(targetSize) * MAX_LARGER_SIZE_RATIO && + artwork[size as SizeType] && + IMAGE_CACHE.has(artwork[size as SizeType]!) + ) + .sort((a, b) => getWidth(a) - getWidth(b))[0] as SizeType | undefined if (largerSize) { setImageUrl(artwork[largerSize]) diff --git a/packages/mobile/src/components/audio/AudioPlayer.tsx b/packages/mobile/src/components/audio/AudioPlayer.tsx index 0b37caa463f..b9eb5c3ba65 100644 --- a/packages/mobile/src/components/audio/AudioPlayer.tsx +++ b/packages/mobile/src/components/audio/AudioPlayer.tsx @@ -74,6 +74,13 @@ const getArtworkTargetSize = (artwork?: Track['artwork']) => TRACK_ARTWORK_PREFERRED_SIZES.find((size) => artwork?.[size]) ?? SquareSizes.SIZE_1000_BY_1000 +// Checking a track's stream and artwork against their mirrors costs HEAD +// requests, so a new queue only checks the tracks around the starting one. +// The rest go in with their primary URLs; if one fails when it plays, the +// PlaybackError handler re-resolves it against the mirrors. +const RESOLVE_AHEAD = 2 +const RESOLVE_BEHIND = 1 + const { getPlaying, getSeek, getCounter, getPlaybackRate, getTrackId } = playbackSelectors const { setTrackPosition } = playbackPositionActions @@ -223,21 +230,34 @@ const useQueueSync = (isAudioSetup: boolean) => { const offlineAvailabilityByTrackId = useSelector((state) => { const offlineTrackStatus = getOfflineTrackStatus(state) - return queueTrackIds.reduce((result, id) => { + const result: Record = {} + for (const id of queueTrackIds) { if (offlineTrackStatus[id] === OfflineDownloadStatus.SUCCESS) { - return { ...result, [id]: true } + result[id] = true } - return result - }, {}) + } + return result }, isEqual) const [retries, setRetries] = useState(0) const makeTrackData = useCallback( - async ({ track, playerBehavior }: QueueableTrack, retries?: number) => { + async ( + { track, playerBehavior }: QueueableTrack, + retries?: number, + { + resolveMirrors = true, + isUpcoming = false + }: { + /** Check the stream and artwork URLs against their mirrors */ + resolveMirrors?: boolean + /** Not the track about to play, so leave its retry count alone */ + isUpcoming?: boolean + } = {} + ) => { try { if (!track) return unlistedTrackFallbackTrackData - setRetries(retries ?? 0) + if (!isUpcoming) setRetries(retries ?? 0) const trackOwner = queueTrackOwnersMap[track.owner_id] const trackId = track.track_id @@ -251,8 +271,10 @@ const useQueueSync = (isAudioSetup: boolean) => { const audioFilePath = getLocalAudioPath(trackId) url = `file://${audioFilePath}` } else if (streamObj?.url) { - url = - (await resolveStreamUrl(streamObj, retries ?? 0)) ?? streamObj.url + url = resolveMirrors + ? ((await resolveStreamUrl(streamObj, retries ?? 0)) ?? + streamObj.url) + : streamObj.url } else { const sdk = await audiusSdk() const nftAccessSignature = nftAccessSignatureMap[trackId]?.mp3 ?? null @@ -274,13 +296,16 @@ const useQueueSync = (isAudioSetup: boolean) => { ? `file://${getLocalTrackCoverArtPath(trackId.toString())}` : undefined + const artworkTargetSize = getArtworkTargetSize(track.artwork) const imageUrl = localTrackImageSource ?? - (await resolveImageUrl({ - artwork: track.artwork, - targetSize: getArtworkTargetSize(track.artwork), - defaultImage: DEFAULT_IMAGE_URL - })) ?? + (resolveMirrors + ? await resolveImageUrl({ + artwork: track.artwork, + targetSize: artworkTargetSize, + defaultImage: DEFAULT_IMAGE_URL + }) + : track.artwork?.[artworkTargetSize]) ?? DEFAULT_IMAGE_URL return { @@ -333,10 +358,18 @@ const useQueueSync = (isAudioSetup: boolean) => { .filter(({ i }) => i !== startIndex) const resolved = await Promise.all( - remaining.map(async ({ t, i }) => ({ - data: await makeTrackData(t), - i - })) + remaining.map(async ({ t, i }) => { + const resolveMirrors = + i >= startIndex - RESOLVE_BEHIND && + i <= startIndex + RESOLVE_AHEAD + return { + data: await makeTrackData(t, undefined, { + resolveMirrors, + isUpcoming: true + }), + i + } + }) ) // Sort by original index so RNTP order matches redux order @@ -358,7 +391,14 @@ const useQueueSync = (isAudioSetup: boolean) => { // --- appendToQueue: add new tracks to end --- const appendToQueue = useCallback( async (newTracks: QueueableTrack[]) => { - const resolved = await Promise.all(newTracks.map((t) => makeTrackData(t))) + const resolved = await Promise.all( + newTracks.map((t) => + makeTrackData(t, undefined, { + resolveMirrors: false, + isUpcoming: true + }) + ) + ) await TrackPlayer.add(resolved) }, [makeTrackData] diff --git a/packages/mobile/src/components/lineup-tile/CollectionTile.tsx b/packages/mobile/src/components/lineup-tile/CollectionTile.tsx index 0b614b24002..c5679c2c838 100644 --- a/packages/mobile/src/components/lineup-tile/CollectionTile.tsx +++ b/packages/mobile/src/components/lineup-tile/CollectionTile.tsx @@ -168,7 +168,7 @@ export const CollectionTile = (props: CollectionTileProps) => { (props: ImageProps) => ( ), diff --git a/packages/mobile/src/components/now-playing-drawer/Artwork.tsx b/packages/mobile/src/components/now-playing-drawer/Artwork.tsx index d8e05ddb390..b0a18c8ffbc 100644 --- a/packages/mobile/src/components/now-playing-drawer/Artwork.tsx +++ b/packages/mobile/src/components/now-playing-drawer/Artwork.tsx @@ -45,9 +45,11 @@ const useStyles = makeStyles(({ palette }) => ({ type ArtworkProps = { track: Nullable + /** Whether the Now Playing drawer is open, so the artwork is visible */ + isOpen: boolean } -export const Artwork = ({ track }: ArtworkProps) => { +export const Artwork = ({ track, isOpen }: ArtworkProps) => { const styles = useStyles() const dominantColors = useSelector((state: CommonState) => @@ -81,7 +83,11 @@ export const Artwork = ({ track }: ArtworkProps) => { key={track?.track_id} trackId={track?.track_id} style={styles.image} - size={SquareSizes.SIZE_1000_BY_1000} + // The collapsed drawer hides the artwork, so don't load the full + // size for every track until the drawer opens + size={ + isOpen ? SquareSizes.SIZE_1000_BY_1000 : SquareSizes.SIZE_480_BY_480 + } /> {shouldShowDogEar ? ( diff --git a/packages/mobile/src/components/now-playing-drawer/NowPlayingDrawer.tsx b/packages/mobile/src/components/now-playing-drawer/NowPlayingDrawer.tsx index cd355cd834a..6cae3a23f58 100644 --- a/packages/mobile/src/components/now-playing-drawer/NowPlayingDrawer.tsx +++ b/packages/mobile/src/components/now-playing-drawer/NowPlayingDrawer.tsx @@ -364,7 +364,7 @@ export const NowPlayingDrawer = memo(function NowPlayingDrawer( - +