diff --git a/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/README.md b/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/README.md new file mode 100644 index 0000000000..b2833547b2 --- /dev/null +++ b/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/README.md @@ -0,0 +1,56 @@ +# Record: SP8192 + 3-Layer Recurrence + Parallel Residuals + QK-Gain 5.25 + Legal TTT + V-Gated + +**val_bpb = 1.0796** (3-seed mean, std 0.00025) | **~15.99 MB** | 8xH100 SXM + +## 3-Seed Results + +| Seed | Sliding BPP | **TTT BPP** | Artifact | +|------|-------------|-------------|----------| +| 42 | 1.08112468 | **1.07985553** | 15985814 | +| 314 | 1.08057225 | **1.07927887** | 15983675 | +| 999 | 1.08110726 | **1.07973035** | 15986648 | +| **Mean** | **1.0809** | **1.0796** | **15985379** | +| **Std** | **0.00025** | **0.00025** | | + +## Key Techniques + +1. Based on **SP8192 + 3-Layer Recurrence + Parallel Residuals + QK-Gain 5.25 + Legal TTT** (PR #1493 by @bigbag). +2. Added a learnable **final norm scale** and a **Smear gate** to make representations smoother and slightly more compression-friendly, reducing the compressed artifact size by about **40 KB** and freeing space for additional parameters. +3. Added a **per-head V-Gate**, where the V projection jointly determines both **what information is fed into attention** and **how much each head contributes to the output**. This significantly improved model performance. +4. Improved the quantized compression pipeline with **per-matrix automatic layout selection**, giving a small further reduction in final artifact size of about **10 KB**. +5. Performed extensive hyperparameter search, including settings such as `MUON_BACKEND_STEPS=4` and `TTT_LR=0.01`. This made training more stable and improved reproducibility. + +## Architecture + +11L x 512d x 8H / 4KV, MLP 4x, LeakyReLU(0.5)^2, Partial RoPE (16/64 dims), layerwise LN scale, tied embeddings, logit softcap=30.0. Depth recurrence: encoder [0,1,2,3,4,5,3,4] decoder [5,3,4,5,6,7,8,9,10] (loops layers 3-5, activated at step ~2016). Parallel residuals from layer 7: attention and MLP operate on same pre-residual input. Skip gates (sigmoid-gated U-Net connections). Final norm scale, Smear gate and V-Gate. + +## Reproduction + +```bash +pip install brotli sentencepiece +pip install flash_attn_3 --no-deps --find-links https://windreamer.github.io/flash-attention3-wheels/cu128_torch291/ +MATCHED_FINEWEB_REPO_ID=kevclark/parameter-golf python3 data/cached_challenge_fineweb.py --variant sp8192 + +SEED=314 QK_GAIN_INIT=5.25 TTT_ENABLED=1 TTT_LR=0.01 TTT_EPOCHS=3 \ +MLP_MULT=4 MUON_BACKEND_STEPS=4 torchrun --standalone --nproc_per_node=8 train_gpt.py +``` + +## Credits + +- **@bigbag** — SP8192 + 3-Layer Recurrence + Parallel Residuals + QK_GAIN_INIT=5.25 (PR #1493) +- **@clarkkev** — SP8192 + GPTQ Embeddings + SDClip + MuonEq-R + depth recurrence (PR #1394) +- **@dexhunter** — 3-layer depth recurrence (PR #1331, #1437), legal TTT on SP8192 (PR #1413) +- **@abaybektursun** — Score-first TTT framework (PR #549, merged precedent) +- **@Robby955** — Parallel residuals on SP8192 (PR #1412) +- **@msisovic** — Parallel residuals concept (PR #1204) +- **@X-Abhishek-X** — Hyperparameter tuning: WD=0.095, MLR=0.022, EMA=0.9965 (PR #1445, #1471) +- **@kellerjordan** -- SmearGate concept (originally from modded-nanogpt) + +## Included Files + +- `README.md` (this file) +- `submission.json` +- `train_gpt.py` +- `train_seed42.log` +- `train_seed314.log` +- `train_seed999.log` \ No newline at end of file diff --git a/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/submission.json b/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/submission.json new file mode 100644 index 0000000000..65b342d70e --- /dev/null +++ b/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/submission.json @@ -0,0 +1,30 @@ +{ + "author": "liujshi", + "github_id": "liujshi", + "name": "SP8192 + 3-Layer Recurrence + Parallel Residuals + QK-Gain 5.25 + Legal Score-First TTT + V Gate", + "date": "2026-04-22", + "track": "10min_16mb", + "val_bpb": 1.0796, + "val_bpb_std": 0.00025, + "seeds": [42, 314, 999], + "seed_results": { + "42": {"val_bpb": 1.07985553, "artifact_bytes": 15985814}, + "314": {"val_bpb": 1.07927887, "artifact_bytes": 15983675}, + "999": {"val_bpb": 1.07973035, "artifact_bytes": 15986648} + }, + "hardware": "8xH100 80GB SXM", + "pytorch_version": "2.9.1+cu128", + "technique_summary": "SP8192 + 3-Layer Depth Recurrence (L3-5) + Parallel Residuals (L7+) + QK-Gain 5.25 + EMA 0.9965 + WD 0.095 + Score-First TTT (SGD 3ep) + GPTQ SDClip + Brotli + V Gate + Smear", + "compliance": { + "train_under_600s": true, + "artifact_under_16mb": true, + "eval_under_600s": true, + "no_slot": true, + "no_pre_quant_ttt": true, + "no_etlb": true, + "no_ngram_cache": true, + "score_first_ttt": true, + "three_seeds": true + }, + "based_on": "PR #1493 by @bigbag" +} diff --git a/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/train_gpt.py b/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/train_gpt.py new file mode 100644 index 0000000000..2585e41f49 --- /dev/null +++ b/records/track_10min_16mb/2026-04-22_SP8192_3LayerRecur_ParResid_QK525_LegalTTT_Vgated/train_gpt.py @@ -0,0 +1 @@ +import lzma,base64;exec(lzma.decompress(base64.b85decode('{Wp48S^xk9=GL@E0stWa761SMbT8$j;RmrhAYA}7n@VT6Qap3bt~@<3h>ok~)KUn-s84rm43}oGUMAQ*q|8c_SvdluBKzp|7vc;L3kQ3*yTeDgV-Kbn2(}yE((tCe3*AJ7KGrvI+$jd9UE6jR~NN&A#=mLUwf%=f6b(fp)>cqs6u7Fj@y6R<8e-1zW{{S1=C2y0*wS>nEYNNhohM=s@L2X0>;M*V&@oCBd0WEzMVI4X>-*a|g?bcT5T?`(hp$y{EUy$D}(2V>W{LIRth!XuGv_-<$gL~GaI2o(zU;3BSzp~w=wYz(Ctex-#{d)P8`6oRDpGFWC(gbV`suRD(Q1poPUM>?Jk?d*T=xWM@1pk@!N(knWuZ{c=u_9hZiXe?=3$rBj~~GXr=gK49)biW6}c?6S4Ac*y*N=ISWCN%_05jQ{!<;+T;kIN0FoBrKSOLm_`cP@+2W>Qlzq$usBaQ^$9`Hbos_yD(kThAF>HY{llh*{pn*{CxoUCUWZ54@G^%;Ed6zPAS`CMuRGT)py@zO5^rs31NMl3?{X~~jcn8eKDJxyYnjY}d-=KlI%9hkO7G}C-4fLk*kq(hg#*T#7Vs;&NU=yYCq5v?urr2gbuI-dvKtL|5x;9j$s#0wINI%}@R%;&*OR5nL*g&srNzX5gFC+n9h^SlpHi0hKXdmBm$Cn?rCsjoS%zQnZA*J^;h~267eZCDuZBTO-Z(-i?-7_c)xjOs`2&2#63tpw%6wT@vap+C?JUr6vPmimc_Rz&kvdRH!j4M((q&Mo^ZXhnQv+?FAq_lOzvi3zo9XK9fq{(5F5uiIDBB%R<%h2z&P@jX}rbQ)HKoP|mPn_U$IqfA{LYTp2vqiApF9ARb(~NN^H05>^9XQs{}F_z-!8d;ygf%TpBjs9MQOuf9Jm6r~Vzpw0&;O_-GIZ>3??*wV~7WhawuTDz`L@b2Tk>WdK&Wq3_LrRds_0A4V4Dy|UMPpi6LKNn^FiCnbe!{u5xJd%LzbINujkkw<}arFJHGn7-e=RGa9on|@mi56kzAFR^~_J9%MbGDHBje~a*z5iT|RN<*t#9}o9C78v+32w-Jlu7zMwX;HXb_(w3g|Dk_ylBwzS3|Fw#G*Dr4sd|V>aix=vrimd&cWkKToTocpJ(EAQjbWz$+qXN{Nn9wvU;*pmIqPDX&|;6%wYZITks^lUV$6OLuLhPTojm>DrA{Y=2$13;Fr?plW{GKrc$7T#UEBK2FS24|q9H!gXmG4yRZ(*K({T{iff+<7^=4*5sOYcF5aW<;30Rwl9)ZwV9Qdy4DYm{h@-$+4yBlb7T(>%5!H;_F!`-$8dJgJf%%bsX2oZ0SqRTHmKf%b>r{lL479fdGK{PABj3Qlo=mJ$$J31M@1R7<>;6M$M^ZGGWQmm{N_V31g-unme-qvdWBp#cR+cF7_Isy3+@3P*;9qmsaAU>@xk>bd+1+J^jibahC%z(;1r1kAtnem3AIT279YGX9=IqMX|w2ud*qMYoi0rrWzsStLkg;9*KE?%si+D}K(nX7KQyd2z*nq|+mqFh7=>zh7+FNQdf2f7TzdM)4qO_a}B}Of&>`N4R=~(_%`?cs~VK+rT(Tl%)O*AWxVD=_qk+3s5EW3lpva3A30qt`-EJmTd<5xMV+}Fn&wo_@^!p3KQ>staMQnIDTjPxE`%gpOaqD7m>CPFP#v`w_ZPDte4Wfebn3G5HsP0~gXzK&-lkXi^kckBsM1(Z?m%&O>Quc7Az#(xRXTq(&#_*z!xGBbdD+mr$78M8=L3OdnEkg7rzJ)A|Sabym#&E-($rviIA2?cfRk?kn|?N&bIiteb9Gh}~R!+=a*DbXo!P4n{@#>pH}+YoW$@%?lRy(VB54OS+=tJrG0dF)|S9}#YQNNy5d{+h7$Mc{HkodD*>*LyF@^M6Cq&o$Ufj7BDs{88gp+BAR`jf>AxFRss#y>PHW(79`N^rhdx_eug|ak$-A{c}}Lmi`adUdOk0Qt*pTVD(_t$p=#0-S1}%es>AO!u176es9fZrg4PNIok*JYE_9#&j0wF!*0ISA7q$03B?CiBg}pO)bx0X6)&YLA%&qGepfr2S0zSsLj}F$b+8ZG-AS(Av<7u{-uiT4FLcq{LYVQC%Izs|BR+tv?9jn@8{U1wSC^Ld$o$qY85~I*fY6@J;AX4l2}V_A5`YmWXEc$KXTJ)f_hWd^WeJO)rm}@_bH1p4xL17<3Or~Ul#TC#7hRr*mXM>5=`r9z|a5yIDPH&fmC-2-pYoQ8i|Ojkm|bgzNC8eY(&w(*rEQ4gjhxFX6EVGMuA+I2m9kr=2ZHf#mIsb7#aT|Q=|e(WDC$SMwh~04xCVwJmeA&cdxvyrCQ2U+wl?^1%>}JTL3JU6ZzUNyp?k*s07UywZy)3J5@NbGB*ZX`Kck-QiKx`cA3OOB;h66D!<~1s@Jh8OjHV^A#|WWuOHv9BJh;bE-NVG;Q(B@gW}(Q!yb6{L>oo%@pW7a5YaSuJe8>EaZMC8d0JkH@&%mvpvkBE^|e3~Ttd`vwH40cdRys_)YPrt@e(ppvGZ-fLeF41K=|#*;MpdIYC=$j&v=G4A%E=jLeatt$Sk+Us%N}XHjcZew&&TpK%Zr@e(f8jXLR~YCC`zw)%s<>#>#d$+b0yZ$Tu+pP2@TG7_tv6rmG!}NFwhO4Xfd}Axg1iXy6!xVA2g>6LBVQiyyBJ3U=0BDAyP122|W!_{z!-7LDyUiumFmSWZKh{VTz#G|FWf&-2PAx?RV|AM3(@=xGTysyM!*4Mc5r)HBqa>{}*__RCHxKbaxOM1GdIjEI#_xf8*QHiKSG)e){GnW*7d_Fm2<7tTj_&Pa^DrsH>+mPL`(QDoKS1!CQ4@X{abo_UhL>tL$eyt}1zwR?q)&t>>({c#p!*$oD&I0X8TH#T{QNJ@S)sy$n(j=udoGZFoHy5MShH=I0Gv2r_r>6%M_*j6Z?sie?D)UhhwaT-p)lN?EXXDbrboqPth#+lwfb0#;$oJDvgPW}w))fsU3o-1bio@LV;x0eP&;c6n$sOi4uKn}9{_iq2fY?3EThqIG;r`#Ak4m!RC#gFv=N9*ImJa$_6?rre`1><)iw$_LEANlDa4g6^#WiDsZj;7-4+Fe|mX%}R_bT*Vyd}w0qf)b=EwKkrDcw8-_gQEG)m49{2-#Q&L{x9>IoY6IA7NS2e7TyPj*96m}eH5NS64zBuW`0BFz;{?ci06%q6vvCnqUo*|!qISP^7&2{v0X@8-8G(94hvRmJU0bhlXO7)~blee{NPPFhA1FzD~ow=a#oKT5nP}~^p*h5+b%4?Xa@uoLSGoX>vB^qans&O4zhb+@xUWUbmFcXzdp@^*lZtOa0{H9NvZbr~k=>u%}7&?T?F-^lxat=tZ6YU*75FEd?G-Rl{J{{#RyLc8zsCMpXW#JX&Yc%3qODuT77r>w&Uwpt!pA3EXW;K{GSn510bk`O>O3*v*4|83ql#bpCJtO5BL~S!H1$Fh-LV2xEP!#ktENBLPanJ*|&$lQ}nQBlkIUuX3mhl%{ZaFE&W~5m+J=45=X3}IYiI3HwY52akoZ2uC0O=+;%(I5V@jmn3Ou)YdQ=Q=uS=LP?!lx78hZkW~n%m!fQ2MlzZ_j{U)gVv_(33N?X!+ZX9Uc;m+e07Wm$6Hi5zrZ3d4U@+kf89&i>Ndp4jHa2Fz$PNxk&j+XluKBXDVM%3DFp)20!Qp6w#`RcyNW4zs$jF4aO+$@z$1vhSf^+*R8VXpOG?Owfv^Fsi5iVFwvsGu@88nM>yhJ8S6C2YGo$(zvU@0T;aBEZZ+FrTtS81BT+4FylC4Pz4gB9zJ_m6k)bSj$Ci#*wwEg1(dAtZnDwox^fRWAr-D6A??T)?$63=B#Xd^TgyXl126aZLexZl%fUA($n)|m6~nXJJM7Wx;~IGJ2U4xAtEBC}LIW6(cj_Ko6NqPlQ7c!Zj+G86?GZ7|K|RQ_H$_bd(V$nMwxg;m!(+%fE6JQ7PHUjxWA7xnWJ>LyEf~v4rZ6P$elqmp7m!~;GP*Vr17`RBIevn`3sP9407_ttsH4kjhA&`=l_D#zK<|Ta7B$E$WY;Z%5HYq%x&&q3gmM;8A2NdquI4@U}a;utq4X2rE>r?Id@889J-U~BFi`|>ez~n(taXUK3Iheex@A)<^otiMT);eU$M(hyoHXD#(?Y?6CqTm26ilsy3VM}QG72`PKK9oPmoQry;SbPBODMCW58r@d&8M=4pgCm%}zywk@D1!pz9)ota{L4Q|R{=CW>gHp5tEkaeRh8DYfYI#U%4L=E)$hA8JwG`M5nguYw%h-$&8NTtt+(B1@Pn)gQKCAWnUd`VR^xS>$RHgjmyYHR%Ch?@Zyj0!c?UvcD4%UQ(lXwcAz*PxPV)@HRVDaL&h#-i3wyo70O#+&}_XHd>23)-l@xCyn4%<<5k&p$lpW76-}l-x}{1XvNnw_ILzt=xi-S%ZkwxfDummTN04PKCnU~iTs@Xo*e*QsaP)|vmucW`R@0-4AeSk>YbU9cqOGj$Lp~Non+8QKePn4%t_xLlL+-g^WGWgc1Ui7R@}1?s0+E8)pyYP?qn-wHHmiSBa9AfjWdKrm4CD)X;&-S@;9DTn7Td`^=NBCoZn4#sM3OYhC~(eK*^Ht_HdVtHFx+QD5o%Y)czB^{8*md0JOs8%#B@%87#H!*$3(=zBqji&W-2#pmRhtUoyEHKleK#c6dN+*c|un(7)6b$dLf$h_F8s>0t<0I&CK`AGAzBrLWS11@W0bqS4hRa(}zmeCz<$HpvMG->%wDsq$(%E$o;O*Eb2MP`BkbAb~@byb;yJQj%q6e~Ib>Q4|J44Qf~ZCwqY-SW}npE>ioe_WZ#MP@u_%#~55htcen9FB}f*|d0${@D1~r{2f{aRcZE7T6%PAb}+}WzB`K10Nv8i0qwP68>3~XpN(Pl}T=JaZ3dwO99HhC!Ac6d}{d$|i{&+Ek~ez?z+~$qA`2r6XhuNC%-29dZTi&5W`DBKh{i1$ykGq3-Y0=jk!y^&X(l{A8u7;MsvxV7XKQyLw&S&X64^yh#ZbA6CzOuO;>7hdX!zMZ*j_40PXHu37+n4p@r>_j%72-*|k*eFZs0+uwwLb$RinD10qJk#f8czEBJ2(;6@?>c>oROWl$bU@ewv25XY@=zV|2v@#5eaj&=4^V1h=!cOKkk+R;y(^xVCGz*`vgzoHlM+)mA`eR;IzFJaaf8oXR>t`u(ll$J2&Pss?TJO1Tk6h8tzKoDEN!UKdHQ67~X0O@w$xi7jzQN!6j%L9zJ5tbxWb<@V+Gq!y6qpkKWDDZmD(-bdq809O2R*25@;0+e?7*!-Q%j7G+vn@-vfFpK!z;4k2ACq`HniS#MW*d-I+>z9@cBWvK%72MeymP_tDBDuJ9sI2SuUQfl&&qU_a-YcV4G4?u?DaE>;GEX{!4G~#u&VXQ3k48gtND{+Dr)#_9AQI!a`A)JdRxw<@}&U@dJbvxZGV#C-BeUa}xC77yd|KfYx;+g=w+-7d_|%=UY0Sp~2@o>q%1gVcIq?pe)}pb*|YHJ4zd#n)B{mU8-%)L+fJmI?>t`4g{FSUCTrtN$A_}ww0sHK3t{&k2nX`T!|1Dy(;`2BIQsn9X44T+xXI0Fx%Ie)OewEjtwhyqfu;aQZ*v@#e@`+7hP=_LxgOiVOeILvYz61tkh&ae)-}5?~)P<61)8wA7;fotedTwDHZquP(Hs9AqxU0K)h8WhYejx=Pn@FzvW9td9G#AdIzS;rwx1QPZZgDPNiGypiIbNF+7Ij~;A|(GsR5$~^G+K*u%zR0m8OaN9c(NI%-j$l&T4{kOKZ9`g9(5wmA{3ska)PTJb<4*iYp<#Y2}^o*bCkN$O4}QDT%?+Z-GgbYNaxklg|{91?u*?G>_Tlz=p$v!nDsVfnaHWJ+}q?nPOCx3^egF?S93;b9-HePHN_j>nFjL4=nl}-W41#S%GI?u{Y$|BSC|=2sltD=$~oQaYIgd@OXBxYO%y5xZWi*Y(w*yQe+a@3HK^$)0!3m^;|rw$a8zx%r^p%ITtD8~H#gB~hq^eh+B5Xt9*39+udw+h*sL(dzGDdcUo(#zdY8YnY8{rBz34rr8C^6iRX$ZJd;$#w6TH?Z4FGnslX4fQA!+Mru1x}!*!K-EjhXKh~eQi$>;hg`BI-E7Vc`apHyMoWO8j+lFHnR(8_f)*l1{@AR6&wF}35)xEJW2Nd`WX|qnGA}=op`j&whBi?eJAo%{FeI;xf9tAe|v%D6FGb3{et3xjbOE|HER-li94lDD}ra*89ATmW3uI=oFq+>9nHwAr;6PRjN-KkD{1ILz;2aT4iQ{83F?NYE5$oc5nysOO1iYqnkM;%*za%i9mDguST3YLM9T8`A%hvLoH9n&X#$&6#z>66!7@=&{IWbfYy^|^K(-SEnbc~O(r+gjJBI+L-yKnfqbG(y2$!FDgT`OjnZ6h?KE8hwXXiU$*fhARChXW$#ao?$^=J0#uC~0GnZX+ft`R{U)1rR_Pi{tAhu9N(LS?f<#RGH&sS1|GtzC-FYJacyCC%1;YUQ5fkv8q0Ky)Ams}QOjt|Hz@T5SzLfiRim6C(J=$lV97dzqnSXdhEi{~aHiQdr_%{&uoKKm-25%?l0~%jErRjO?qZcr3nhzv^O)u{0wBZtQx%j~@w%NhNZZC=n(x-Bu5p0Q)~$crRqtyECkIiRzYeW`e)#ca)10RCHkr)5)wzM7(?{Ts&NSZuXA-V8490I1`vIO#}U(G=HZj-(DB3ZqhoAnt#yzLW63R=0cW&`>t$YzFCw>wlP?jIhv%Qi{aHyegHn^c%(~Wwt^)!rxAlJQC^@uZbSj=p-R(?E~q^dmE4-vHVLgH8Ls+O2!E-#DY)$Bzu|jfpPskfgG!wM<;^u?OJ7hzytiWFh&&YzV^bdUPuf?|o2DT8qj^6#SZpFsI+?7-R~ynXeoy^6wml(#J$u>On>Y;`pjZC0yrj+hq&QlN0fbUX88{;QvN@3vc#8pJ>DtT@MgocjG;CUiu197EPbD1|S~(N#{oXHeQ0CFxU0;GM7_B_%_lZpdxU?-YA-qwL$X4=|y3(K+2z`;&Kd*a9HdTV#BYz{C>IhsUcen;X0`t-Jekn}B!}V!bs!L7yWUg>@44xL3wp~-_mli7}C6t&iv_DXWmcX6v)$l-Zo4dxucki<$-}xn;4c~YD6l1vk*z@&MG=exkJfe>^%c~KGB9_!_UQl-GaShu{0{6M%!>b1PN3X6Qk0wf_KtZIMkrhW_tGdD&L2Ip|grPLhW#Y%RQ_re`2p7l}yVNH*W-(;|l}SUp<~hMj^F~IC)$JaYzoG+B}87tZ~sktPklVgg)PE1`o+s1sZ4?Lc(uTF24Id4g(w^*}r{9+=+PJ{)TJ5)3b0t*$$Vvsr2tsnHS@%G9nj)Yo1nOleFWCDqSd_X!xwzq~)*dutx;4!I&LJDaFbELj9~6O^d3V6gqkigDxMoQ3c8bWqZUfm{XH&r5(Iycvwvmr?g{P>bh=^MS{alM!v~iRUw>O7&~0Nq73eq6#=`cVq~`ZAjL~e88?5a$1|~RI~|5gQUYM+L^yvdD|PsGqbplZCpbQ+erkWKZ%2ntn*`BOl7+eCo*tA?OGczyk%IR?jP&&kyQ6+U9L*;LKa6A(^MtZm-p{CqqvF`o<$2~r&AV41A5~LcIgNHR2w-oL4kPt91uU*>V5h`|0I%%k;UmfZsSx)MKqzv1HbeJ5?J#kJZnbQb0}T_{WHc{gMwUuWo*mie45YuQcv)O1g$MUwc04W1WDt!zQYOegwnVM?&S^oDnkEqrRN{x(auyWPi6=;s})hAg}VyR%2kF2?XrYOuXRA+UiuGZ0Ny}7QY{^@c7{dG_oXa|R3-jP>_*WVK?!M-zURiUg*;6VReXI~vcgI%>o#iRxzruQ@L<~R%E*WFFLM@=hrS)^9zKnJU3f8dibSJMMZT7VK0EQxt_Eq#1JU%Gc&6@?j_<8@)?T6_8$uF)Z!xGPf+$#c&)GPP4-JTsg1b;JVHR{6h?SSw&!wxUB$JDQV&yN(Nn=u7ZDb#VbV<@runLDf{@*Mfq&lI-&h9<#K5*C;*fPumzR2>LHgwcM3L%~vFA!#76PFp1=}{7R^&5%iMy-bPRmo-f*90TTe#{PY09iju0yA7dGT#YcD3pe(xlIG5fdn~|vYEiuxZRA({F8!e*W6%9q-bwGn?uaYor~sKHB*RRx@lTA7YUc?7p+j5@n2BQu!v|BEXvEOxTTp|Ps*cnOgHo1c3A&x;Wz+2ZuKIHW=4RUmf|)5W>uhFLDt;37ZJ=$0(Lk}Dg?Q0O}mnm1dB%gEvlh1BnNsp%Df>@o?V!(H0g)3r8>(A7|t`N0aXNc#3~1vM=JBQzY$zs}}q9;+yHPo%}&2L0X=S96n!Mg*_6%I^{!0Rlx&O*vwX>zg&_pv2`boW=kUa2CyybrzguC9&V*nkx{zfcvy7FKy9`SfUq&ZPw!Yp*$ptEr{L0>QFMWxqF8=bzgWY&km`?cCyOuf)V~P?^`0)Vt7*c%4EFW*Tr!)q!lY=ZEzm2)}zBrQ*!E(1KWA-KrdtzRlK{+n(K@@j=5n+QgD0!iVbuBxAKz-UoJ62kXrVzagI_f|Qm=77tVzfa~>k3{2*hdItrWUVH^p3(YsNz_nZ7hKe{)0Z?0L?owv6Eg(;2|JKD1f>9CdPlVn%KFb24b~J9KSmU$!bmFnA~30awYHDn0i3Q8p_yBaDc$@M{LeY9-IB67V#?A9V6r8U2yM4NFddti^#j6eJFe^_|2N*LsuZHn_=`Kp$+QQDSwb%=Rm!^0ee&|y;zy;-v%+PE1>u11;Bx*~ZlxkR<%5$(Cn<>d+6fh^|I_ylR^(3vYC{;)82_X#btkRb6fu2{&Vp}v|5+02D@6n4cYyRteyc=$ZD6dwOW-u}i+xy@q!QInsP?4ZT#z2EN0>4OEim#)64|oTSi_P_$xlFZ<6Z8RbzK{{NH!%}DgXP}C|qy(3leXCJzDMIUQr#KFqsdCd7PSI<#VSxb78I@1A9OP1!rMmB}Ofmu7n;vd3Bi%@EET3Fi<{@$f_P)__b@A6z>vV*UluLA?2p*Ww3Bg4U-YfzCk;6ncE@N?2ss$wqcu!79&f9j{kryp&e3iY^ui>4f(JU!4S)s{~)0SUMmn_re^P+BDN?OGB0O>j>+zHu4-$Agi_6+(dZ|jftRSze-7`zcKvj5rq(uml}IvSf5_u&D0`3SQDZXIO)X^r10J9?w|0_l*ypCuDukA6C&eGtJtRz^}xy*HE(eWwS75QZC;oO{suXYEay9`gw!OWTLIniUZgQOP$QTU15m;!cER}LUd798@Z=w*Ozm@kB4*oDekDNv9S9t$v=CLM^3$CC#a%%Lr&8gJ7u*->u?%x8kt14&edDnBwi|(huNLM0QZpf!v`7)z9Gfxpn+v?u*WT2;NhYNwvwo3h|fK+zbAtmlqNrlIRht>n&VzkOY#rv&P5`)8Fg_0d7aNfiQw)|Bcu-W^e^13mP~SnvPH_odeu5HhN0Fpg&kW29rBDZ^_i!R<_-#mm<$9J-203$VK}y}034EB*+C)YH=&lFuKBsi>ik0}uip(dPVyI79L!jZiAt}$Htv@Ct)Q%ws^inmqzI*Hati0O5Wz%7NbK4>ssPK`Y{iAmzwyX?y0-Lb|5{0R(Te?1EpD(slIMp5`uOM;=?;h#$L-h^45Z0)b<2e~|c94EK<^3+2EGxdMZ>)J7k9W@gFNq?*_xRG7L2F&Ohr=Y)4CSx`+GHU+`vWRbrENC~{A5a4G)*~LkV$@=M2G$rkWxZLAjE?-|VEKdTcPf^J-m#3D?4=>YyDCzj7sHiQT4XHT(5D!%?mHoKJs|>oe@7oSqHF8ZlQ;=iuH5In&5(p?9qcJT_!E;l&VNk=(pODd?%XbgL9DOzxKa9-~USM9gmXJ|Z-1_6q2@s2^A>4}n-0*39N#$~3kQF}d&(kR1mM$CqY0O`0+nwmnGihgw$m#=Q8Wi$kUGQc@Lk#iWu3?!gc8w_D~DN=>gabLHSNHjFn$XDGq)a0b`1`{Gw2nDrNBgjcVUq?Pg2?cv8BH=-z^t}vc!^p4Bn4$=F8|pj%^dRv%8%?ZGuH%uo-Z6eidVClLAUQ7?yZH+i(ILqQeo1;Ps;%{1BN{)kYWFvY>sw$S>a-+hSJ+L7xDY%;a=tei#TP7qD_LnFT7N02FXlI{iE4V3EsBK{#Me))XwkC%G?5zfI&trlbflKp5{C7}_5H$KH_vr*=Xa6(IvEwr#JPcZD1c!3i#Rm0>-xfN`+?krB|{PI0??RMK53zmn4?6Tk^@-zX)%=q0qSB=^0V#?hr1`tjKpl;Z1VQxmpSk8H3=8Mn|90^*KsC0%*$ohFLVXsXg<@&ce0GUlfLI)`J%D21Wzid8K&P~_QHLeR5-tq+O2=NFRFD1ME>_uCD2xD(t`iHbB&swX>FUmF7(DX6F6+!{ohnp<9ed3c=oiZ$H{=o1);O1TS92~^efYLge5ToAxY8e2EF?u+}nMg{t#_645?w%LI7c5)^LJ+f!ZkZvb6(~PG3hy11Ap&4W+m*(g5c;NAk~fsF!)Bf{ez>;N08~tQKGB%O;ZD*S?>LTLtAxaL8Ha|Je09sO0a8LHDULEGa1)am5NRygUzR7mwzI!p4W1Fh3r*b_qhGy59!|L8V<7Xd(n{Sb^DapuDtPeTdCTHPpvOZo61TRjjHrFn5+%+su{=QQ-EQ?LLTa@IL_TMHz!V#3K3`)hvGRg$`iAWUXWf&+i?|((Gx-A{*Kb4==*Hd%yV6Sg+8t27{{Til$az(GDmRlOJ^+mYcW^G2*__@C*sKt4fTY0&PIAqgJmzW-Z9y$y60ktI(!8T_{bM(XRV!)+Q*oTK;xoDl<_+Mf2$OUofygeSf+Pl~Y_;!vc5Ec0q*CwY6o73EbTHJtp&Ezw=>B)9EbV`LL2`&hrEtXJi6(qy*fn>?c{IR^*R0~l3=T^W?IliQ_UBcjYNX>uKHYJM5h2yAL*#nDGs)BaZ?lj+uNRQ}_#?;P$1?Ac@y7!za^am7(RE}bc{E{fqE@f(oo$N8kjjW^kd8f_b0pL-8#9xy^pfV46B=UqR<#a=L7+;W?J*59-f`@nvSEphw+qX!@#0hI+}E_QKQ=9M7I6zzAP%*P*ouyC*yM^lWeP*sneXK>m5w!*9;CX9MI9ei%qIq$xUI)f2IxmuGV4j4_jH{9eQVKa=rPqs)Xp}q&y&z7OJPO_^r2n>Vo1m<7ZLXiyC-8#!zw5IU1a0dEXJ*_^zRO#CYDD{U84Ci=OtnwRgFM6|mH#x~l);6>r2W!WoK&X`pYcd;Atk5MS1PGuZ`BxKE$AKE>f|SuDsX55r>_Tm|wLkYZc}`pOo~)1KqbW*w5bwh1(C_?8zP0D>_W;!o!HJ9M?)wWc@{5dE$2n^!wjMTS;Gm1HnNuy-qe_R*lIfXZ8nAI6bozp-K6sBA4H1H1A|eTO<)^FRnuB?K{OQuMX{RUV2h}rqs_WOsG5l~$!bU3#=OkPJ>*NiqPxLIIUe8RzbMR)}Pd){*h1q5HJ0ovp2JszC###0aa`8^LZ;#=qVF#?RIPunJr{)MoHXTf*@)TTl`xV|q>z6gN#DBf`y)rhRu=&OR$2TKt_c;Q^cdqh>_rdLgcizhsBv(i*2yFwOdy8