From 917458c97a07ffe9af57e092fc08849cefab90dc Mon Sep 17 00:00:00 2001 From: Chuck <33324927+ChuckBuilds@users.noreply.github.com> Date: Fri, 4 Sep 2026 01:53:21 -0400 Subject: [PATCH] docs(basketball-scoreboard): document all 274 settings, with real renders The README covered a fraction of the 274 settings and had no images. It now documents every schema leaf -- verified by a token audit -- with five renders, and keeps the ChuckBuilds links block, the four team abbreviation lists, the background-service notes, the NCAA season-data caveat, the game-limits behaviour and the non-favorite dwell table. Four leagues. Only two defaults differ across them -- enabled, and show_ranking, which is on for the two college leagues -- so that is a short table plus one section rather than 200 duplicated rows. The two NCAA blocks carry a march_madness section the NBA and WNBA do not have: seeds in place of AP rankings, the round abbreviation, the bracket region, a tournament-game cap, and a tournament_mode override that is otherwise decided from the calendar. It now has its own section and a three-way render. Also newly documented: - The mode toggles are show_live / show_recent / show_upcoming here, as in football, not live / recent / upcoming as in hockey and lacrosse. A display_modes block copied across silently sets nothing. - mode_durations has no live_mode_duration in this plugin, unlike the football, hockey and lacrosse scoreboards. - other_games_min_quality is live for the college leagues, which have a poll, and inert for the NBA and WNBA, which do not. check_plugin.py passes 24/24 with no FAIL. Carries the docs-tooling changes from #423, which this render depends on. Co-Authored-By: Claude Opus 5 --- .../basketball-scoreboard/display-modes.png | Bin 0 -> 39417 bytes docs/assets/basketball-scoreboard/hero.png | Bin 0 -> 9509 bytes .../basketball-scoreboard/march-madness.png | Bin 0 -> 29884 bytes .../basketball-scoreboard/panel-sizes.png | Bin 0 -> 39632 bytes .../basketball-scoreboard/period-states.png | Bin 0 -> 37075 bytes docs/assets/basketball-scoreboard/shots.json | 1360 +++++++++++++++++ .../basketball-scoreboard/show-records.png | Bin 0 -> 22688 bytes plugins.json | 4 +- plugins/basketball-scoreboard/README.md | 937 ++++++------ plugins/basketball-scoreboard/manifest.json | 14 +- scripts/docs_render_support/sitecustomize.py | 55 +- scripts/render_docs_assets.py | 3 + 12 files changed, 1907 insertions(+), 466 deletions(-) create mode 100644 docs/assets/basketball-scoreboard/display-modes.png create mode 100644 docs/assets/basketball-scoreboard/hero.png create mode 100644 docs/assets/basketball-scoreboard/march-madness.png create mode 100644 docs/assets/basketball-scoreboard/panel-sizes.png create mode 100644 docs/assets/basketball-scoreboard/period-states.png create mode 100644 docs/assets/basketball-scoreboard/shots.json create mode 100644 docs/assets/basketball-scoreboard/show-records.png diff --git a/docs/assets/basketball-scoreboard/display-modes.png b/docs/assets/basketball-scoreboard/display-modes.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe29293a609e4c6933a3b97db4a15bade2498b1 GIT binary patch literal 39417 zcmcF~XH=8hx~^-v6cvS~h>EnO1Q1Y=UIQvpLKRVZQ949=4^2fxsT!o0ND-t)N@yW~ zA|=vW0-<+82rVQ)AaFlD_l&*IK6|fm|6Io~g8^UWoZma&{yxv!2YMRk&Rjin?AWn$ z5Y77!j~zQM4E#TK>UZEb_cQ)zK6Wg%8FK&bqW}VV!aw+t{p8_hkd|#LSOVBh&N3t8=dMZCz{kxd;G=nq`Pi}N3zvZ(O+tS= zcI?Xm@b@QsC;opvG<{$e+Ko_AQC2>r^s0z`I@h>68!cj7*07Wn6mT6lL?`m${w`_sHqs^n=LX6fKgZjX)2lXj8fx~+r z2Gf1Fcx^3%H(L$!bxbiZ>Z{XiX)>yOYYfcy{{2_t`Q|ll zQ=$9hmEq!KG3&#xOuQBzUr#78jvbqR#@H%%o2XyM>{x}LJa_Njy)i;TX*}5K%vA7&9qui~ zinB!8F85`h2%|P1XO(iFYzU+*lE-R}fWya%Gxm4<>nvJFB1bD7FCSz>@nvl()vjZ& zBO^I&9lBD^^YAFU4Bd!q5eMX{m#IKq9hJOx?V5rDY`XbH18_0TrgaB|3j59sdGCS2 z!7yOImw8%=!h%PBl*Mi~0iBMnt_(R(8ylM(@x}SsE~1YWaD%KW2OGu6Mzb%^ywDSm zi;ZrzDX&g7g#q7aONkb(@3=BpYA$Q5qpsfeErNLr1vTDa%$3$m(w7inJqVR1Kqze~ zZLyq`pVqhd?4V%B+1dF-n5MqI*lr6p?74l6eDLlDR;3^>ZwSx|0fGE!8SBtJdlIhH z9(n>{mTD7n3|Hkm2uSNunMK``^D>S-84V2$z`0YK_J-Miy_ft*a7!PFbOVq4!|*n}U_66xSPU54RX|wVrb^;+(Q>Qf;qZzt&5aDSfiJJ*9$M z9j#24h8k^%^*Z!sktusI;u`ThjFn>K>vNpAk9Wf%2?CoX#{tuG3!|f4hKqnpyUowf z4;+s;@JTh21?;z)BJO~N^8+RX(bD?y<42l={f{8vjiywLz9JDf9&B{mzUa@@P&qoF z04C50{Ojl#srMzByJK1hS&tplQ_--nxYYw_(R2CUNS4<2_OYkQqLz9xB7nO%i}>le znm(_gx^%S^z!p6O)urmw5 zDjQH^ZLMTx^y1=TnJESi-V+QDk9Q(z~6KN5}K7C*?&86!LB1JBm|VCUGg4neT9 zv5g(Qeqp?gDKf}yV;6bsLa5rKkj zG|;&+R9X{+k2^RBw(aUL(9bU@I9F%y6l!(IkAcZL4{X1rpA%gR#YU+lM?@y08;@dt zZUGr|h-BgE=;(Mi#;X)CjZ~!gkE!_GB(}W>7bA`qThw`>{mBPMXz-HD(OnP`iEjp-Mh?p(o;UhUl6T>rHZx0tt4QPuvv2UEzK`fDyO zE?U`3d3_W6Xb(ocbYNg$#Gz}eR-zl1)O=JUV@1}H1)>H92K%%%>V62#nKfYb z=hd|(#{;gXPgmBRQ02LmcREqnxbbOobEcwS#w_h|(WA_*!Mvdl9}Z>Dt`6;e+oLRA zoTsh~A3fE@C|WQ%8K-&6CNXNR6!-_>KUT8Fj7@`l{be>=C?Q!?36@i8a^KVrSCfvgIskI3~TSs`mQbI8J zu+wYd#{_KbOLzJ#+XdRW24~G|^p3HhzqFFl!Ma}b>g3_~S53@EYobgvL0Z$(Y22;! zu-!Eh;8`a;=Kk7$Q)Glo!H#vnLeGZVYM!7^_k^oiAA0t~;dEB+KT5F3X#ZEmcG1pHOQ{*K@!`u*MD#&_@Dz3Di*_2>82$MI2dSzvFN zgTo>a#BfM!^IY}Vj~_oyE%kO{v3h!XS&B>eOSjBN+aG?nWjb~&|GNq!DlQJ99NKjy z?CVkYj~`KQ-YB(_)1_Q-Icmj#EY;fYua9E(?Lx0hqxxcvKR?*S79dno@2jf|@N+ZJ zV+fmlqO;(c!*`jP>=!RyWaCZw<-V_b-b>?h9vz!=?GD`;Nx=sJ&-S(;8u9et#-sgLJSugWA3n@C zxh>6?U)&t|?bscxSW|^}1z+x=|I7tWPVFH@dvZA_1`xRT8 z9NUTt307VOrW%&cSgpl@Z%x{t~kcq)92qCkO}^0Sy)7W^j!4ZKY`{x&oP>9 zyEHxhj``QBgNEyn?67^rnib$F@>cbA-bB$!Z2jBo$>E1Bk*w@e3TziHWausNgT>A< zGe;L&<=S`R-oAa?mZA-#ojG?dIyM%wJhfc4~(>hQxou z_>;%$0EJ8_j!GR2tJ^99gh6nn79|2Ych$DqZDOD#Fgk4V=)pjLZn{h>zR<9y&$Z0D z#&23zR^_0hV`nNTXqI(~1}wH?pS-jb1bjuwme5-;l6u|k=xCjm$6HpLV~x}fS|4c) z>0U_`7cVcEOt_b9c+|hf4%5@pa&ueDJ3VFHzf+Wjf&H}67CH*ZYSgulUADl7-SP0~ zD9_7tZqku%3&3QpH|^K=vNP7gJnpN*+G2<*`@xgEhl1Fi9;+HZD&WPFI{;gLp1|el ziPFI`=(|4>i**n(iGwf)OK;1gmPi&xU9eCA5an8smTHA(SXi7#D|}mC$I7(2&p!jg z^%aFz1Kxml^Yru#Z93|B&!-Z+(`_AA2c++}msXPFff#rD6P;+>($*~>4rHQARUyy= zj{Pmqr>rF7dPS*R;{nwVN5v?zIW+s9GL!(Phq*= zRkpRzv!4j?47ogfmryx9I>;gQK}d~4c9XZFfQ&J`z>OdX8KcwJ_If^~!4InS_78bT ze=HO%@9)ox9bLm#aZG7%4c9osE{Lp@N1C_`Wv-a3Cb*9~V%mwL0kDR{sPI?E=@xQ1 zRPIuwVLYkc4x_8{7~IRvgJ*EiAN#kcU;qbnTZ;E*3h|F(=vTgwQn3d$4#~P{TXRLt z!=#y9n^FJg_HF|_W=c*2exBR?ogLxzR7rKT+o(N$y~HiQg;;&5D6V;@g7YOU*ZeKs z#dLCL%?09D!1Dnl6xifemmy=?fRn$OHSaGLSN$}Hv%J-fPfQJGlWD*gD2yC-_p1Ho5AhiNMPrzdi3txjIEnscc#zQ-6 zK?&4@0A6H)0bfhO&m!`**uNE=1R*#hkm3Xhoosvr?=?EK``z~%MmbY$`P85v)|li7 z*>YOqHgo;{ZsWPPF!}qM$sTj68*;u~$4bMllf|wG#V@?fl!*=>z z;b%ENXYQ1<6+t8psQIub*XkGEMZqlUB2m4e-OoFzH+XmjAfaV`SAuGW$QGWe))2qa zU@LgsQHd}li^`G&#h9}M)_($-uZ{3y&H4N_y_^+qiBIks*+Trd@X}cA_w+cLlS9(X z;LoJA<(Jw1D!Knj|GGv8g1b5fN5dGLmLTjnxR`%5Gx(0|{Fw@v2!Rcv;`s+SUY)=xwLdYQu6sxGYZ!HgOT`R+HSj#o4oa=J&vuiS zx<0Mcu0)E#jQhU=`JqHz3z9_jCm7zTEbi=fUFwDKapHMjlGc=|>9w=H1&LAAm)V z%H09IupWCq$I~w}`~314F{zX2nRwzfyyEEu7#6rB*MnLWCos zA+vjKs{DJ-r0b9hNtED)tB+0L8AC1bm{lq(glE|&9HiSm4#K{_={ogFj_SKLksnC^ z!wmeO$ry2$%`WySI{&QzZ>ilPUl)-qe`&$W=UOL=M)MA;DrQAzhzw0-}CD?tBJm-tZ-O~9e)HeBye6}qK z&oiZOy)r)8@y6>nF-*izUu?B<_gnc30S9!uagRa`xFee{Y_8IlMDlh)X@vhEjRv^e zxI(_EqW;+b5rXF5BeRG2(UnKF;KSxQR81(SG6M)nw}bai0b>0}>*$wkn?Lj~&Pm6j zwFdGYlAp8jgpE|(fuD=?6;8mr)$CS5{QtTIffp^<@N-P;TS2VowizH(+`N{?8^1eQ zmIo-1m}o!NXwS%8vSa0Vby=BZllDs0`*{qz%F3aMWq-z5^1Vqs*=V9AtA*d0`o8)m zo1T-k#E3#9L%ga%ol63~*0L(AinHzAGtH9g+X zChrBsRfY|YHtv{ExGWd8(}*?JzC0vUS}vy3y)jf5ev(=>N8DVtt(#c0sd_-}SQsi0 zlvPuq2Rdw6S+cM8Px)>PHWbxI8d3VWbFsx!%N899Mq*T6S)LE`$ptc+US#H5rK+WN zyW2nuu6bjD50LIZ^!1lRc>ZwqO?2_&RYlon<3KaS`NE;Zt}mp_sZR|qjNC~CDVYR$ zuTujbz?n*%;n+ZeEYVWGK(uEJtqvcuD~4RoImfKwVKPli(imeC=+(+FQfn{Zez%-b zgpWmOeA$ML@tbWo^47N^Hnaj|9LVA>Kh2>b01d{OI?b*L-uukwp>TW~xpVqJWv|ho`F`;8_kgUV{ zGApBydT#w{D`zA|-F#zM#B>nE8*mpMT~Bg9U0WB%TTEJF-OzimT+|Hnvk)hEA9zGH z2Dy#obGJ24_*QJ7{a4(NUD-90gs>E>q=820Uqj}Tz;LP0h3o5krZ8FmHwgWo{p7RO z%0HVlzZ%NFa;RVa;#toyiVeLL3fy@#7YgT@8*?! z%eP*l;2iyZurQ=a{W4Kmar;IR8Glz##q``)1Mq9eLvWFoc+U)TSg;UwkfKuA<5B|Z zWt7$Itrmr8ON4Zo!y8b~UMh#@628IsMSQyw&BF8ai9oepSun%?#co7XK)OA9R?%u4{e|g{{FB3_ep0 z_j&y!;#BcjXYy0cFTM3qD~C#Qat83I_k_5Hy}C>FM5oO7gZ3z2xDF$*aZ*ITM#*pB z8RY6v=`~0}bvOU!qIvig49r3_#9W4Aw32$Xv>#idQ0%spUQ;E(i3m*zj~~(S z`>&id1m;X$u043929C1GlpD={-7`$L|EP=`pC|@#9AK0$i_rj=Q=IOXJl{?ww0jN@ z;0kJjQ+U+8sx4pSa-Yr!;XN&PT$Y#gXc)29!@XUw-?8EaqmC71*4n?Pvn*@k^ZfCA z@S$R)ae7`jA-Rh}}=7&2MoS>pWH z(0yN3=c~0j)c%KY%N*LhUKHZbX~%!iQv*uB3zq7dV_B_CB|x@1xH2aL7~cg;EC(GB z;LcL@Rx|i`KV1vbVC34Cb;dDyKG;vYM{9NTjaxzI#RBd^bDsXd=b*|OQ3-|j!W{%h z@IcJ7TLEX$PG7RhWngVb*#;9p@@c8U*jovR#5}7LnSU9n7&!)5TGf<-RLW8d z3vS+v9~z3jb&pbhO4{<6J(=$}jpi3oix)7@Ql_=iR?YKsnc^2n)IiK2_l8R_)Zdj) z;re!YR;GmpoHukBI#Jo;uQgES_8N3qW`MNvg~XyYP;6fT%557?p5G6A>~pykn|RHD z&XWGcobzS)TA&_0kSz;$%RKYP3nYGcCmIw|GJS>oVsX)AJu9_-L0geKdA@r_5#&5< z(OXn5Tu>}ag7O_c_ftdA?{VgzD_x5IW&8gj?`rAR7|S7R^Y8gDy?~ETWjBG`#kd3^ znkjy4UM1C*31_6K0VS7SPcT&#h!QMlu3Y@yp%zBg18z1l$db(H4KD(<^9R1n`rUBE z_B=_a3wqT*(XRWcYuvMnd|6ycPIsCx?(nSBgfToevKq2QuiyoxesONhiv6O=_8INs zq6V#4`Aem%IdC>7$tc!T%vZp-vWH3MR6o?+E347^12T_uWzcBMuicNBNJ~FKkkaWK zET$i~y_$9h5o$4Nz)Kn)^CzNJ4arj>JNFx`mK34JjB+v2zRIWF`e(~Njxpy3bxSQ@%AgO{hT}usaNWg zV{`vp=78cNTc$(0pAN6c4I`#=^x(MX#;Y8i!YjVMwlSc1)^S1X8`1?3$B6#YBbrm{ zbu8N)ido*zNO~gs)U8X6+nd28$&3eVpJP+fOQ6q-(ay3Is-lm8LvEXb0l`G|a#Ko9 zr8I&I$tK9kjRX7KU-?7F_>D5BXn{ar;n%;FlcP3elQ`9`<>g(h48N&0@)vgK7Bj!+ zE2rdJQ^g@{YL~)0Rj`zciz*dn|fw?bPVx*<(Jf`WH&iguHQISLxYM^ z40~q^It5o;ODMJ_Rz<}Y&(15vG(Kl214bn|FBr&%MwHgF@U0rVhFFMcuyW1%7MruSM#y%Of zaNJn~u8Pz+yE zkKD9)+~BrY*B^KG9E;M4t^09SBqgJr+ntTIwbUO*HCojmYeqI35BDA}C_~aCq#;k> z2?4C^n9^RKJh>PyBn?U}f9SX$*C2iuK7&Dt?R~|J`9zj1eOvxwE$Lm>xTL%}d;(rF z=D<*X<)Po4nqsx?+@QX<_n+&QW8O3=UX0OEk8|Q3r8)w?c$S6k%WohLQ#Kxq6|_FV zIQ=}NFp|G6bk-1lvylc!Mex-N*AJ1C7fo8%Kt6xPxN4^ zalbr?N+7Y)O!32#fqAqKsx_TJVeu5UFoo84G!-S}-P*l&nO9uFbr9C8i}TN6vVL|0 zyUyv`8Cgn<^MN{8N0vTTW{^PPml6p5)hk^R^nIKgWaK}}64fRrUo>w0_!TN=lUj40b0jk)c- ze*mfGK2r&!H$IoVq#Zvd-W07ls?vS2ElB}7FaM^LZ50ACuG@}4a^qF8R6i^zP(AZ97y}T zEQXR#6b*veCW%Z>@LYNK7dEAB;aM_Lcm3T-IJ zT;pD>KQqu@3-QzUa>b>v@^%6EtN3Hx%7iz^H-Kxj|$x4yfH>`LNveR`pN{|-=1`v3p zd1H0CpW6Dm(gV2c(e6V8(o6ieox0j!zdelvDd&`9`sLjF>QR#N*g0=6_7P8aog(XTt|KPXTv6n z;koNW#8|MH9*#*d`zs0I9KDeU@#Tl06k^so8lE@(_Jkmj$t)j)qVcacX`xelStf5` z=ls_b^Q<)(y1%oA6|o5}A*-^!dW5)pnHnl;yFbkP=Pu~KLXx^ToRzEN02{K%^WzE* zb>;X2JEJVnGHD`$4N}21WKa_i^ECg?v3#(hh<|6lxFHj&%Gr@&b8^8M>=z`OM?HA-wlCH6={15Mq_=-9 zyM@S7yKo^P;3co+bOXu`W7YmTVr5t$A5slM0iFG~aT}(&=QGt(YRq35<+i6yrsNND zD%JoMcxIT>r%J=i7~H3Iya?G4Ihu0ZGc&1i<@bz_V3+;oU|M?hjTC=ey}^b z>&mArSJDJBbU3_*EjiH%8V!BmsJatY9;7T$0Twa$e!CXMNoiaNtr zGm9v1%;`S)Gd65CRePTm=PS))N9lT3c?!)#XZ6U-VC4Yhnor8fgwVp9*w12O@9gl( zn5&AVr(f&U2-I<;SxjiB$Ez|~7A8+J2;gnlwkDHRaR~OahpY6V67>CA_8=6~xx6~Z zyZHFM-I{`>rIO_R0=r3nMkpjS&=mu+)`=Z-ToNHC@W@|q`I}Vh`C!}m%f`hc{%#|+ zdoRlfZ%JdHi$Qb9kcaS*FCEXluW+{+RKwzMu2B+-TU~xi|QB^S^C!*EF+=%`-e z$9A1-f^0#$li*5|ygT^#&iZCuX>Ql zWdq7yFYLs!Uxd|fE*ANfHtC^UqLADNmE5NM7-f8EHo?#~Q-Uvn&boz9E`%3xUDdv0~>%Xx3*1G-vm`ARrlPZ8w z;jMh%W|a%GA6H&Sgs51;)tHS|#?-209y7keWGsrpP7NT={sY4KUpY#Ci3~5f@MX^vGF+w=-5KNJMa5>{Mcl2o<^pOI{F=sM`2>oN4KVgle3`rqsZqfvsW~~ zmnD4QBCV(u}8PBSFz!{DC z4IqC@j|XthENEHKE)*yPZ;+Ska;lb=sVj%IWVZl^>OaCu^0OzrrPTGIJ|FZRHMn}H zKxkY;#hdxAgg+bncc14pTu!~idvd~aZUKIi?pk2CVENE zc~A-RS~u`6yyFzPdLCBw>7kf<`prFD?heD@6-ec5UweJMfiatt@TU-&4BXzvWv|fR zdxI_f0}6&UJwM>CPl%#FR4!T`!k?5}j-*w38t35c+sE{?Tg>_sm-3Ef;z)8~@ln^bKf2w2$~I*?-9Y zx_i=Ee6ORv_K>%n^IhMNcpt&uZhK6zf)XmPjVNkTi`xC#gf@;&OkTiG9I_5 zm5ocn^Y#Zu%;CD>c6*H|qe`(KPRyzrZx$S#_!i?sNWgTnuncthvAZz#!#tyY`rM$# z(bBdo$n?XPyKpqY@)jgF3RP10fiSe|x`co$)jcTznN9|iIL@8{j;bb=bos)nN?zs7IkxTcwFVL0^&~sjQ37`^ z>Yn6cr%9|=CT_nFC9s*)#bmIj+%0^6-n8b7_}}Q!9U)HubuLWHS1bE{gAW?C4F-L zIWUqEhUmi4ruJuM;Hz6F&5b>*pF?3!FKZ@i=XOak&K=tc>%Rj}W8dC684T7AiaRbk z*k(ftc3lwsL^P0ser!KnZa>GLipp=0E_fKm`z5|9OwXc1!1P0T zOn0#zHd3iXW|UvYQ_DTZi>W7>G_I$`v{dA}=b#lZr)(OF zgKUit!YnrTed-tTJn4$R$#e~fh83K5<;P+x9BkB=(FId0@|U)fY<@@Hq09MB45&!! z!&82w`EY&eW@KAicXj=Y$NwJSp~K;->~#`gFa$0)IV&F;{~DHEX$=13f73614Tb+{ zr1q}?{vSw(e|<=fH_4i^)Egfk4*;us<@J00?C-LM5y_O>}5oX>L$^cfxFL-g-y5P$gKSYoq z0f92>rpYUVn4leizi?^11YijOaK-qTnBbX+%X$otSWels@w!U!{3oS;-O~65fS$q< znfn(JAZP%@03>>?9ykPTb<}%%xnHp9Mu{29Wv(r@Kpznr_4BL&b%2}=)fSlQ?VvDDWfzmrn>YFSlt;whpZ`EYRy!IcgAZoAEfytxz?M+ntxmHWPko!k;eA8Ov{@P2m46}(4Lo|9P2h^HfL=zx zKDh=EHsu#n!;efrS)%<=P`v1=2{-@YqQ|UUavo8UieB>_025$Df)4hs*tGguY%vn)2rRzXmDA{nJfLdN&eyLJxQ3mXI)fNti$A|+`cb%w5 zO|2g-=f=xC8+lOUHu0WM_?LAf10^M|n7

b4qfqoaW@!Lq-%aKp>{3rT`Bs5MX;m)iC}8$>Z^cv2_S_xP?`v0ib1#kB^s>lmKQRX5Dx& zgoz(kgNgSzqxyG767)YEC9HeR#U*vZZ8ca$G85;%j+Hq>@Gj53aIhzUuns) zmJV0ofqwv&{s~_9U!D!oiF}`%74zoJuKqeZKsXzGXRZ+kEAk^N9Mvv0CQ#~P<7)k~ zX5FKA`nVN+i2%o-0f0aOWA{+9%YRcuED!1;OUJ4xFeUfK!zesyZ$5YDXw4zCY5igt zfa`hElc3)Opz@dfj*OwTfE2@-SOYLTS-?v?+1(}$y&m^6pQxwCh$mZywx%PSp2ZYe z*JyX%65LmN<>= z?0m}C8$4U;KYv~ZXhR`K6L_BZ0%%RN>b-km8A?w(7k4LnzYGueUmM@-#sgd>OSEN!SL+tQ$SRu zYA$0vx%A`Js}Sd(jDYHgpMHRYsE4x@{mTc+{ySxvC&q+kRTa4$mdXCBKYEE_AY z{P-N)3X8>#)woL^E%BzxyVX%?nTpl=S=%i$s*$kmgQ>A9m*K_u6O^Of5G%mAb8KyZ z5Ma5{XNB+|c(o3X=Uoq47&hqdXKOri0Cq994gwrWF@-|W4*{G4P>8l4wf!rt0uN9+ z$bMpGwSS3;`Omdc+uVhXN_G*?gy%M9Q~?@K$-_@8*zqOGFJ_gdQN`IOv?h&t;2c~JnK_qdkgd$Wzm)zzE+4<7jV=tP`h zM+DOYDam2P#1B4IH`2BA6+OKSfBIqyKthNk%2B&&Cj(*ANI}6Ea**6 zUP;Kzi4r1zZ*{V4&04>3snIDnXFp(aO$%SrUTUX=JDoGUjbRYqOWPx1jFsVN|0r zb#*vsDUQsEL!LW*TDem5msXI|{RnHqj$-q_eAA@HPW zF(ytLJx?iO99STUNWT4Y4vghy@MKEfLpV5yfCsdI(O`d_Myi zsHL0T0&#>5-+-6}!_dA@^h7*}@6G0Vb5(ypDjaGL1uA>y))GL(@8`jyP{qc3ah5xM z$?o6+mI+5T?i_5?@w8xG>km^-0Ke(Rr|5cLaT#S2(;C`wTRr?WG4{eyp9nT8*+tuH z_MH`5{`VF4qg4BQRF~lEn(&kn3rJSIGXmra)P60BhAvuLV+yXLK_zS-5O6;1zhfXI zcj-~7VEg&l{Ss(xR%}5#bU|h2x$@;WCydRG?~12oa!JkG!lI?RmbrQrlqmLt-M3^I zi#rTw9b;^{DS7~g(WDOsgMdp?{W(qhrxD}-ZO;?{(Z`_Z6kfJJFM-CTTSOBIZshvE z6a{V{dEciin}PfsO`dTeK84A@uvO=pOkMw)s3?Bd1C%R*^`#M&d>fe6*B=?nMzbih zBv};N3_elF#1GM$M4F2h=<*_cS(u3diz~UtZ;EbWH%lIY%RW2<_puC959U{L(|Kht zFC{uhNnM!Cz_z8feCT_!KS(o?10%}^_k!z6j_P+zR9+&KuhuTrI{M{-L=eS%*lZ=t zz0gP3Ea0wzgkY)B`e;=cFMJ-uRHI$tS>wkz+4!;afDb|d`?Q-m&S}Cy@ydrEK@22s zo+EX75WcDa0AATl+kFr*Ny80cW71jO zP(AU(>Ss^0$`uUgtqOc-dPht;Ja#m7rAhk4R?;O5e_+_~&~rlx^6SJgLWSU5EeN?C zs0qJ|%k7;&-GeKJ1wQ5lcXMn=FRB!=eecQ%`7{(E<@nU`ozdJVbv0wOv9$P|K1x>RWsMEmyq|=f)6r#T^N|ycHW!t za=PCf7#E1+2&!8@1zB?mD+Oh$T)BxAWFQjf(VSTcb{qFYTx%<~V*>YAihEXd`$6Kj zHbf3$WO}+x1CTdCkTAv6xDtSfIYb0%H7xrP; zyQ`1nZSkxOl#msZJpav25EQsynFfyuutrAqXaa-JlSE<%xQu~bblvs|1}~;QcTaRH z4&=UA)V`oXD+TG2po(7Od<1o_4I9M?FL|)2;ay%*tC$aqty#X6@f5259rG+s)2oF7 zv?OrrLsPdl)MM6q*oZJAT#=@X zcVYUzfCF#lLk;KhtBtk1f;e@pb^*Y?elM*3kCkN(|1YQIIQx+(rUF!Ef0!P8exH;D z&r|JQgg1EaG2mSzdj%kL{OX5!++woU!)rSGdB#?Kcj3oSkvh-y(d zNYN0H+4uPed_IpS$<7WLrnz;efD`1buqXhDvvXDy`d)}kT9@grwDNT;mWQ$%zbv_H zjhE`5&rSR!MJdm#_vIhX6M;(pp*fU&~8?Pp5pT`0uLA}66~ ztF+qT-7wQLOG|WU@{lthHb^9Nh*4gjBhNvIXh4pY)<=RPwFg%CTulWs`Wo%N__FNl z4k$Zo(Zxgj?tLr0oKOAHwP}LXfp(cNk=0Wd_Rm!w_4poo+r&9SJWbi3#!Js^_Jq=5 zZi4{kYZ2M0?G;=|LkTA0p`AUe4|2VoD?xi}QwqK1fy`w2o0A^ySo{ zJk`V%$3?abrBI;&%Df;}DPDuOlk9gnH^N0jv_KhLCqy^s1Rz{1=t&;(){zvlXf1m< z*r(lTYeiP!az)&*Hlsb3iGOcFi2Hj0z_j2ut<%`gW3#1lO;+nz8>9;oi_3=l=AR=c zSqoMwSN%BteMtCKC{AzxQ!D$)p^k2NDXcj>Q%VR~DpfO_yscPLXEqsJ{K5uxyCjJ5 zuM~})4U96Y*4A@rT?u*peK`z?IMf;#glbAndnQf1SM_4{6btis*On9d`@HGfL6~1K z;r-jVLKoeHm}-XyE|S|t`CxtyfASpMhZ|^zn_obYXX8rUsNp3>CBw@;mnBex3Siv( zOA^=~dj=DvLb+gZLZy_ldQ08CY*m(5d;P`_LQ-!VA2>7Keo9CuQZ%hp#pz)k+{)Eq z>Ju9~UXYYX=0H}*i@CfP#v;W^lJhd89dFOPqw#Z&4`S=@tn{Kq#_6Us;=eL9ih5Ui z6ic1qZQd3M($vzi<-JW)-V!<0lJl>#Y5Whv<5;Vb?G^;c?De_ZZj(x+B@szYxJr9T zU%N|^gRbQedHeuo2nkI=t{e59EYKWKP!CJEgV3+h_PVKt*iolL*>#dwnx!Vhi0BY# z!#~4B{*^4JW16w&1T`{EC{ifE+RdA>x5YHur$3m8>r8vKOm$(-U9a8e52XCi0PRtF zdijacG&jgfB3^wm{4xuCe#Y9T2OrP5WFn|J2KmMAc=Es59r;ThPha}6US1n=m^xkD z@7zFOBN_mB?XXo#XcaMcV)(z=9dyL0uYPJ8Xw9tP;W~ml&tmi=W~B=0ZBE#Nbc`QNBmDn$L6qBP)p)8*}j{vw#|s#QSXn$ z4b_r(YKzDg_23@SI%ascfP#~nyX}Ymp32Y;`ojK_R>tbG(=6ISORUmy$ukTr#g+ki z_U`d=hgIg4&Q(XhKY$LSA3#S!FwTGamC5QE$%Xz=%c$Z$-`*yYCF$fB zFBijw2TCq})s6Gtv-E#=$I5FbB}UN{qzJU#mwTqfv0UT}(#9s0A?h(@ws{Axen^ay zle%VgvWaC^R^OH5$VISz*KKnjJH=M1rh!_b-U)73zjfOoPz6*ey>DWfdldF6PKyV6_X72y>ZU2BV%#blmaI;INN55B`7ievu^gKVt<7-Y3? zalsp}onYrVnc4-$F}<6xs%@;&*GAmFD`pUn9_AggFNKid(&ru&!@C z8SQ4$rza!}t2zdAGD{7qKu%fX!CXj|Q}+5PQ)D1vW(Be zl=bu1w(izLtaMlJK1YG!Uq=aql?~xL1r|(Ef1wl*2$!&l+-Q30h*V!%X4wB#F zwJgJX@$XhArh0A|;pMexd-{TWC^z&@Wz1X;aZy3LOP+)9tE+9VTyC$yo>IM46GGWM zer5Z1mya8dNM&G*+oR|RQS@&dJZ~%5%iAU@sOjUblhuPrg?y_fGJNM*i*@>WopRs( z3}BG{U_Zv#I!NLcx_))GysBjbZF=YuW*P1INeg11#2JaaGE+$lBFQU>CY$q0DuwIP z>1<2YO%xq(b9FYKj?ZH&mJx5T4ON+o%#)pJWIp;=*6-(%@BbS3MYVfpVI<|{pST@t zNE$lcLwXmAkhV3rQ2Ul6v1959%{cmQreh=)A4E_otS4a%#Ub|Slr|P@;OX9l>4hs)*UYXc}v(YTJ{@a_c*7&q&dq z3M;ed63IQdMI6WBshkD3{^%U?ijXhNgU;O zduK7)?xOdyCQ%$uZ>J&%rCPE6Wa%qN7$qJF%~y@?g?W*HH26!P(Tt?C(F_uwILEK$*hsf8g1No zi6Zgt{uJ>6$%nJc!y*=e)x%aDh#jSM{StWXVOi!9@*&FgW#FMEW~QP-tFqM;8+8%u zqmpNDVfku3(UQDIkVrcwyLc*Os+Ff!qv}t_WtT?hrd}?MX=HH4Dmiuh8rsPfKGAIFCYN34DCJILbg8WOXE=ednM4B++lNSGIuUBjpj#rl+96yp@+ zk~5c=lGew*TwYdcSD}qGPxfQ@>dgtHY^7yuSB6t7pVt>KgX5Y0;{1wmFX_ zVmn%>JifR-o+~;=2agm#+3Wq(s9kZ{fqL~HiOqb9cUJOHi8nh|XhSjf7!QL@SSsDz zUD2sjDBAIMfg!965S@Fb9xgrY%hu*PwzuM4i>ROOLF=mK@2is~W3E(LEp@SSYN8~9 z*Oxxko;%FTJ1j-|gd;~vo>XUn^xB9dm` zW2&t2$1lmB96>mh-e5MVjI(XbKAyDodXtyRdf-5(fZ(5yjL&}Nh3BesO5*9Ej3+a- zeG`etW?x)0MuEp^(_Z`WpCOs4G5mK(CcOE9?WZ0SpV0EMST{kV%A4l*g{^FYFBeve z`d*PWx0Vt$V0ygx^Hq=o)Y2?^$fanm;a`cl=3fe!ow?TW7a$h&ZG;54H4y7^l@%+I^3pj*LYn zPrISZe6=$&r)Tk-vN@^sAjxg9)IpwxqI>*FNoNS_*_*jqLtd*fn5 z<$^J&(^0f|p8vjE8bcZwP8pln8hk@6$Qa&V{9m_5AZOXlH!l61@ zo`oY^q^ZSZgV(yza?07l(H9t=#KDtZe=8*X-~u^!*I#Qk6oazLq!D@)}fmf;{Ux2xuWKyN=-9-a&LA~7u9WbJP zVt3h}oK613!B!r(YR9S9TlxC2ubH|HD0hAKi%ydZ!lJN{*$Z|r6QO?`E($O!7DdC8 zPO*;b)NC2!3N2(KA*{;k7qP08to`nL;@(;y4Hmz7?_6#%pGxYsvL^fmnv?$%n)6t- z+eMFBnk#6wi(U3?8(((x>-1l+N6IC2@3YE!&NAsrBa4UBek3eQw?OjFZ?Ui4ec-T)V`8v!9 z_nxJdUKVR0HN<7kTts@iK19%pQ9fJ$CUNq+X1c;B{MX{@x|V#k)!48Vx!S`?=)l47_ogZyi|A}nkI7aC zk;Wc5y!spo<$qgRR(W&a^-`Fa^4ysVAT3EJqGl9fv`wO2bxfW`&xf7j5q&+%)`qV| z2G&)|SuKefdmPLd)sGc_=Wz;i}2!#0DbRI zV}&X-Nlp~D@F=14Hry{V5qVUvjb-Z8JMk}QX@KMG!%5b(alA8ktreac0BNL^=lN&i z4Kq8&2L6)C`f-TfP)hP%TnQ9Bk8QWww{+)*k*Ys}FVhk^+_yxATBUOG5G`jZdbMB3 z`$qasPKoA-=WDuTE&+Dd&~*V_}= zGo>$mSVE?C6nFa|?!dMIAG6rY1O|dWtFJ%%7$ayQUB<21?RJDVzScCxO~((^DTSc8 zbsujh&4=@lXB1j7k5xr`w!s{3%1>ZUpWVN~oI)ch23kuvd=t@iS4jD078#k_fpbL> zonF#G$Np!It=+q!#Zr+=qVpZkH^q!qomUx;d{_(-wV@(}3y{Tai|3O_+B-@{MRDzC zSfbnbbqitm!vnB{>uI{L{JxM#Omdl`=--x7h1rg(<|nk~9v789!b5_G=U3x7OUu9# zXP*jM7hXTN$g1RcDYaMBXEXF%p~pJs;y}o8E5?ZIjf>WbSS3BQd6vhT%?whm*p6Eg z%pRJC*!2$|(Ads%lf)PCVg)m|BI!9MDt8v6C~=BWlK3n2jI(w}4=cPJ{;cN)9Y+}) zYV8)blAq}x;(uu}k*v6rSUq?xUcSN&quONKua)>QEkzrepZ_EVS1jJNh4NeJU5@g) zCm2Eh=A>5*=TeG%tuKwtv#q|UTN+!t%SUtHwFkApUu8@$X%+mx`j~NyQ0hClSX7xH z?cm;UGA%86d48o(NgaScdjARjj7oEuS&D?N%UW2Io(BtZwtYR|t(7UO^=jDP48NvYM&>i>)+tY3c4xm(8|&wtLDVjN{a{UBU#gtdR5AInR>i(J{7AA5 zCTl8G^pIBwr>n2xL{NmGNL#|J$G}T2$0Lh!A4V20>GIVx&DL#w$9+)6)YUFFNkBkl zR#TW+eK4x_lb(+GQk@5m7;b@i607`<2YT0W&qaQ8uT2S3FWvd9IhI5i-p~g4Zr6u$ za2GR;hZkvYRaOF|JD!IxXzLR1mKb^&klH_gRe8Z{Lc$2iy42g{m?Qctx|JUYq<2z-&%BQ^z2xnu3%pUE2K-d5!hyfe)A?(VD3hhn{fGyHlWCC z3jhp~A_64;Ra4nGZ0iA}jAZH4)!#1q;3!g1|QFRS=(N4Hvb$9FXilmZY+n-Lp} zQlI+rjV;Ed;&$x)B+WtwlKvMV5IFRk~ zA2^U?hL&V&hIvQ0^#<3@@`xGHfAc_n(|`w3-Ke`Aui?2dBF`DUT&)ZBt>vX7h~CCR zVj4v)<1gxPzM(e;ps=SEalNu0vZzYiH#zc&%guGG6Rvk!spmGe|F6mJwZq4_7O|Im z&gQ&%?|#Xc_#t{Ks!Q+!l9t!)d^VekQGC*L^3b6c;oE3ce*m5WW~gl??o`@iEp+&P zfDXnr9q^a!`je()`V7-ob*f}sj~d6AD5;Bs{P@@}i9%;uP)|JbWi5oz;7q_$44>y* ze+OV!0a{|>t}X6`iyLT8&xs;5929M6a6A!Ehu7q2&m_f+F4VrUMk`%4{*VYyO24)J zv_F6zWm4B5jfgI~8;$5bIx#u4DNx+Jf%3iull{jl>i63rUk%qWETw+&hn4m2Z}>mC zZHp~`?6cF{g~H?-D#UcPE<-OTe&)!x388xr{SN-91^YL%9az#jB42PZlS(e)Qf}1+ zNO^G?BOB$kl*?PH|)^eWBBYTN6 zq#rS68{WgI)^K{dOJfTec}vB|RLd5N zjZCYjKh0fxnK%mSI{n=V>7=C;1?=!sp)_@h7q(-_IY1V=>Re?Hd#e|uAwu2DWsip< z&1FjCbJWFNBukLoY352--*^g0&IJ@JIZ5bIb?COuDA=3U@>p?7;gBaGt7g@t@fx(m z-qB?{eZiLG0jQ?6V|kk=OdHQ?9M@oKw4CJLE=NGU1)ylc7|U zb1>~%N9oJZUh!M-%YXS~v9m1dikPnMg8H_sUKn<0AQhapayMapuMSRh^}9QVzg74x zZMZgJ`n%be7zk#6|{|!UwTdTY|YBXIk=LDVFC~o&v*(+h3<3v(cPV5_va13qe6cplU|jm(kPlc3)(91pjbMEBdvDa=>x@X5+#aTR))u1*0IZ~Rfe zvsCWch8ouZcimt%dCLv?#|HZ@nFp7zah{#!>DjzEyHZ;6J}!HKe>d`BL!m!EVLfg0 zr1!U+&D3^|R7t`l&I)SfQIDPf9iMUynVpQFWVl2Si+nHa#x2v3B{_NiRM!OaKKdw*(~{}bW42uk9V51Jm8 z({=qVoI#9CY;Pq!u5H5A9d9}}8B%* zu5s;Cj0W>1$SlWA-7RelW&1OEmGaNz)vayvs-PN>SFa5IB(Hp*wmE+iZM2T^$qt+Y z;1y;dhqlO_Mt@)eEeV8#nS42jC-Z0WNqNc2LXYZ3^a`w%%x)zD@ao9V;1y4{h|+Qm zwE)98AsScsrp&NP!?kX3Lt7y7Q@EvVSDK#NQ;U4x0K%cruI}4Jxo6yW6Wd>(YmizR z!#_H=$h__ozqFAVU}fZFQ7p`1EH=?lVmvd1D5=E7v>;nyJHj# zrl+0?)zqzL`G_nK8My8eTR2Me&5;H!C69w6yBU;PJ+qn`$}qh`u)e+?75P+G&(QA{ zl`%w5Lk~HFR9Ob}HY()BG;>NF?Q-e#7TFtBtp2U*_!&U`f4}%+sdJ63;Bl+Np zBQE5cuuMNRbNXeDh+=WEMw4RJ$BoUKV)a+0KqRE8ypU!NXYuKk8y9L>RC_aLs^zqy zD|7pt@tg}EkOXAG!DC{*^DVr9u!UB|IkX`TMqwO zd+@`0^k?R$7Q`-qNU+?4)eRMU{NzkrG zc%ryn#6Re!I_fO+zG!zY^vv>-wbtlR&O?VBT4tnn9Ew}cDsww4IKL@$+b^asmlAg1 z5dC23`rIKz7qw%*7au|f9wNZwGN)R-3okhg-Y6U4GuBd2FDO>!ULQFcufMWlFLuPU zw)jG33P!xWlt2*g@qS*s7GQ{0z!?{vVd*EU!IEJA?fHptU!TEX341fw*Y-x1Mq+Rn zDRrn!)dxAg-pUVI86+>C5mn@%(PuV3d(bK9#mWEcj=G^sY@sDbuG2PO_CU;?;(hmB zv$JcTv(g^y61cGOJO8Ep-V*lBlpo4RdoSTDWKV~U6fHGd(m9!?4KLQtfBFXMqoDW4g15~Lot>95}|=EdH(%T!q! z-Lqk7rLOJw)xS5hQHZGF<#Llq^X}#@DB4)|^(aA%2d>)k7B_*St?DuCvIYCllcBynw_%iZou2chqM1tbL_+=b^K@aU z#Pb94*Ehj-o>uBozic{g&+>Mf6m_SZds$IEGm4;F?Q^<>YEgMr((rG#GT*20*9+Jc zix;=K^7dPAm^2O@%3CVF8Q1ZY_oKc-z=6)QixPcHP~UwphbRVW!fx7jtLnD5dl z4|_WR=oF#neA=(8Schr+M$%3e!0zze-JO0Rn<#TqJ#}vXv}lf)2|l@ak8ekd^B%=# z)vlr zXwd@LBY+%vIhl*OPAraN68ZItZ2-r#*X#JHQ(QHj0NQ$ff;-0$kDec{1zGjC8ki>V zdCGte0_b??fP`5s_nSL4d-4eLRTH3L*#_3GJAS2;jf@;_;d-17VO77YNjBmE_(WLl z^RmNrpKkkq#?v-q<1>sZH-WK5W7ffSqTO>SSOjogxsF3}#>&J5NkI1)X)<8({vVgm-_ppr`>G&Pt0s$5d-tJy7}_j64s7M%Pzx zKsmDwV~K+&3g|HwV^)Tm=A@g4HYXnLXSevS6KVv6#nu$A|BUhK@{Ccg)1~6@qs!lh zLYX9bY;nD2K?e>T@LcLL2NW4_`rJG!*`A?+*~Z1*KimyimaWa@N;Za?50CfnKYY5m z)R~GUtk#`wOO_2}u`3xIHsjHJx7d91C~)m$-woCTE*gM^xsA7uG>Y`|mfRrc7;Lp^ zoIG}HF4S+m>a_E>*}=_?HFw}k0`I-z!cKreGImDt=>ZK?ctXOqoQeqna5I^!VirJW@clLzu+1(#8VT&4;{T?Q(FveJtyzak;8g;^AW}*n zw7P19UCbuN{Y~ZM*V0&z~OxZL^U`jAHBn?jR;! zotH3t)o*kCkqLmg#>dCQxsg((Qfo-08elj8)fIeYs3x=@{64^3N`D*JZTRZ@b>86% ze0D=uU}`SpWg?L`T2R(xa(>FS_HscxQMvp*IOSr@(T*KV&c{- zxhvavS1-PJ@#4}q=MPs~PKU?EH3R}*SESKac6i|FsCvx;GZkZHb#?ekx_v(Zybu6Z zY}=@SJP2@`+lZis4Y#y(KXpMgzA1d`g4ETktpwDE`}MvhK|w)}DgeFchxf6vdbg73 zcTj6Kpt-sEQ823{y6_IMp*BEjr4|)@M#w{L*LLCWxytr*l~^SK{IzrEz5=3+Plv>7 zP}Y80BU@LriArL^Z6*J#++P#4(5-5O3i1L~6m`U{Z701B1<))2%s^lN0{$z2YJ#o+_$Aw@()ZS_PoSONnVli}Zfz{9OA3M( zE^y((HqZ%JM!-U@QKh$Pw;u_Z@U}P;iOZl%y{`1$x^CBV-B|es%av=_TquQ>)vtH& zXV}xz4*XdDhndxrWS&L~n#XLdNe)4VSX^^}5(I5SbnM{K0qPO-+%N0I%6>&9B`;bw zF2UpLb1#C0u5UKVC zPY6J){ooPi=jYEaEGz>{7?6j7pT0ai({w>npknqT=wfZHt>6&@64re_$_}Wp<|p>- z7>L_mkh(UpHmt8KZ0q8@SLT6TCNV9*VV?W|jKZk{+9`nR0lYQlhPQVG+jhq{v7L=` z1izG*HPcbul z0?X4QI>~5DKiw^VQu^99FxfY=amK0M77UU+-xdIKxIR#|wR*QfoSB*Vyu75SXX_I~ zJb&Qx;I49WVxdvGnYlS*al?zU3S>XPr#vM38e@f<5=F=~x_KYrqb%+0EFWUN(?Wk*@#QzqBI7ccrMr5z`b;a3F( zO}QUGzL_)W?iw6Z1c!$bUoS0ycWQ#2NmlOEmeG0J zo?QM*m(W%IuKj+?MKwd?l&P-~JdxCq5!WdqVz6TyMVt7*ku3#Y15m(GB2ggg_u-ABG<}&F4V2etyY9{c}D?D5%}OC zz_m2HAp&T@id71j_zdC`6FD5XcY>nI-1q@_JsSWQB zTL4?vxNJsUURiK*$`20@r#7t=$<}Mh_IS|G2pRB`lb;>}bQ$13vkVGWhmAItXjwo} zGcr8@`3Qk(>RKlapV*ynQ4sVoAx84b%b)kQX7( z`wF~pJy*oU(gD{9K5NBFeWjq1qSz|Ad%gEmYn$pivC4Gs-o5enIbNLm2|FB#>tO}V zqmG5n`*;Ac@mAi^(eaRz^S_d=K2n#F!96+C1k8o^>!U=f)n>JSh?n@jRu?$urzCGK zi??-lc0Q7B&(d6L?ej4s#w55bT1<(#0-&4Az2Qs4b&tDSOvch1<$U{lWZwIHo7vj~ zn&{mo>Q59RV#X1|K701;_3O?)yns=qU9eBhr%$(x8#pDsp8ETP3EB`nZknmhNN2i< z;F=747BtzM=M37(UZ!^Y_L7X1MC9k6jZRCd)4A0@5$rOs;s{UGKuG)XBN^xJNZZqI6X-9y|AKetljk2yo`T zmG>SlY*W;)x7`yz@T?!A1m&*P&nJ$sh)@sj+VNnac`19&d~(^B@3nL|_dw;ai&*w^ z<&fiD`TaAvgBU5*>kkA|Uh>2WsoK7z8`0UU$AknWiDf|(kv_7g+ea^>1^iUY5IobH z>M+wOzw@<=-#p92@2%>U;C&N|>Pb>m3!`k6>{D=1rPV70pA^1V>@rRA^Z0+LkZ9cE z|EoeG(Bs5h5>*Q6hxTZ(HV?0TORf-#{8C>kPb92&f0w^}w-5bq_UfxZ!f)>xQsO-% z60Ua0xs>g(wdM0HRk0g zh(0a+ZY*MR=^~paYQu9ZRE4X_Lq}lc?%7y++(e|oQx~ZXE$J3ppWnXz;w?~q7K98U zJhCH4RHkwwP24ALKrp;ai>&`V5t;3*qfjHL&4HJ>V+w_sr%gDfnb01(z0IL=YjgCj zmy}-r9jE*6>SI4RFMp7!rdSm+rU_bPs^Mc0Le?E&sbJ>bi3^YO)`tOe3nQkbPv<_j zRLs68XMD_`L|sX_V4I&s3 z_{xfRp$TSq0r%`QdGs|6`vMCi)R@fA#M<}50e_+fJHRLLYZz&r_9xShcwi&>VwA29 zkLn>xC-dtOmYumth>$n4zokXX9QWEU>4}0Tdk6+F*r5Qa4$ep^->r9_bFnMP`#&M% zOP?r6Z6cPo{EK%@UTw*Um{uZ9+|#kC3yJw%)`5|$(wQ?VA`;xS1J98YUha|f zzFyoz_RoDMRgSk!a`*X${S)-^zS;YlX%KxKq~37!o5WvVAQKQ6?t<`S-bD5a;EBe(~^C&O3ASsWK1G!bW-W zWC4EUE1Q?vw5EEEtJzxYs6@g^RE4vSI7Jee98HwPg=OWH~ZQO+Si}n5rwOtW` zoDhI9IIC)q=#8^XppRzb=De~+>u-?O$U>`4AkS?1eU$kheb5irLeh#woj1|(%fI5K z>6>dD3NS4&(quvesib~o?Iu*0W*KFIOrE~iyA;FQp9uxe$9RMJh}ydP z;VS`9Ee;TOK3W~f{w_Uja!x;|D@9?x?*)geU(bit1UPBNXxX(~b2*pl z0O|Uq^3^{%L5VtC+;p!JLW17xtBmwfDACj@Oju?O<)Rnvw-Wn=vM*Z;7V2yLr(<>h z(G*Zo>&v*yK4q|6=k)ygTuqKDO5g=HS20-{F@rMtOH&s& z%R5qJVp(>rBh}2bSJf$o>!NPal>l{TL{}v>(D}_pEt1${jPp5mRir@CV$=F~oTbO6 z1SXBTX;h(ydnRyGA0Irf zr4%j{khL%=^bg1155Nn5(eX78BSNW73EiyUGaU+Ju%3%eLQUG|9dn7hJ?eODQp>UWJ%j3D~unH4MTy z3yK*HQoX~QA*Trmk;i0W3cTg0UEjte#CQ6}u-kKg06bDBdB@7uHjh*iu%pj-#V0vOktz99Nu9NXt(up^^g%)R_ zwsbMpIZ$mV++^fk8f+p^s&G82gLzS}4MEdvpB_Arso45$mx_9bW&ZsDE+76vhQ2e> zMQ#`_uh0om8$-QvVOO3Bd=EdZbWHOqF@s1wbUp0Ej=HPVLs1IqO=z!gKj0q|Jm&i1 z1kT2<0`VU*n2@her3tTw$3gwWv4aQ5=ZpHHq{}Dz;lgavZ5S7+@^UylLVDa7ROgrc z!vosgm&Fg!Kw3EsI=2<%}{(W2wvPz>lMRiSMDwzjQL~a879SE);iM zTC4`!Tum5kUA5uVDodDEJnjshL%ucwicy-t~8lxsZ|M9X;d%xq5?bNi94m`wSJmV&U@B(~_D+%vF8 zey9~Zgew!~Tv(m++Qo2Bkew!+^DE8OV&hp5o46JXHcT{PM7OPEB<9s zUByj@qG?fpvdC4)_Vn|jUx4fqb7uB(JJGEs3(k1{N&aMvp>RI$KaI|L?lzbRYC}gR zPWYB1l#bef(xJA2oY0}xLyPY(3Md}GN9Pm_;T&U-9d{nA?I0rq&NL!c{uccypfeis zXc-NTRQ>e<`1k1;ED(h_0$ZJJy7JQy+k1IL_s~&`d{j7*gDe^W(4B$$huW^MQq5rHfVyyQRmgNQqF6HZ6r2DRec-7klK@`X#Z-tgURZlM9W<+BiMuGS8w%%`MH% z2W{9syVfX7ox?j;HnEjYrfb26eZF0VHrJg$Gp|Dz4R=o;cBeI204ZUU&fL;$gPV5X z5`3`dm@xhRqUte9sBl1tl7k*7!V0FbBt(j@w-)Y1PN?al>}nLj@aUQ_$kr#Krx2bd zO#!gJ^xOd&-xb8bc!ru z2V`b%fOuYiDPV0Koyx4G;o2$tm>yKrBIrhLz#$-IBs^@9zDatd$3>%I4ENghkV8A% z2Y;u2NWdVGxz9)-@}JT{RD*>UyQd}kl+hC4x96N2rm^Ck!YFzW#Y+axE_cx~4nDX# zwpAj_!V#ucx-;~CH=z!`X6JH?=<#yt*15XzNMqwx&I9}ye1s~&2R6|uID?ychkye8 z(O78_QkcmYoieEh(m)#c7~$K+)0vl`QAgX5>lNrxfl5VgKT~rn4vd|KWF|W{p~|Pb z@O;}0*Hn(y+hk`6@x_*OtN4ACFbGMeehuAwXcytQx7JK;T+6A!(iUf4e9HBL@N4z@ zOs!fxVt4x+kLjwy-|ydJt&1!@Hcl*nc$#rELfVFuSTb@z?4nc4QX0HozVI6~J=1Ii zpOpQZT9{8=hZ3TNzcCDUwUt7 z6qH_(u(f@oTjWwVSmtW&D!zFava?%w2N2?UPEUH0D15lYGI%=q)Ibm!Q~)?wTz0(g zeN93D>Kdm*3R>X#&R#i7=ACMpAH8hrO1P3H(t{SbgVZ7VgZ zla0(=(Rm`cG{<<9rn#8g^vkq*dC`IP7d~bnOcA0hf3JeXBZ!cgwU%m+St-%$*Ff7~ zfi?FZdE*9A!G*jFY%h^gEvow9Bp&fRxMQht4Y_%)c65&|Phnq(Z-X%df{*$V_?_P#VC+EffVWZhsc*{Di8&;vv|iP-NV9fF^yw;?TS zVvXFop?lQ(he(J1Lh^ne9%fY(y_;pU^G>R8re94=($&QAgGo*%|*MlJw^l=GMV~n02FMu%w_g6PZb|7N0kdFSkrC9q^h`z}rPY6NMQh_YaICZtH#EWGW|k@!GTAm5HU zpu@Nz{$h^e00Owk(3S(Cp0IM?+o{P~nmH$+pXqz^Exe8czwWu*fw$ zk>&rUZBQ&+8bi{ja0r7nmxqfLM)1?IZ%^+=S;hm@r)bpv3~l{%X4J$bCcP&NDKpXn zkmhuvCzS;PCEIflo&@@l;Ia^TAoKGc*{=UAlN6{f-l`#LCAAn6BfgcQ+3RGG+j<9HH7mgGW98Hw@g#a6YrIoL20W7hxWp3t87LA9OO9ZR=l zy(W@t(DwNpeg6RiwLX8ZdH&L#p8Phos~pcd_1sW;QZL=^z%wF%Q^C0=91=I?8c;iV zwYN3qx#f#lN^W-wr+Wt9$H0!y|0GE+C|x-XT=lt3!dC4UAaJ#SsO`&^2YB-BZnu8I zS^z>V!~yc}PX}AbJGR3cms8>ql4a8`O{ORP(WzSdQ+*9=rJABMmMMu@!J&NyzEIJk7rv?(wUVfzli8`D@?zS#y@Ysl5Ve@n>+>2BkG3N{8~L zIaj>(_oo!_7NG>KSNPy-v^O zVO#7MA;W~GR9b&!C1C=F8^*1=BNFmS&b(`QrBS8L}%qHXyBY}5fuBk`{+U|5Of_C;nbzp!yBzDoQqIP#fm(Z> zNSMt;>@R>hOE)R?h*FDLb%@|8%MxhNJsp;67JL%YvVVIK%63AtRB8~bSrV7vVVFe8 zVD)G`1Ep_(cgf~;32Myb)fvU{s}G^HQ2R$&${yl0`!wX@?jQXmr1 znP&Tjo1?91y#1mIf>~rrJw;M}>IK(y#{#RKp%II{3jQYiVXD8m25p&uxXC{Gfpf=Y zt-NNPn|r>aNs5X8Mw7-Pen*p3%LiM|qHX^hO`FdSSEE4$e{m%PyXjbfwnx6<=$a$Vh%+n-}53WQfugU3N1z)Yu;x ziIA2lM9($rm!6w23?FAx6}hYeIrGcSS3z6%PBs!k9Trw`3c3|Hg~iaGF44eK1{PVB{~Ev>$n8RgOOw zZ1N12ScfYABk(t;BBN+H74WeF+HllX5&eF@5fk}BYO8M56 z#WKk}CJ>y5YZA!+wpZS`idK%j1imp={xsu0PPuRRr0Hto8a-mz4g*b>B_?+vr01;4R45%XY!7&(u_MYc_B<-Vaseg{Ro2Dsmcs0qxZ1QcH(Tw zscI@TxuutRhk06BF{N9Cr)L;V<6?^9pH#&xj+ylGT$p8-av|>u)+gbevKmt-?vzXj z6^W{+yp!rIu0mrE#oXyw=+R|)rJ`$f+$CV`uXwHEJ_z?T%}boGJbrqwJ^bScwg#y#XXvni@V)ef5b9c#*bmCh-a6_vCx zdDz#ps-3pxL!mENHt92**N)VeeW9K^$uePAk!?`BZU z_Ziv=p$%IUVXFuing00|U8%UWHeE1RAj48E>o37BG$}y;Bc>i)uPUqvv+Vd)c&a_s zk&X6hWG(yAQ=zjw9lEE)*B{n#a)}tF;N^=9)KilCs-rCFM*3(0Bmdsn)=%T@h;!GG z;j1bLPn$^xXc|Ar15FdY?uPm{=TxCH*T@<1`%l1}UHMnkU|DBZeQmN~V^i7lhvq{P zHTk4N;_-^_hENs2qgZSP3Ed3bfZ<<(8|j-W_0xi(`Xuu!483!z^d)IQgHuME;oe!X z&(|g8`(4;n-QV*?z5a9}=GM;+w;wkYf0j@GE;9%B{=AS)*3yad=L^}Jb1hw=)!yd3 z)1h|3!B-hFWj)F}N)@ER-NE9T4s=N~&+N_!?XgfEmjr*`J4i5d@~eQ%#^;gwy%oX4 zckWMQEl#p0;~*7s_p8w2Gs+|#K1{(ce3)OS&Y7l7_zQFOARrt;tlYL*S2CM}a8&~) zbHwmML#kp6d8Pqqc(LMLHbN~=%xE42m?UVUqJZ5HEohXAoAO>-V9!c%*5>F;CeJF{ zmS|sMVsU5!OF`bD8at%fBGY_<^AcNBeTG-b*9WSGs>J4{vbG5s3eoZks?jGrqtT~8 z&&W8P@t@$}I;#c8;V)tEI?ZV7D(4j;a5&fFb?{*8#EP>jmxX_ow-S*W=tp(clkRhA9*A>I)C7ydtaiVYq2vWhkh83>^Kcaf` zdGY&9AvWzfv-^=7s6@`CGlFhPs#sy}{6!hJZsKZz#Q)$&6==49z>oTPvzOfqG`yll zJ&OOS##BRBtG7PR&VX6^qZ*5dVry}H6Z51yQ1N-M$SFZ~Gi3(wOD9T%h1Sh(zk0W^ z%}<)bJIh%^&e0RHzQlCs20=RiYB^U~xf}AM1VFW?k5|p{aZ0@tR!P zo0tk}tw(1eNy-I%v2GLi%jxnSjdqu>QvTOOOBq55d)t$F8* zc;U$cwO0w}8;c5PHgQCvwpz$Wq3ZiWam;6m>RFAwkE=K>b&|~9GY6)B8od+qfDQj^ zrnJ-_fRCZzcfbc6ywC_fw_qcCFC*Ytq@13T(e)a0iER_=&9}3OlX?v3No?d-hNSjS zF{f-pti0N7BtHK2TK-2|xu9glV)-DE*UN8`pa&uYh$usJ2BP0@3y-KuY~ddk;gGxl zr5VgXPAGBP*6h6W-_p&;B(lC(WFC2Cy^F!0*W@Bwa&V}eW0`b0gHHID5SrOnkc~~H z#v3W-uM(faJuYp(Liq*GyOuDMsTYDjCs!P=qgXTgvyY(``o|f{8`2@nnV7>i>5!bE zIq+6&tl6aE zmckKxsn(vS6;WD*VV8Az&86jBHEcz%L0GpmPb%?q*XH!pbC#B1i_Q2myVYS_zc&ir z4(i?Fa-zJr8gT44OGCN9%bAWHJ5|KS^rba;bi*gt?;kEHDtBeD9vvDpl~!GWXA`+EgGTAyBH3ZxE3H#1pDlc$-vf|?v{R%(&teys6QH&YME9B z>)$cJPH4c(N?#BE74{M&JY7`2+TA40>FM-A2gF6c$Os1}=;8!7d1@xwFMEPjP-Y;4}w zDE@!*^qiRT+%NY9@Lr9e$)cxKEhkP3^h#$wu=Dr*Pp&g2UO!v4d*{ARwam(EPnTK9 znzTFH$9zD&aOnCi=e^V67Y?n9tFFFs{d@QQ{L1J_t-r5%UaDQ=C(p;#z2#NIuQxx6 zF0FkYvi`H+L#wUE=T{$Y`@G5TMOjm6#>T@>_599X1fJO;y4E+;_~}%MOKHCV?-6-3FFDcKsFZ(hSbWjL zytk|L{d<7N4u9JA&FXZ~9izDcZ@N}3>Ac#v<#dN+=?^;~#TQ7f0Irck!zc%eB1417&X6juchQ}sVt^%GU2kD;sT?Y_P;vka{eNC ziW+I14AQ!c|B{F<)Er0PqCdG?`%M3xft+FlzLOq(Ybaz45$nYeXh{^Qg@|>i0g{d% b{j6W$^3ZtU{;#Ki;l<$T>gTe~DWM4f-mZEx literal 0 HcmV?d00001 diff --git a/docs/assets/basketball-scoreboard/hero.png b/docs/assets/basketball-scoreboard/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa34e50cd0ea056186ea6cc24540aed317ade98 GIT binary patch literal 9509 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 O58S})dbz&SCf*aNlr(YVKmA!B) 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 Y?U!Gk62!-V{& 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 ^)t?6HrL3$TCC-e zmKOzsuN&Z6E`ty_Z+t_Hwy{7rP+!K;w0L+0nuiws4Y1WqPbx=Kp}F!tP$xyT6otmL zOWkwCgeR_0#N6+#j2md?h))^`k>dp`#fkJ9W{km#YYlIc0@=`&{fSJ+{=QL=oTiLs z?r0g9WD7sV49SbZ^)W^{X`1jrv@$W@y;_k-SrR-rf>lB#H2MvdIdIaRQ>NrAhO4`> zEQ2?uC8?UIuCwu}*W8<{j!HF(uYE>6)ha_y^@u^Ijw@d24A2rN;~~h~_dY61!Y&Io z(2hjwF}pQY?&eJ_&F|n?Ez#eajNexGZS(ne8~ZkTlY!9c9we)*NaS>5Ib()e{4Zf_ zxgpyzb%YUhIs1;-w~sPWD@v=HW8RFgbZA?=qG%~FvJ{36#PnMQUc}5}S>{RT>B@gO z2Cm{#)}~0+5&A;|BL>B~`kJgce(IG@nfx+8#t<}GL9^_XoMN*xqK&>Lj%7n%B`)b^ z>CMo8n6#gOJ7h$TWYg!TmNvqN`50=OD*Y*(d1l-r@-)Fi_Ji+LTlD>HQEI{@Yupda z?lM_So=WUyDXoGkaBQSZ)Qu>FBNd{T3VP@^Sd|kqXfN!tO@+4yrXR)FRW=|PM_ZY& zM-5N$Y0c}=^l6S=jTv1{1A@xP?t1F)G0UIw|8E2H?|b7n+w09UE3g~S^;Mr3J0h;% zDd3Sw*m0|7ik8$KN&e8a|6}Sw<-`cFszB+PjB27nxT>QVZg#XJ5cQdiv28&kG0leE z46tETb6js!Ax*^?{V%d{co@x)pI2bb2+`{j&$2ZO%vWe+)f^9ayiSQ>Uv{;W&yndM zv^Az>1q^*G>u{vb84-ee($=m@Iob}a(+{QXC!Pjo9tDjF-r~Q&rK(1FIA?m zxYFiUan&AC?!R#m{->Mc^+G#Bo7qf2N2|C=QUQ8aX`*dEM^Acxu|Zc`%iu|sONnAt z!MX<4#e=&Is^^~9Jo6lHhHIh7)IPqEuhT|-aO7gT^PWCO$rqDWv$w*y2Ts5Z)LEUEQgf?)-Q4EC${Vz(u4Y0$6w=Ik;8&OCJY1RU zo(&V3lJ;;0gRs^++L4FC&L`#DF++3K*0xroZ`uFl7QQW2yFJzW?z3SgA+4%%h2~hzu1+`?8ye=$NY2YOz)6egXTwvZt4oM&ATL z&QiZ6KbBV@Sf*2OE!;nDouLr8Oy6ygwAmjXQebZ(N~BDourX^NB2z8r;#s>$ebYDd zi9+E%p3DFr#c;2#C*xvTQ#F#r$QB}Vp>jrQ?&DTC|1CoMHXr_5goY(cm=$aM`()0nvkmw1In zPWMK}x`o56&~=;enceTDtnA}H;AXp4ZIUb2JG;F~rq@#qu&ky*G2cz6TNsPtuq&+b z<+~W0P-IGvEXLm7BF}@XOn2O6U&Uy})_r9CynRM?UCz?+^aDHvG*?-d6Mo(nVsw@=r$Fm&c5>gqmS1RT_~?#!JRFUb4&1Y_rE&vtmB<4FrK+^&y^; z_vk^5_yIG0oKJj{kZYB*DzV(yEA>t#T4KpO8Da06B71k8SAfJ9Uy{jZ|6xcZRYKjz zVj8({S-?*sW-TW$DL!F7E#NkH0FJ+OILVv%+q=y;{J(j(PWK!+Kg*eQDKz2{>@jKk z3XXf-j21fTU?!*7SlK#pRBMloS6+FDbxCsfo!Az}dx}Jfdz0tTiiGc-9(n!h{*?!N zz91I-%#_JB@5haG+BE`jdD?DXzvh=cObGN87^~&-yrQyFXBL(lJ>8Z?ZI8`$Vm3Q| zxh@%1Q!d{~B-xiOYoW$+0^3^#52}KieYk+Lhg1w!>~5 z?%!MHaW|`(pHOf!x647UacsZlE5mh(?(~8?3Ax3wee!~h*OI4y-lV& zcD_r?BTiR@`y8z~*RfwRE)~9Y82lM~s{d{};e}D0RGq(SJ g(YLW(yt~OcPQ~BcS#)l4>j8i(dY7>mZ$A8g0DE|Em;e9( literal 0 HcmV?d00001 diff --git a/docs/assets/basketball-scoreboard/period-states.png b/docs/assets/basketball-scoreboard/period-states.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d45e28fd1ed292c20a3bf61238e36721803ff1 GIT binary patch literal 37075 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

BGDTo*W&c@e11yDFpzN{I?iG~s&u}; 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

eu#2Jhl8cV(?MT1<;{ zA&Ga1ua~K6&rj20QrG1&6baK&Nb`J~b?@C47Z|`=#M1)}2-3X){KQO6Q09n)tJXJG zY>GpDbDDVL)Bcv4#<3>I4n>$**pTTh$-LwYu#5;gz&y_t!M15so=c{Ha10R}L3orgS^2}~vK6M8`^lJVCFrQb`hY4q6 zu9NH??ms^1D9P^Xa)33<;u;}h5g#foMK>%xjIltjZ8;=%Yw z8VEbEjYk(M1fGDbW-TWIr+@=K?82+agwTpg|F8@rtn!E1chss)-3&ffY6d|<%{f3)Egz0~@qsM=!0U(ZeM zuh9zHgL@mt>ERja#i!I!;YJuEYA`t@))B_uvf=~`?JWmVelhf-|9YbL$zUlpcV*HI zkvUL*QS&Ysa5rXkvij@rysBd&3EAlh#k};mFNmvftMk^YeR z*;iZdgVvPTy#{~ zfQ&n)ntUU76O!*0UnuVpB)!(qW>6b2P)yRX_6z{d|I~GzBUkb^hN!{&e?Zxo$+YsK zopE%Hnv!&B0ME%yHuTj`k-X(TN*yL|b z5wJ1Fs|U=K;n>nuRttP_v{cjnitKx{^;cfVz_3!f^YrhBE$?eF=g0ANAF0f@WSXfC zEdf#k^@ITg54H&@d}2b<7;X9nZA;AU&5%{=}2y|MA-Vi z7PuNYfrWXv2Jd4E!y#WDv9c%9!c)4h`Z#Z4Jko)r-$>_+u7j{UjS zmG}@tG(&LC;(FK{0@;*uNKH*m9OA& zT_u`Z$?1NgjL$t(ZE)miSf84rB&6^~ASZk6NBlX7xsPR9=(MM2S=yC&alwUmBWtaVc&=U@p^PR_x_KW)||DG!^d>FAT2}au=qM?t*gfX`iC7K))Nde<|$rGAZr- zxx_kIopkR)OzL5}unf+2fqo?Bk5}w{n#;({XROY1aIK$T`RnZ*zkXauBIm?9l@1DC zwS9Cq1r8#bUj<+4Jl8Qe|F{qH!vzEG_F9fF!5La!sBnC+vRP+(k+>^MrlgpZ)D*{w zAc323DNNbjXZ?9FG97oHi#Zr%R}xe>IBQQbdwgCfv~>nsztjd{e(pW+flbdyNyE?@ zc6x-0VdHMrr(Mh$GCSQHb?O%1)B~q-ARa{)mFeZ>Kl=KV2QiMnKo|T;-_?UVo4l(Q zjz)HEJ%Je5KKNE|^IPh7(Hhu8{?PCCWf(k;y}R0q@7VdjsARXJ|5C|+QTs){&*hu5 z4VVp$ynDV=`af%%qPj1x1qxIdN8(R@LLW3!GZ2%uotUew%fZzU3ZDn}hJFm4OJVb6 z#Kvuww*P3cpO5=5k&HEqe~TTUwm-?qdBuzPu=?NrVQ4.display_modes._display_mode`. -#### WNBA Configuration +> **The mode toggles are named `show_live`, `show_recent`, `show_upcoming`**, +> not `live` / `recent` / `upcoming` as in the hockey and lacrosse scoreboards. +> A `display_modes` block copied from one of those silently leaves every mode at +> its default. -```json -{ - "wnba": { - "enabled": true, - "favorite_teams": ["LVA", "NYL", "CHI"], - "display_modes": { - "show_live": true, - "show_recent": true, - "show_upcoming": true - }, - "live_priority": true, - "live_game_duration": 20, - "live_update_interval": 30, - "update_interval_seconds": 3600, - "game_limits": { - "recent_games_to_show": 1, - "upcoming_games_to_show": 1 - }, - "display_options": { - "show_records": false, - "show_ranking": false, - "show_odds": true - }, - "filtering": { - "show_favorite_teams_only": true, - "show_all_live": false - } - } -} -``` +The rotation follows the order in `manifest.json` — `nba_recent`, +`nba_upcoming`, `nba_live`, then the same three for `wnba`, `ncaam`, and +`ncaaw`. Reorder them there to change the sequence. A league or mode disabled in +the config makes the plugin return `False` for that mode and the controller +skips it, so the rotation closes up around it. -**Configuration Options:** Same as NBA (see NBA Configuration section above for detailed descriptions). +## The four leagues -## Display Modes +Each league has its own managers, its own favorites, and its own config block. +The blocks are near-identical; only two defaults differ, plus one extra section: -The plugin registers granular display modes per league. Each league has three modes: +| Key | NBA | WNBA | NCAA M | NCAA W | +|---|---|---|---|---| +| `.enabled` | `true` | `false` | `false` | `false` | +| `.display_options.show_ranking` | `false` | `false` | `true` | `true` | -### NBA Modes -- **nba_live**: Shows currently active NBA games -- **nba_recent**: Shows recently completed NBA games -- **nba_upcoming**: Shows scheduled upcoming NBA games +Rankings default on for the college leagues because, as the schema puts it, +they matter a great deal there. -### WNBA Modes -- **wnba_live**: Shows currently active WNBA games -- **wnba_recent**: Shows recently completed WNBA games -- **wnba_upcoming**: Shows scheduled upcoming WNBA games +**The two NCAA blocks additionally carry a `march_madness` section** that the +NBA and WNBA blocks do not have. Everything else under +[Per-league settings](#per-league-settings) is identical across all four, with +the prefix `nba.`, `wnba.`, `ncaam.`, or `ncaaw.`. -### NCAA Men's Basketball Modes -- **ncaam_live**: Shows currently active NCAA Men's games -- **ncaam_recent**: Shows recently completed NCAA Men's games -- **ncaam_upcoming**: Shows scheduled upcoming NCAA Men's games +## March Madness -### NCAA Women's Basketball Modes -- **ncaaw_live**: Shows currently active NCAA Women's games -- **ncaaw_recent**: Shows recently completed NCAA Women's games -- **ncaaw_upcoming**: Shows scheduled upcoming NCAA Women's games +During the NCAA tournament the college cards change: seeds replace AP rankings, +and the round — optionally with the bracket region — replaces the "Next Game" +header. -### Live Priority Mode +![Seeds, round and region](../../docs/assets/basketball-scoreboard/march-madness.png) -When `live_priority` is enabled for a league, live games will: -- Interrupt the normal mode rotation -- Be displayed immediately when available -- Take priority over other plugin modes -- Only show if there are actual live games available +| Key | Type | Default | What it does | +|---|---|---|---| +| `.march_madness.tournament_mode` | boolean | unset | Show **all** tournament games regardless of favorite teams. Left unset, the plugin turns this on automatically during the tournament window and off outside it. | +| `.march_madness.show_seeds` | boolean | `true` | Draw tournament seeds (1–16) in place of AP rankings for tournament games. | +| `.march_madness.show_round` | boolean | `true` | Draw the round abbreviation — `R64`, `R32`, `S16`, `E8`, `F4`, `NCG` — in the status area. | +| `.march_madness.show_region` | boolean | `false` | Append the bracket region (`E`, `W`, `S`, `MW`) after the round. | +| `.march_madness.tournament_games_limit` | 1–32 | `10` | Cap on non-favorite tournament games in the Recent and Upcoming pools. | -This feature allows you to never miss live action - when a game goes live, it will automatically be shown on the display, even if other content was scheduled. +All five are **Advanced**, and all five exist only under `ncaam` and `ncaaw`. -## Team Abbreviations +The round and region replace the **"Next Game"** header, so they appear on the +Upcoming card; seeds are drawn wherever records would be, on any tournament +card. The label text comes from the feed — the abbreviations above are what +ESPN publishes. -### NBA Teams -Common abbreviations: LAL, BOS, GSW, MIL, PHI, DEN, MIA, BKN, ATL, CHA, NYK, IND, DET, TOR, CHI, CLE, ORL, WAS, HOU, SAS, MIN, POR, SAC, LAC, MEM, DAL, PHX, UTA, OKC, NOP +## How games are chosen -### NCAA Men's Basketball Teams -Common abbreviations: DUKE, UNC, KANSAS, KENTUCKY, UCLA, ARIZONA, GONZAGA, BAYLOR, VILLANOVA, MICHIGAN, OHIOST, FLORIDA, WISCONSIN, MARYLAND, VIRGINIA, LOUISVILLE, SYRACUSE, INDIANA, PURDUE, IOWA +**`upcoming_games_to_show` is not "how many cards you see".** It is the size of +a *pool*. The panel cycles through that pool one card at a time and keeps its +place between visits, so a pool of 3 means the board rotates through the same 3 +games until the schedule moves on. A bigger number gives you a *longer lap*, so +any one game comes round **less** often. -### NCAA Women's Basketball Teams -Common abbreviations: UCONN, SCAR (South Carolina), STAN (Stanford), BAYLOR, LOUISVILLE, OREGON, MISSST (Mississippi State), NDAME (Notre Dame), DUKE, MARYLAND, UCLA, ARIZONA, OREGONST (Oregon State), FLORIDA, TENNESSEE, TEXAS, OKLAHOMA, IOWA +Which regime you are in depends on that league's `favorite_teams` and +`filtering.show_favorite_teams_only`: -### WNBA Teams -Common abbreviations: LVA (Las Vegas Aces), NYL (New York Liberty), CHI (Chicago Sky), CONN (Connecticut Sun), DAL (Dallas Wings), ATL (Atlanta Dream), IND (Indiana Fever), MIN (Minnesota Lynx), PHX (Phoenix Mercury), SEA (Seattle Storm), WAS (Washington Mystics), LAC (Los Angeles Sparks) +| `favorite_teams` | `show_favorite_teams_only` | What you get | +|---|---|---| +| empty | either | The next N games league-wide, chronologically. Every game is a non-favorite game, so the `other_*` filters apply to all of them. | +| set | **on** (default) | Only your teams. The limit is a budget **per team** — `2` with three favorites is up to six games. | +| set | **off** | **Your teams first, then other games to fill.** Both limits are **totals**. | -## Background Service +### The selection settings -The plugin uses background data fetching for efficient API calls: +Per league, under `game_limits`, all **Advanced**: -- Requests timeout after 30 seconds (configurable via `background_service.request_timeout`) -- Up to 3 retries for failed requests (configurable via `background_service.max_retries`) -- Priority level 2 (medium priority, configurable via `background_service.priority`) +| Option | Default | Description | +|---|---|---| +| `recent_games_to_show` | `1` | Pool size for finished games. | +| `upcoming_games_to_show` | `1` | The same for scheduled games. | +| `other_recent_games_to_show` | `1` | How many **non-favorite** finished games to add. `0` gives favorites only. | +| `other_upcoming_games_to_show` | `1` | The same for scheduled games. | +| `other_rotation_interval_seconds` | `1800` | How often the non-favorite slice advances. `0` pins it. | +| `other_games_min_quality` | `ranked` | Which non-favorite games qualify: `any` or `ranked`. | +| `other_games_divisions` | `["fbs"]` | Which divisions non-favorite games may come from. | -Configure in `background_service`: -```json -{ - "background_service": { - "request_timeout": 30, - "max_retries": 3, - "priority": 2 - } -} -``` +**Your favorite teams are never filtered by the last two.** Those settings only +decide what fills the *remaining* slots. -## Data Source +> `other_games_min_quality` works in the two **college** leagues, which have a +> national poll to rank against; in the NBA and WNBA there is no poll, so every +> game passes and the setting costs nothing. `other_games_divisions` is inert in +> all four — FBS/FCS is a college *football* taxonomy and no lookup is +> attempted. The schema's help text for `other_games_min_quality` also mentions +> a `broadcast` option the enum does not offer; it was retired. -Game data is fetched from ESPN's public API endpoints for all supported basketball leagues. +Within the other-games pool the better matchup leads and each team appears once, +ordered by the best poll position of either side with ties falling back to +tip-off order. A league with no poll keeps chronological order. Your favorite +teams are ordered by when they play, not by rank. -### NCAA Basketball Season Data +### Variety comes from turnover -**Important**: For NCAA Men's and Women's Basketball, full season data is only fetched for teams in your `favorite_teams` list: +Rather than widening the pool, the non-favorite slice **moves**: the window +advances by its own width every `other_rotation_interval_seconds`, so +consecutive windows do not overlap and the board works through the schedule +instead of resampling the front of it. Your favorites are not rotated. -- **Live Mode**: Shows all current/live games (not limited to favorite teams) -- **Recent/Upcoming Modes**: Only displays games from your favorite teams' full season schedules -- **No Favorite Teams**: If no favorite teams are configured, Recent/Upcoming modes will only show games from the current scoreboard (limited data) +Both filters **fail open**: if the data behind them cannot be fetched, the game +is allowed through. They fail open a second time as a set — if the filters +between them leave nothing at all, the unfiltered list is used instead. Setting +`other_upcoming_games_to_show` or `other_recent_games_to_show` to `0` is the one +way to ask for an empty slate, and that is honoured. -This approach works around ESPN API limitations that prevent fetching full season schedules via date ranges for college basketball. The plugin uses team-specific schedule endpoints (`/teams/{id}/schedule`) to get complete season data for each favorite team. +### Live rotation -**NBA and WNBA**: These leagues support date range queries, so full season data is available regardless of favorite teams configuration. +When several games are live at once the rotation is weighted: a game involving +one of your teams gets `filtering.favorite_live_boost` turns for every one turn +other live games get, and is queued first whenever the rotation refreshes. It +never interrupts a game already on screen. Set it to `1` for even rotation, and +note it is independent of `live_priority`, which controls whether live games +preempt the recent/upcoming rotation at all. -## Dependencies +A live game the API stops reporting for `stale_game_timeout` seconds is dropped, +so an abandoned game does not sit on the board forever. -This plugin requires the main LEDMatrix installation and inherits functionality from the Basketball base classes. +### Shorter dwell for non-favorite live games -## Installation +`non_favorite_live_game_duration` (0–120, default `0` = off) gives live games +involving **none** of your teams a shorter turn. It only takes effect when +favorite teams are configured **and** non-favorite live games are being shown — +`filtering.show_favorite_teams_only` off, or `filtering.show_all_live` on: -The easiest way is the Plugin Store in the LEDMatrix web UI: +| Favorites set? | Non-favorite games shown? | Game has a favorite? | Duration used | +|---|---|---|---| +| No | — | — | `live_game_duration` | +| Yes | No | favorite | `live_game_duration` | +| Yes | Yes | favorite | `live_game_duration` | +| Yes | Yes | none | `non_favorite_live_game_duration`, when above `0` | -1. Open `http://your-pi-ip:5000` -2. Open the **Plugin Manager** tab -3. Find **Basketball Scoreboard** in the **Plugin Store** section and - click **Install** -4. Open the plugin's tab in the second nav row to configure favorite - teams and per-league preferences +### Excluding teams -Manual install: copy this directory into your LEDMatrix -`plugins_directory` (default `plugin-repos/`) and restart the display -service. +`exclude_teams` hides teams from **both** the live rotation and the recent/final +scores — useful when you plan to watch a game delayed. It uses the same +abbreviations as `favorite_teams` and always wins when a team appears in both +lists. -## Game Limits Behavior +## NCAA season data -The `game_limits` configuration behaves differently based on whether favorite teams are configured: +**For the two college leagues, full season data is only fetched for teams in +`favorite_teams`.** ESPN does not support date-range queries for college +basketball schedules, so the plugin uses the per-team endpoint +(`/teams/{id}/schedule`) for each favorite instead. -### With Favorite Teams -- `recent_games_to_show`: Number of recent games **per team** - - Example: `1` with 2 favorite teams = up to 2 games total (1 per team) - - Example: `2` with 3 favorite teams = up to 6 games total (2 per team) -- `upcoming_games_to_show`: Number of upcoming games **per team** - - Example: `1` with 2 favorite teams = up to 2 games total (1 per team) - - Example: `3` with 2 favorite teams = up to 6 games total (3 per team) +| Mode | With favorites | Without favorites | +|---|---|---| +| Live | All current games | All current games | +| Recent / Upcoming | Each favorite's full season | Only what the current scoreboard returns, which is a narrow window | -### Without Favorite Teams -- `recent_games_to_show`: Total number of most recent games to show - - Example: `5` = show the 5 most recent games total -- `upcoming_games_to_show`: Total number of next upcoming games to show - - Example: `1` = show only the next 1 game total +**The NBA and WNBA are unaffected** — both support date-range queries, so full +season data is available whether or not favorites are set. -## Filtering Options +## Panel sizes -The `filtering` section controls which games are displayed: +![Live card at four panel sizes](../../docs/assets/basketball-scoreboard/panel-sizes.png) -- `show_favorite_teams_only` (default: true): When enabled, only shows games involving your favorite teams. When disabled, shows all games. -- `show_all_live` (default: false): When enabled, shows all live games regardless of favorite teams setting. This is useful if you want to see all live action even if you only have favorite teams configured for recent/upcoming modes. -- `favorite_live_boost` (default: 2, range 1-5): With both filters above off (or `show_all_live` on), all live games rotate evenly by default. This setting gives your favorite's live game extra turns in that rotation — it's always queued first whenever the live list refreshes, and gets `favorite_live_boost` turns for every 1 turn other live games get. Set to `1` for perfectly even rotation (no boost). Has no effect if you don't have `favorite_teams` configured, or if your favorite isn't currently live. +The plugin passes the render-safety harness on all eight supported sizes. At +64x32 the two crests and the centre column share very little room; 128x32 or +wider is a much better fit. -**Note**: For live mode, if `show_all_live` is true, all live games will be shown. If false and `show_favorite_teams_only` is true, only live games involving favorite teams will be shown. If both are off, all live games are shown and rotate evenly, with `favorite_live_boost` giving your favorite's game precedence whenever it's playing. +## Settings reference -### Shorter dwell for non-favorite live games +Settings marked **Advanced** sit behind the *Advanced* toggle in the web UI. +Defaults are the schema defaults, which is what the web UI writes. + +### Plugin level + +| Key | Type | Default | What it does | +|---|---|---|---| +| `enabled` | boolean | `true` | Master on/off switch for the whole plugin. | +| `display_duration` | 5–300 s | `30` | How long the display controller shows this plugin's mode before rotating to the next plugin. | +| `game_display_duration` | 3–60 s | `15` | **Advanced.** Per-game time within a mode, where the league does not override it. | +| `update_interval` | 30–86400 s | `3600` | **Advanced.** Base data refresh cadence. | +| `timezone` | string | `""` | **Advanced.** IANA zone for tip-off times, e.g. `America/Chicago`. Blank follows the LEDMatrix global timezone, then the host system's, then UTC. | +| `schedule_lookback_days` | 1–60 | `14` | **Advanced.** How far back to fetch for the Recent screens. | +| `schedule_lookahead_days` | 1–60 | `7` | **Advanced.** How far ahead to fetch for Upcoming. A game beyond this horizon is never fetched. | +| `no_data_interval_seconds` | 5–86400 s | `300` | **Advanced.** Wait between live checks when nothing is live. Backs off further the longer nothing is found. | +| `live_idle_max_interval_seconds` | 5–86400 s | `900` | **Advanced.** Ceiling for that back-off. Useful out of season. | + +### Background service + +All **Advanced**; the defaults suit a Pi and rarely want changing. + +| Key | Type | Default | What it does | +|---|---|---|---| +| `background_service.request_timeout` | 1–300 s | `30` | API call timeout. | +| `background_service.max_retries` | 0–10 | `3` | Retries for a failed request. | +| `background_service.priority` | 1–5 | `2` | Request priority; 1 is highest. | + +## Per-league settings + +Every table below exists four times — under `nba`, `wnba`, `ncaam`, and +`ncaaw` — with the same keys and defaults, except the two noted in +[The four leagues](#the-four-leagues) and the `march_madness` block, which the +NBA and WNBA do not have. `` stands for any of them. + +### Teams and priority + +| Key | Type | Default | What it does | +|---|---|---|---| +| `.enabled` | boolean | `true` for `nba`, `false` for the rest | Build this league's managers at all. | +| `.favorite_teams` | array | `[]` | Teams to prioritise, by abbreviation. | +| `.exclude_teams` | array | `[]` | **Advanced.** Teams to always hide, from the live rotation and from finals alike. Takes precedence over `favorite_teams` and `show_all_live`. | +| `.live_priority` | boolean | `true` | Let this league's live games interrupt the rotation and display immediately. | + +### Display modes + +| Key | Type | Default | +|---|---|---| +| `.display_modes.show_live` | boolean | `true` | +| `.display_modes.show_recent` | boolean | `true` | +| `.display_modes.show_upcoming` | boolean | `true` | +| `.display_modes.live_display_mode` | `switch` \| `scroll` | `switch` (**Advanced**) | +| `.display_modes.recent_display_mode` | `switch` \| `scroll` | `switch` (**Advanced**) | +| `.display_modes.upcoming_display_mode` | `switch` \| `scroll` | `switch` (**Advanced**) | + +### Filtering + +| Key | Type | Default | What it does | +|---|---|---|---| +| `.filtering.show_favorite_teams_only` | boolean | `true` | Show only your teams' games. | +| `.filtering.show_all_live` | boolean | `false` | Show every live game regardless of favorites. `exclude_teams` still applies. | +| `.filtering.favorite_live_boost` | 1–5 | `2` | **Advanced.** Turns a favorite's live game gets per one turn for other live games. `1` is even rotation. | + +### Game limits + +All **Advanced**. See [The selection settings](#the-selection-settings). + +| Key | Type | Default | +|---|---|---| +| `.game_limits.recent_games_to_show` | 1–25 | `1` | +| `.game_limits.upcoming_games_to_show` | 1–25 | `1` | +| `.game_limits.other_recent_games_to_show` | 0–20 | `1` | +| `.game_limits.other_upcoming_games_to_show` | 0–20 | `1` | +| `.game_limits.other_rotation_interval_seconds` | 0–86400 s | `1800` | +| `.game_limits.other_games_min_quality` | `any` \| `ranked` | `ranked` | +| `.game_limits.other_games_divisions` | array | `["fbs"]` | + +### Durations + +All **Advanced**. + +| Key | Type | Default | What it does | +|---|---|---|---| +| `.live_game_duration` | 10–120 s | `20` | Per-game time for live games. Applies to games with a favorite when a non-favorite duration is set. | +| `.non_favorite_live_game_duration` | 0–120 s | `0` | Shorter turn for live games with no favorite. `0` means use `live_game_duration` for everything. | +| `.display_durations.base` | 1–120 s | `15` | Fallback per-game time. | +| `.display_durations.live` | 1–120 s | `20` | Per-game time for live games. | +| `.display_durations.recent` | 1–120 s | `15` | Per-game time on the Recent screen. | +| `.display_durations.upcoming` | 1–120 s | `15` | Per-game time on the Upcoming screen. | -`non_favorite_live_game_duration` (0-120, default 0 = off) gives live games that -involve **none** of your favorite teams a shorter on-screen turn than your -favorites. For example `live_game_duration: 30` with -`non_favorite_live_game_duration: 5` shows your teams for 30s each while everyone -else's games flash by in 5s. +### Update intervals -This **only takes effect** when favorite teams are configured **and** -non-favorite live games are being shown — `show_favorite_teams_only` off, or -`show_all_live` on (otherwise non-favorite games are never on screen to -shorten). Leave it at `0` to display every live game for `live_game_duration`. +All **Advanced**. -| Favorite teams set? | Non-favorite games shown? | Live game has a favorite? | Duration used | +| Key | Type | Default | What it does | |---|---|---|---| -| No | — | — | `live_game_duration` (unchanged) | -| Yes | No (`show_favorite_teams_only` on, `show_all_live` off) | favorite | `live_game_duration` | -| Yes | Yes (`show_favorite_teams_only` off, or `show_all_live` on) | favorite | `live_game_duration` | -| Yes | Yes (`show_favorite_teams_only` off, or `show_all_live` on) | none | `non_favorite_live_game_duration` (when > 0) | +| `.update_interval_seconds` | 30–86400 s | `3600` | This league's base fetch cadence. | +| `.live_update_interval` | 5–300 s | `30` | How often live game data refreshes. | +| `.recent_update_interval` | 60–86400 s | `3600` | How often the finished-games list is rebuilt. This also sets how soon a game that has just ended can appear — lower it if you want results sooner. | +| `.upcoming_update_interval` | 60–86400 s | `3600` | How often the upcoming-games list is rebuilt. Selection and the non-favorite rotation both run on the display side, so this governs only the fetch. | +| `.stale_game_timeout` | 60–3600 s | `300` | Drop a live game the API has stopped updating. | + +### Display options + +| Key | Type | Default | What it does | +|---|---|---|---| +| `.display_options.show_records` | boolean | `false` | Draw win-loss records in the bottom corners. | +| `.display_options.show_ranking` | boolean | `false` NBA/WNBA, `true` college | Draw poll rank badges. Replaced by seeds on tournament cards when `march_madness.show_seeds` is on. | +| `.display_options.show_odds` | boolean | `true` | Draw betting odds. | + +![show_records on and off](../../docs/assets/basketball-scoreboard/show-records.png) + +### Mode durations -## Excluding Teams (Spoiler Protection) +How long the *whole mode* holds the board before the core rotates on. `null` +uses the dynamic calculation. Both **Advanced**, and read by the LEDMatrix core +rather than by this plugin, which is why they do not appear in the plugin's own +source. -`exclude_teams` (per league, same format as `favorite_teams`, e.g. `["LAL"]`) hides specific teams from both the live rotation and Recent/Final scores — handy if you're planning to watch a game delayed and don't want the result spoiled. Exclusion always wins: if a team appears in both `favorite_teams` and `exclude_teams`, it's excluded. Upcoming/schedule listings are unaffected since they carry no result to spoil. +| Key | Type | Default | +|---|---|---| +| `.mode_durations.recent_mode_duration` | 10–600 s or `null` | `null` | +| `.mode_durations.upcoming_mode_duration` | 10–600 s or `null` | `null` | + +> There is **no `live_mode_duration`** here, unlike the football, hockey and +> lacrosse scoreboards. Live mode's total is governed by dynamic duration or by +> `display_durations.live` per game. + +### Dynamic duration + +Sizes each mode's total time from how much there is to show. All **Advanced**. + +| Key | Type | Default | +|---|---|---| +| `.dynamic_duration.enabled` | boolean | `false` | +| `.dynamic_duration.max_duration_seconds` | 60–600 s | — | +| `.dynamic_duration.modes.live.enabled` | boolean | `false` | +| `.dynamic_duration.modes.live.max_duration_seconds` | 60–600 s | — | +| `.dynamic_duration.modes.recent.enabled` | boolean | `false` | +| `.dynamic_duration.modes.recent.max_duration_seconds` | 60–600 s | — | +| `.dynamic_duration.modes.upcoming.enabled` | boolean | `false` | +| `.dynamic_duration.modes.upcoming.max_duration_seconds` | 60–600 s | — | + +### Scroll settings + +All **Advanced**, and per league. + +| Key | Type | Default | What it does | +|---|---|---|---| +| `.scroll_settings.scroll_speed` | 1.0–200.0 px/s | `50.0` | Higher scrolls faster. | +| `.scroll_settings.scroll_delay` | 0.001–0.1 s | `0.01` | Frame delay; `0.01` is 100 FPS. Lower is smoother. | +| `.scroll_settings.gap_between_games` | 8–128 px | `48` | Gap between game cards. | +| `.scroll_settings.show_league_separators` | boolean | `true` | Draw league icons between leagues. | +| `.scroll_settings.dynamic_duration` | boolean | `true` | Size the scroll duration from the content width. | +| `.scroll_settings.game_card_width` | 32–512 px | `128` | Card width. Lower it on a multi-panel chain to fit more games on screen at once. | + +## Matchup separator and the upcoming card middle + +The **Matchup Card Layout** section (`scroll_card`) controls what sits between +the two crests before a game starts, and how the date and time are written. +Plugin-wide, not per league. + +| Setting | Key | Default | What it does | +|---|---|---|---| +| Matchup Separator | `scroll_card.vs_text` | `VS` | Text between the teams: `VS`, `@`, `at`, `v`. The away side is always on the left, so `@` and `at` read as "away at home". Blank draws nothing. | +| Middle of an Upcoming Card | `scroll_card.upcoming_center` | `vs` | Scroll and Vegas cards: `vs`, `date_time`, or `none`. | +| Middle of a Full-Screen Upcoming Scoreboard | `scroll_card.switch_upcoming_center` | `date_time` | The same choice for the full-screen scoreboard, plus `inherit` to follow the row above. | +| Date Format | `scroll_card.date_format` | `abbrev` | Scroll and Vegas cards: `Sep 19`, `9/19`, `19 Sep`, `19/9`, or `Fri Sep 19`. | +| Full-Screen Date Format | `scroll_card.switch_date_format` | `numeric` | **Advanced.** The same for the full-screen scoreboard, plus `inherit`. It has its own default because the two displays disagree about what is normal. | +| Time Format | `scroll_card.time_format` | `12h` | 12- or 24-hour clock. | +| Show Date / Show Time | `scroll_card.show_date`, `scroll_card.show_time` | `true` | Drop either line. | +| Swap Date and Time | `scroll_card.swap_date_time` | `false` | Flip the two lines. Each display starts from its own order, so this flips rather than forces. | + +The centre-gap settings size the scroll and Vegas card's middle strip only — the +full-screen scoreboard pins its crests to the panel edges and is unaffected. + +| Key | Type | Default | What it does | +|---|---|---|---| +| `scroll_card.center_gap` | 0–64 px | unset | Pixels kept clear down the middle. Unset scales with card width; `0` restores edge-to-edge logos. | +| `scroll_card.center_gap_ratio` | 0.0–0.6 | `0.28` | **Advanced.** Fraction of card width used when the gap is not pinned. | +| `scroll_card.center_gap_min` | 0–64 px | `22` | **Advanced.** Floor for the scaled gap. | +| `scroll_card.center_gap_max` | 0–96 px | `40` | **Advanced.** Ceiling for the scaled gap. | + +## Fonts, colours and layout + +Seven text elements, each with `font`, `font_size`, and `text_color`, under +`customization.`. All **Advanced**. + +| Element | Default font | Default size | Draws | +|---|---|---|---| +| `score_text` | `PressStart2P-Regular.ttf` | `10` | The score, and the matchup separator on an upcoming card | +| `period_text` | `PressStart2P-Regular.ttf` | `8` | The quarter, and the date/time on an upcoming scoreboard | +| `team_name` | `PressStart2P-Regular.ttf` | `8` | Team names and abbreviations | +| `status_text` | `4x6-font.ttf` | `6` | Status lines such as "Next Game" and the tournament round | +| `detail_text` | `4x6-font.ttf` | `6` | Small detail lines | +| `rank_text` | `PressStart2P-Regular.ttf` | `10` | Rank badges and tournament seeds | +| `odds_text` | `4x6-font.ttf` | `6` | Betting odds (defaults to green, `[0, 255, 0]`) | + +Colours are `[r, g, b]` or `"#RRGGBB"`. Every default is white except +`odds_text`. Odds sizes snap to the face's pixel grid to stay crisp: +`4x6-font.ttf` to 7, 14, 21; press_start to 8, 16. Every +`customization.` object sets `additionalProperties: false`. ```json { - "nba": { - "exclude_teams": ["LAL"], - "filtering": { - "favorite_live_boost": 3 - } + "customization": { + "score_text": { "text_color": [255, 200, 0] }, + "status_text": { "text_color": "#00A0FF" } } } ``` -## Favorite Team Result Colors +### Layout offsets + +Nudge any element in pixels. All default to `0`, all **Advanced**, all under +`customization.layout.`, and all set `additionalProperties: false`. + +| Element | Keys | Measured from | +|---|---|---| +| `home_logo`, `away_logo` | `x_offset`, `y_offset` | Default logo position | +| `score` | `x_offset`, `y_offset` | Panel centre | +| `status_text` | `x_offset`, `y_offset` | Centre horizontally, top vertically | +| `date` | `x_offset`, `y_offset` | Centre horizontally, default position vertically | +| `time` | `x_offset`, `y_offset` | Centre horizontally, the date's position vertically | +| `records` | `away_x_offset`, `home_x_offset`, `y_offset` | Away from the left, home from the right, both from the bottom | +| `odds` | `x_offset`, `y_offset` | Default odds position | + +## Favorite team result colours A run of games against the same opponent is hard to read at a glance: in scroll -and Vegas mode the same two logos go past several times and only the digits -change. Turn on **Customization -> Favorite Team Result Colors** to color a -finished game's score by how your favorite team did - green for a win, red for -a loss. +and Vegas mode the same two crests go past several times and only the digits +change. Turn this on to colour a finished game's score by how your team did. + +| Key | Type | Default | +|---|---|---| +| `customization.favorite_result_colors.enabled` | boolean | `false` | +| `customization.favorite_result_colors.win_color` | `[r, g, b]` | `[0, 255, 0]` | +| `customization.favorite_result_colors.loss_color` | `[r, g, b]` | `[255, 0, 0]` | +| `customization.favorite_result_colors.tie_color` | `[r, g, b]` | `[255, 200, 0]` | ```json { @@ -407,55 +508,19 @@ a loss. } ``` -- Off by default. Until you enable it the score keeps exactly the color it has - today. -- Only finished games are colored. Live and upcoming cards are untouched. -- A game needs exactly one favorite team. If neither side is a favorite, or both - are, the score keeps its normal color. -- Applies to both the one-game-at-a-time switch view and the scroll/Vegas - ticker. -- The three colors are Advanced settings; leave them alone for the defaults - above. +- Only finished games are coloured; live and upcoming cards are untouched. +- A game needs **exactly one** favorite team. Neither side or both, and the score + keeps its normal colour. +- The three colours are Advanced settings. -## Troubleshooting - -- **Start times look like UTC** (a 6:45pm Central start showing as 11:45PM): - the plugin couldn't read your global timezone. Set `timezone` under the - plugin's Advanced Settings to your IANA zone, e.g. `America/Chicago`. -- **No games showing**: - - Check if leagues are enabled in configuration - - Verify API endpoints are accessible - - Check if favorite teams are configured (required for NCAA recent/upcoming modes) - - Review filtering settings - may be filtering out all games - -- **Missing team logos**: Ensure team logo files exist in your `assets/sports/` directory - -- **Slow updates**: - - Adjust `update_interval_seconds` in league configuration - - Adjust `live_update_interval` for live games - - Check network connectivity and API response times - -- **API errors**: - - Check your internet connection - - Verify ESPN API availability - - Review logs for specific error messages - - Check if rate limiting is occurring - -- **Live games not interrupting**: - - Verify `live_priority` is enabled for the league - - Check that there are actual live games available - - Review `has_live_content()` logs to see if live content is detected - -- **Too many/few games showing**: - - Adjust `game_limits.recent_games_to_show` and `game_limits.upcoming_games_to_show` - - Remember: with favorite teams, these are per-team limits - - Without favorite teams, these are total game limits +This tint is applied by the LEDMatrix core rather than by the plugin, which is +why the keys do not appear in this plugin's source. ## Vegas ticker: seeing live games more often -By default a live game **takes over** the display: the Vegas ticker stops and -this scoreboard shows full screen until the game ends. If you would rather keep -the marquee scrolling and still see scores, set this in the core config: +By default a live game **takes over** the display. To keep the marquee scrolling +and still see scores, set this in the **core** config — not in this plugin's +settings: ```json { @@ -470,134 +535,90 @@ the marquee scrolling and still see scores, set this in the core config: ``` The ticker is otherwise a strict round robin — every plugin appears once per -cycle — so with a dozen plugins enabled a score comes round once a lap. These -weights let this plugin claim several slots per cycle, spaced evenly through -it rather than bunched together. - -`live_weight` applies whenever this scoreboard has a live game. -`favorite_live_weight` applies when one of your `favorite_teams` is playing, so -your team's game comes round more often than other live games. That distinction +cycle. These weights let this plugin claim several slots per cycle, spaced +evenly through it. `live_weight` applies whenever this scoreboard has a live +game; `favorite_live_weight` when one of your teams is playing. That distinction has to be made here rather than in the core, which can tell *that* a game is live but not *whose*. -Two things to keep in mind: - - The weight is per **plugin**, not per game. With four games live this scoreboard still occupies one slot at a time and picks between its own games - using `favorite_live_boost`; these weights control how often the scoreboard - itself comes round. -- More slots make the cycle **longer**, not faster — everything else appears - proportionally less often. And appearing more often only helps if the data is - fresh, which is governed by this plugin's own live update interval. - -## 🎯 Which Games Get Shown + using `favorite_live_boost`. +- More slots make the cycle **longer**, not faster. -**`upcoming_games_to_show` is not "how many cards you see".** It is the size of a *pool*. The panel cycles through that pool one card at a time and keeps its place between visits, so a pool of 3 means the board rotates through the same 3 games until the schedule moves on. Making the number bigger gives you a *longer lap*, so any one game comes round **less** often. +## Team abbreviations -Which mode you are in depends on whether `favorite_teams` is set and whether `show_favorite_teams_only` is on: +**NBA:** `LAL`, `BOS`, `GSW`, `MIL`, `PHI`, `DEN`, `MIA`, `BKN`, `ATL`, `CHA`, +`NYK`, `IND`, `DET`, `TOR`, `CHI`, `CLE`, `ORL`, `WAS`, `HOU`, `SAS`, `MIN`, +`POR`, `SAC`, `LAC`, `MEM`, `DAL`, `PHX`, `UTA`, `OKC`, `NOP`. -| `favorite_teams` | `show_favorite_teams_only` | What you get | -|---|---|---| -| empty | either | The next N games league-wide, chronologically. Every game shown is a non-favorite game, so the two filters below apply to all of them. | -| set | **on** | Only your teams. The limit is a budget **per team**. | -| set | **off** | **Your teams first, then other games to fill.** Both limits are **totals**. | +**WNBA:** `LVA` (Las Vegas Aces), `NYL` (New York Liberty), `CHI` (Chicago Sky), +`CONN` (Connecticut Sun), `DAL` (Dallas Wings), `ATL` (Atlanta Dream), `IND` +(Indiana Fever), `MIN` (Minnesota Lynx), `PHX` (Phoenix Mercury), `SEA` (Seattle +Storm), `WAS` (Washington Mystics), `LAC` (Los Angeles Sparks). -The third row is what most people want, and it did not exist before: with the flag off, favorites used to be ignored *entirely*. - -### The settings - -| Option | Default | Description | -|---|---|---| -| `upcoming_games_to_show` | varies | How many **favorite** upcoming games to show. | -| `recent_games_to_show` | varies | The same, for finished games. | -| `other_upcoming_games_to_show` | matches `upcoming_games_to_show` | How many **non-favorite** upcoming games to add. `0` gives you favorites only. | -| `other_recent_games_to_show` | matches `recent_games_to_show` | The same, for finished games. | -| `other_rotation_interval_seconds` | `1800` | How often the non-favorite slice advances. `0` pins it. | -| `other_games_min_quality` | `ranked` | Which non-favorite games qualify: `ranked`, `broadcast`, or `any`. | -| `other_games_divisions` | `["fbs"]` | Which divisions non-favorite games may come from. College football only — see the note below. | - -**Your favorite teams are never filtered by the last two** — follow a smaller-division team and its games always appear. Those settings only decide what fills the *remaining* slots. - -Within the other-games pool, **the better matchup leads**, and each team appears once. The pool is each team's *next* game ordered by the best poll position of either side, so a top-five matchup sits in the first window rather than whichever kicks off soonest — and the #1 team's whole season does not sort above everyone else's opener. Ties fall back to kickoff order, and a league with no poll keeps chronological order. Your favorite teams are ordered by when they play, not by rank -- for your own team the next game is the point. - -### Variety comes from turnover +**NCAA Men's:** `DUKE`, `UNC`, `KANSAS`, `KENTUCKY`, `UCLA`, `ARIZONA`, +`GONZAGA`, `BAYLOR`, `VILLANOVA`, `MICHIGAN`, `OHIOST`, `FLORIDA`, `WISCONSIN`, +`MARYLAND`, `VIRGINIA`, `LOUISVILLE`, `SYRACUSE`, `INDIANA`, `PURDUE`, `IOWA`. -Rather than widening the pool, the non-favorite slice **moves**: the window advances by its own width every `other_rotation_interval_seconds`, so consecutive windows do not overlap and the board works through the schedule instead of resampling the front of it. Your favorites are not rotated — for upcoming games the soonest ones are the point. +**NCAA Women's:** `UCONN`, `SCAR` (South Carolina), `STAN` (Stanford), `BAYLOR`, +`LOUISVILLE`, `OREGON`, `MISSST` (Mississippi State), `NDAME` (Notre Dame), +`DUKE`, `MARYLAND`, `UCLA`, `ARIZONA`, `OREGONST` (Oregon State), `FLORIDA`, +`TENNESSEE`, `TEXAS`, `OKLAHOMA`, `IOWA`. -Both filters **fail open**: if the data behind them cannot be fetched, the game is allowed through. A board showing filler is a poor board; a board showing nothing is a broken one. +To check any team, read `events[].competitions[].competitors[].team.abbreviation` +from the ESPN scoreboard endpoint for that league. -They fail open a second time, as a set: if the filters between them leave **nothing at all** — your teams idle and every other game rejected — the unfiltered list is used instead. Setting `other_upcoming_games_to_show` or `other_recent_games_to_show` to `0` is the one way to ask for an empty slate, and that is honoured. +## Installation -> `other_games_min_quality` needs a national poll, which only the college leagues publish — set to `ranked` in a professional league it lets every game through, and no poll is requested. `other_games_divisions` needs ESPN's FBS/FCS group rosters, which exist for **college football and nothing else**: asked for any other college league they come back empty or 500, so the setting is inert here and no lookup is made. +From the Plugin Store in the LEDMatrix web UI: open `http://your-pi-ip:5000`, go +to **Plugin Manager**, find **Basketball Scoreboard** under **Plugin Store**, +and click **Install**. Then open the plugin's tab to pick your leagues and +teams. -## Matchup separator and the upcoming card middle +The plugin requires the main LEDMatrix installation and inherits from its +basketball base classes. Crests download on first sight and cache under +`assets/sports/nba_logos/`, `assets/sports/wnba_logos/`, and +`assets/sports/ncaa_logos/`. -The **Matchup Card Layout** section (advanced) controls what sits between the -two team logos before a game starts, and how the date and time are written. -These settings now apply to every display mode -- the scroll ticker, the Vegas -ticker, and the full-screen scoreboard -- rather than only the tickers. +The documentation images come from `docs/assets/basketball-scoreboard/shots.json` +and re-render with `python scripts/render_docs_assets.py --plugin +basketball-scoreboard --check`. -| Setting | Key | Default | What it does | -|---|---|---|---| -| Matchup Separator | `vs_text` | `VS` | Text drawn between the teams: `VS`, `@`, `at`, `v`. The away team is always on the left, so `@` and `at` read as "away at home". Blank draws nothing. | -| Middle of an Upcoming Card | `upcoming_center` | `vs` | Scroll and Vegas cards: the separator, the date and time stacked, or nothing. | -| Middle of a Full-Screen Upcoming Scoreboard | `switch_upcoming_center` | `date_time` | The same choice for the full-screen scoreboard, plus `inherit` to follow the setting above. It defaults to the stacked date and time, which is what this display has always shown, so nothing changes until you pick something else. | -| Date Format | `date_format` | `abbrev` | How the scroll and Vegas cards write the date: `Sep 19`, `9/19`, `19 Sep`, `19/9`, or `Fri Sep 19`. | -| Full-Screen Date Format | `switch_date_format` | `numeric` | The same choice for the full-screen scoreboard, plus `inherit` to follow the row above. It has its own default because the two displays disagree about what is normal: the cards have always written `Sep 19` and the full-screen scoreboard `9/19`, so a single shared default would restyle one of them. | -| Time Format | `time_format` | `12h` | 12- or 24-hour clock. | -| Show Date / Show Time | `show_date`, `show_time` | `true` | Drop either line. | -| Swap Date and Time | `swap_date_time` | `false` | Swap the two lines over. Each display starts from its own order, so this flips them rather than forcing one: the scroll and Vegas cards put the time on top, the full-screen date/time stack puts the date on top. | +## Troubleshooting -Choosing the separator for the full-screen scoreboard moves the date and time -out of the middle and onto the top and bottom rows, the same way the scroll -card lays them out; the "Next Game" header gives up the top row to them. +**Nothing appears.** Check that `enabled` is on, and that the league's own +`enabled` is on — only the NBA is on by default. -The center-gap settings in the same section size the scroll and Vegas card's -middle strip only -- the full-screen scoreboard pins its logos to the panel -edges and is unaffected. +**I disabled a mode and it still shows.** The keys here are `show_live`, +`show_recent`, and `show_upcoming` — not `live`, `recent`, `upcoming`. A +`display_modes` block copied from the hockey or lacrosse scoreboard sets +nothing. -Example: +**College Recent and Upcoming are nearly empty.** That is expected without +favorites — see [NCAA season data](#ncaa-season-data). Add favorite teams and +their full season schedules are fetched. -```json -{ - "scroll_card": { - "vs_text": "@", - "switch_upcoming_center": "vs", - "date_format": "weekday" - } -} -``` +**Tournament seeds or rounds do not show.** They only appear on games ESPN marks +as tournament games, and `march_madness.tournament_mode` is decided from the +calendar unless you set it explicitly. The round replaces the "Next Game" header, +so it shows on Upcoming cards. -### Text Colours +**The same few games keep repeating.** That is the pool cycling. Lower +`other_rotation_interval_seconds` for faster turnover rather than raising the +pool size — a larger pool makes the lap longer, so each game appears less often, +not more. -Each text element in the **Customization** section carries a colour, and it now -applies to the text drawn in that element's face — on the full-screen scoreboard -and on the scroll and Vegas cards alike. Until this version the picker changed -only which font was loaded; every string was drawn white. +**Start times look like UTC.** The plugin could not read your global timezone. +Set `timezone` under Advanced Settings to your IANA zone. -| Element | Key | Colours | -|---|---|---| -| Score | `score_text` | The score, and the matchup separator on an upcoming card | -| Period / clock | `period_text` | The clock, period, and the date and time on an upcoming scoreboard | -| Team name | `team_name` | Team names and abbreviations | -| Status | `status_text` | Status lines such as "Next Game" | -| Detail | `detail_text` | Small detail lines | -| Ranking | `rank_text` | Team rankings drawn in the ranking face | +**A finished game disappeared too soon.** Raise `schedule_lookback_days` +(default 14), or lower `recent_update_interval` if results are slow to appear. -Colours are `[r, g, b]` or `"#RRGGBB"`, and every default is white, so a display -nobody has recoloured looks exactly as it did. +**A game I know about never appears.** It may be beyond +`schedule_lookahead_days` (default 7). A game outside that horizon is never +fetched. -```json -{ - "customization": { - "score_text": { "text_color": [255, 200, 0] }, - "status_text": { "text_color": "#00A0FF" } - } -} -``` +## License -Two things keep their own colours on purpose: the betting-odds figures, which -are coloured by which side is favoured, and a finished game's score when -**Favorite Team Result Colors** is on — that tint wins, and your score colour -shows on every other game. Records and rankings drawn in the small fixed face -stay white; no element in the schema owns that face. +See `LICENSE`. diff --git a/plugins/basketball-scoreboard/manifest.json b/plugins/basketball-scoreboard/manifest.json index 151dec6d..fb65e93d 100644 --- a/plugins/basketball-scoreboard/manifest.json +++ b/plugins/basketball-scoreboard/manifest.json @@ -1,7 +1,7 @@ { "id": "basketball-scoreboard", "name": "Basketball Scoreboard", - "version": "1.29.1", + "version": "1.29.2", "update_interval": 60, "description": "Live, recent, and upcoming basketball games across NBA, NCAA Men's, NCAA Women's, and WNBA with real-time scores, schedules, and March Madness tournament support", "author": "ChuckBuilds", @@ -19,6 +19,16 @@ "branch": "main", "plugin_path": "plugins/basketball-scoreboard", "versions": [ + { + "version": "1.29.2", + "released": "2026-09-02", + "ledmatrix_min_version": "3.3.0", + "notes": "Fix every grid-snapped font rendering a pixel narrow. The shared code reads this plugin's config_schema.json to tell a default font size from one the user chose; a default gets snapped to the font's pixel grid, a choice is left alone. It located the schema by inspecting loaded modules, which fails under the real plugin loader -- the loader renames a plugin's modules and removes their original names, so nothing was left to inspect. The lookup returned nothing, every size then looked user-chosen, and the snap was skipped: 4x6-font.ttf drew at 6 instead of 7, which is 3-pixel-wide glyphs instead of 4. On a 256x64 panel the betting odds, team records and the date row were hard to read. The plugin now tells the shared code where it lives instead of leaving it to guess.", + "changelog": "Retry a team logo whose previous download failed, instead of showing a grey box forever. A failed download is cached by the core as a placeholder wearing the real logo's filename; the logo loader scans filename variations, found that stub, and so never called the downloader again. The loader now skips a placeholder that is stale enough to be worth retrying and lets the download run, which also picks up stubs already on disk. The retry is rate-limited by the core (6h), so this does not trade a permanent grey box for a request every frame. Needs a core carrying src.logo_downloader.is_placeholder_logo; against an older core the check is skipped and behaviour is unchanged. Ported byte-identically across every sports lineage.", + "changes": [ + "Rewrote the README as a complete settings reference covering all 274 settings, with rendered examples of every display mode and the March Madness tournament card." + ] + }, { "version": "1.29.1", "released": "2026-09-02", @@ -324,7 +334,7 @@ { "released": "2026-07-02", "version": "1.6.0", - "notes": "Add exclude_teams (hide specific teams from live rotation and recent/final scores — spoiler protection) and filtering.favorite_live_boost (tune how much more often your favorite's live game appears in rotation vs other live games) per league.", + "notes": "Add exclude_teams (hide specific teams from live rotation and recent/final scores \u2014 spoiler protection) and filtering.favorite_live_boost (tune how much more often your favorite's live game appears in rotation vs other live games) per league.", "ledmatrix_min": "2.0.0" }, { diff --git a/scripts/docs_render_support/sitecustomize.py b/scripts/docs_render_support/sitecustomize.py index 44eafa3a..64fbb438 100644 --- a/scripts/docs_render_support/sitecustomize.py +++ b/scripts/docs_render_support/sitecustomize.py @@ -89,12 +89,59 @@ def advance(seconds): _WANTED = _json.loads(_ATTRS) _TARGET = "src.plugin_system.plugin_loader" + def _resolve(instance, path): + """Walk a dotted path to the object that owns the final attribute. + + The sports scoreboards keep their per-mode state on sub-managers rather + than on the plugin -- self._managers["live"].current_game -- so a shot + that can only set top-level attributes cannot reach the game it wants + to draw. A segment is tried as a mapping key first, then as an + attribute, so both self._managers["live"] and self.live_manager work. + """ + parts = path.split(".") + target = instance + for part in parts[:-1]: + if hasattr(target, "get") and not hasattr(target, part): + nxt = target.get(part) + else: + nxt = getattr(target, part, None) + if nxt is None and hasattr(target, "get"): + nxt = target.get(part) + if nxt is None: + return None, None + target = nxt + return target, parts[-1] + + def _coerce(name, value): + """Turn JSON into the shapes the plugins actually hold. + + A shots file can only carry JSON, but plugin state is not all strings + and lists: colours are tuples throughout the core, and a logo field is + a pathlib.Path -- the sports renderers call logo_path.parent, so a + string there raises AttributeError and the card silently fails to draw. + """ + if isinstance(value, list) and len(value) == 3 and all( + isinstance(v, int) for v in value): + return tuple(value) # colours are tuples everywhere in the core + if isinstance(value, str) and name.endswith("_path") and value: + import pathlib as _pathlib + return _pathlib.Path(value) + if isinstance(value, dict): + return {k: _coerce(k, v) for k, v in value.items()} + if isinstance(value, list): + return [_coerce(name, v) for v in value] + return value + def _apply(instance): for name, value in _WANTED.items(): - if isinstance(value, list) and len(value) == 3 and all( - isinstance(v, int) for v in value): - value = tuple(value) # colours are tuples everywhere in the core - setattr(instance, name, value) + value = _coerce(name.rsplit(".", 1)[-1], value) + owner, attr = _resolve(instance, name) + if owner is None: + continue # the path does not exist on this plugin; leave it alone + if hasattr(owner, "__setitem__") and not hasattr(owner, attr): + owner[attr] = value + else: + setattr(owner, attr, value) return instance class _PatchingLoader: diff --git a/scripts/render_docs_assets.py b/scripts/render_docs_assets.py index fa38f5f9..2ca204e6 100644 --- a/scripts/render_docs_assets.py +++ b/scripts/render_docs_assets.py @@ -268,6 +268,9 @@ def render_shot( mock_path = resolve_mock_data(mock_spec, shot_list_dir, tmpdir, name) if mock_path: cmd += ["--mock-data", str(mock_path)] + display_mode = shot.get("display_mode", defaults.get("display_mode")) + if display_mode: + cmd += ["--display-mode", str(display_mode)] if shot.get("skip_update", defaults.get("skip_update", False)): cmd.append("--skip-update")