From 53cb693dca784aa3c4ccfeafb47756d345c76ee2 Mon Sep 17 00:00:00 2001 From: William Lin Date: Mon, 12 May 2025 11:52:09 -0700 Subject: [PATCH] [V1] Docs Update (#402) --- README.md | 8 +- assets/perf.png | Bin 318108 -> 310327 bytes docs/source/_static/images/perf.png | Bin 318108 -> 310327 bytes docs/source/index.md | 8 +- docs/source/inference/configuration.md | 77 ++++++++++++++++++ .../source/inference/inference_quick_start.md | 55 ++++++------- docs/source/inference/optimizations.md | 1 + 7 files changed, 111 insertions(+), 38 deletions(-) create mode 100644 docs/source/inference/configuration.md diff --git a/README.md b/README.md index 6a1ae9fa0..4607b5de8 100644 --- a/README.md +++ b/README.md @@ -19,11 +19,11 @@ With FastVideo's optimizations, you can achieve more than 3x inference improveme FastVideo has the following features: - State-of-the-art performance optimizations for inference - - [Sliding Tile Attention](https://hao-ai-lab.github.io/blogs/sta/). - - TeaCache - - Sage Attention + - [Sliding Tile Attention](https://arxiv.org/pdf/2502.04507) + - [TeaCache](https://arxiv.org/pdf/2411.19108) + - [Sage Attention](https://arxiv.org/abs/2410.02367) - Cutting edge models - - Wan2.1 T2V, I2v + - Wan2.1 T2V, I2V - HunyuanVideo - FastHunyuan: consistency distilled video diffusion models for 8x inference speedup. - StepVideo T2V diff --git a/assets/perf.png b/assets/perf.png index 7ee6cf6de42536923a7c72de509400dfab9658be..8c2ace18964fe567feaad9b23bc489e0155de041 100644 GIT binary patch literal 310327 zcmeFZcTm%5`!9?QEEHWt1OzOrNLT3~pdtd&rAZf&-lc?&ih#-j3IftWq(kVvgMjoB zLg+<0p+f?McCP5|KEL zZr|eK;kaz-;9zSn%*}1}@4w)(d1=CJe7*1kyvr$DX-#_)60U2+KS!LC#GOcvkdVkc zyszpUy*T3NuI_l)w6;~&l*%`9i|NG0&uKd4~{@<_8|Fw6zRK)GybLraDwO#ViD)h`x7)&^ph}&;c;fOs6 zFPl1FB?R#3h|DLyFPoid<%}lnSYI#KUkKf*x}y^pcB`q*?B6#bKDjvk|Kqm#Se{Sz z@6pt(jo|uK+rRL2Dp|d7e%H5m;L|{Tgya?Bb4XP7_BY1CBKvH75>wCX0`lo8nw!-* z(vl6=(=*f6)zm`G&CQnLb?4e;ze!|KI)9Rr9CS zSXP`dcTYu%r%BM{c{)v@$ep1F?Yb3@8TeU-81+v4^XtF<`-eL^*VPs{gCo_%Okc=q0#tDzd|X?b~%t&zy}_4Uu;DSmIX zj^8YiXFpMFmej#`wYO5147WTgqbpK~z^5Gh`^@g;OZ-zWZQq)SccQ;F={w;sCT}ix zYi=Z0V;66~dNduQn39oMQKw|}RGLB8b@aGDi*Qj=hJbm@d$RrPiaCx#GsYJq_uw5# zjf`i_r^}98ja4d^DG%SbAz^?<99+Ms`))(xP(oLMvVMd^77xTE*9%fkgO#n%Wk2wn8p3 z8LYr{Gmkp;1{P}#PlH_fLYmM*_}wQ4%J1*w+lN-zuT&S!_liBJC&i)OcGvShx6K?L z8Oc02uhezd zy7f>NA49Pze3aF2g*+K5-x8UXj#RgM|2ae>euOpca4=au<1z(ZzeY;T-KUd^jL9Tk z;;qKwVT;l39%B2n^*Hb6gt@6Jxfc{1+{fDXbp7t+QJ@LVZu4Oo+ztmrI~5hjXVYvhQ3!8awlwI^NvuXSPHAL3o9%7lyf*XZ zRwGrjB}3{OnAD1|PlQ}f490~a<+Y3Uakse@sTvv{nbplrl#REcre?8|bKQ*TU-O=5 z4CB9qWxq$@Zz|w=wBzOjsHz?D7fDE>yZrRqdqY%4i_5L?0ygRTam$onew2Lu`3LTj z^`ZBop%i6zO1Aj)tM^^KOCxc~LjLMzYb`jfV%Fw_gjlz&6tk5BUXT5H%R=*k2ei>b zS{V7e8s`#fDYdElT3VV>kpb_u@(uj^EaguEP@J5Kq)})B zA@`bJuXc$F+`3qoX$hJOp%>Gcg>OaLrno9WVd88Sp*nQ$FOh_@z*-&uL$&kA>PO>q z%MN2I*>qJm4pN}db5bA%3yjK*+clqSiYHc7-bH6tPS!YoR`i`SfmUATW$HG=Uke$i3tj6kz}=f!{6ymSqn*8rdn0TiTu8Ri zN#(1#d0QNNu7-J*}dhkp6|qY`RM z`vbl$bDS?{2h$`s8qF7p-_Y6T_bOd3$DP)7n-_vzYKMQ?{sdN@)8gos#uwre7ykTd z3D%0A+eCok=IHELMp;?oK;oVen$Rx1-y`DCTsn#SUMcXS6Vudl0GGhGKITr|OUGN+ zWGAjzamLJ>@?W%`OmHJ434Dvh$^WmzsOm{sY2m3XVbPXmQi0L&6prOq)!`5R*EE)vTGBgUNJ8=~|DCO2?V|`y z3hrT6%(D^|kK-KiX8mP`LHSaG=|6*?h~C~2<?k1*F z??uQlWu>L&_p0?SD4_QC?jX`e_vS>duMB4lY8hfI?Hm*p_Fu)7-k74jV6gxo4z*%D zKTl@eCq%8_h?o9*5x&rg5&iuX{_dDrna$7}5oSON?B3AVZm_vs6$r$M6pyu<;Dy(v zG&D3)(pKCPGM1gcj=qTr{9Iw5tx&z`)UKUZHi{|2J5keeYNy z!Yi_))I1n!rHN+e>wVW&GS=uie_kNsEFI8->1lX^*?0kvYD;r=ZV3rAq1vXJFNY!G;Xm^ z`SlUc3ktBDY#pe?55x344lU4Vw2+l=-Pb>K-L_N+M$1o9+MoF|duq=uo{P4|?@hCD zXWJ5+NwO(Qo+1zISZbHGw z2~$#9%2r@yK_+)hP|?^4$yJRzH$62&JQmZl>FF7cyY<{=y6(Z(_kTYB%a7S=vcWb#cjCCf`d}}hp9o;JIw=zd-BBX<2EOGJ@RC;!{?=PJgY!< z&48ic$O46Sv?y$7--o^@hIB(djjYzitdqYL@hPz46c7*~o`gorYl*VyTG~rYmyePJ zNW!H?#%=y}eU_Uv>ZCXu2V3{DM_RIpU@Vkzd301|$H}KwyU6pEyYu95JHA=Tj3x~+ zd%{8dKKA%?wg~+1r|>uL@medbG{f>+NtXm)q>72zm2*|ElKZC+nDYffHyWRjkc>+M z(#H;Hh`q#Llv2}EPGea1Q1^1*Dmr>>FIu!i|BvDbs^|q&qCc`?TaM!0a@M8bhGCSzTG+~UURo$>u*$qSRkmKvDAB{`g+wHGyJLb!-Z14sjK#9Jvyqyp95 z4PRIZF`|z{1Q2WH9wHl5x-UnaiL0LYct!eG`M|Gd@YlB2?}qS4u+!7K?PC$8X%!w1 zQ|lfKJ{1huuR3)8pn?Hr7pMXiIBLbK>b^Kf0XOdBvKN7`QegU=Nzi(DjN4XJIj@}KyY1J#4A+?*bjUgP#$U9zkpLDc z7^^XMsAcANCq}gK)IL=AFy!F);_ZXycnkctr~vQ6GZvZ0qAwO-cZiQT)+foc^`9c? zDk(TqEIup~3IjP%LLxRhFe2DaA|l zalnc%kL$3NwjsII+Rz|raK(x@)r&bm*z9A+MV<#Kl+3ALszhndU0BR<)OX+DL5Y$^ zlu#BoKiuwle?I)PIpT5pgewn*_DF^iteYK-7_hna$JTnU#RvozVhbQXUXiwq3_x-H z{peC6|G>xeMpZ>6gLBBq+}2Y642y6kz;>t_^vK!dm#|H4mgAQ(Qu_OVo-FbGvMc5X ze{D@oOzaI^&wIH}j&U+)P5_R{5#1;R|1XaY5@zj)yiY=M>++qprzI-J>PS~d?29$t z#_1W_eqCyX66#B-u+9{i=rfM&yRsMAP&t}2UlAxa^ov|pkUfM z3h5BtR}Em`lhYL`%Fig0ZIUJuYS|8kYyjMjogvxgomHwRo@v_iX3Ia(!WN6o$!eHN5=#DUyx>;nSSXx##s54aLC@X(aREPQz73Ot;gXmt}kXDIh)^&UNIKEER zl8^|j8cnF$YW)kqId~@% zo9X#e+0(fFEEbGY;DeQFz49Zfen@-{*+_?!w0Qmlws+$R8LI*u0Xyex|dr`%dT=#(dGXDS#R!UjGER%y^3; zGK$1YU)OfVEYi7_ZebuR@wzAgLf+Z(V#gJgY^^^m@0F<3PtIZ!?*o+^LV7&zY;(d3 z<|u2`U6S3E++;8*!Pg!B)osx^Y%#&xXNN$b`c-`A*8MwrW$gBsPCE#PIh{)&tY?{Q z9?*)<&4-KM8nJ4CuT>Xtx<#p6^FZ5RQ4u2ek88hQ;B{SJ@V8G&wB{=EiV|nM8+W4SbUcs?PMD*G%pk0x7S$O*h^CMznc) zkfxd%+Sg)aIEF#ah=xc1*w&48K4{z4pA2g8ej-K!(Y7p!wWlWxYA-0hnfV44!@6wY zsIK$O#T|mH_UIS}qiu5+QN4cVL&1yC(pO{|M~w}1UR7t4Has+&dsPKXOv}T~F{Hda zimL=KRu|Lt;`sLNLW_R~^y~c~=yHND0vNId^^=UIBMBX}$%IQSKl)-l%oc{P)G1ZM z-Y3PaWR?1BFr)`54kOvQgi%UMcDs?zF0wk7pM64VE^u*iE%c?u_);#UTsb`4NU*|& z!8%LO^b@IEAJqV5WEmJ!4B&XPMyU{7Z!gv6ga(g1jwnhfu6=Q- zUp^>sfHIk`rWEf(y+#BnU8_?x=gntq&d6^Gx$Q|;9xQsSuL`a$odLu#hsoB%Gzi=^ zMZBvM_tyzmgTrWpg5v`jO3mnEgjQyg#06?z+*RV-@x1}34zrxJzLdv*I}tw z0ilC<-w|=^iM4eg#exGY#qtp5z8s$HC!Y5|O^D4$48Y=5Hnp`llTyD{aB>wB|3!>= zQ6$AG3N;Ntg%cQi%EH$jP#(jAhbcE zY~d$z{mV%M;jp$v9hLh(?QXvn5sHM1?CP|XdgU0w{6~!`1!I>+mi7rDw@gwaY@jHi z=EW^#`-Y?%uGM~sR^xa+Tuk5T#BNh(0HlP0^j?|p{>gp7l9aIcT00p{< z#Tt_uLaNEH2&y1{QIi)HA#gU=r2#jq(@q2x>7hQt&vp~u ziD2ze{il}BO94?Kp)bedg^SJz3`4twW_Dnk(w3=1Cih&<+Vk}Y-$Vjbgj11us~?M8 z-FqmA;sTDo2X(bezgX8kH`W7pO~nILylcbFuc2+30?+X!f7h4ux_e;@QP-MGS_Z>1DKUjP@q#)HJWTJ7#u;H zxxGWU3HPAYxYhtvK4Km6r4+ohDd2ohzfLkJv8YIWOMJg9J;Nee^l>8b68bHdX!(a_ z6IH7OrX8P#7H*CwO3z+3fUZn@#OGf7AM3EByquN4ECob60oAx?b|otAJx=ukA3?ZG zv&lw=wF8t~O^K-Hyrs6XG@YgqSEUil#N>o23L-~SZ;gB_XO1#A_l4JczeU}MT!2rA zEOwe8t&7QHP$*H+^ZYcz_g17VsofV8(*GD zPFb#&f#sHg*y{Kten{V|bj6wNzCmX7il_S#aP!Ew-xz(}78PX$_#_;%t=IARCoV2N zBZYi?g@e%*DiWkmx1NW{->8dup6J$RVQZiw@Z2<$bQ7CYdyMc$prIdk@?kp2mje}* zK#Ly?7WFKDRwYwF3xZazdE3Lyd~)VRy=Y$E#`eK)+*nin?}Do-DA<&<8Y@&RSE0O# zQ%dfkG-hKLP~15oNmRXoU#6$01H8Q^prPU7>iPqPl7L%nj$)Ix(mKKV&5HeR4Ln1m zSmDFTGfwyvA7e{EU-c6T#@0v0>3IbDn>Lr`3&@T~X5{6)%+jgWwBWbw?x@@?1TW!) zPXiklr;3$)7EqPmGNUuN`EE(#0q@NjoTf4(P)UMBd(&*!IxA=_ePs7Zp*Zd%<)t>F z>j2wBO-r2%At12h?AAOqq)l`kUO49f(d^B)kOG>MWF0dEEFV1(_rVM_uECh#^w0Zb zj^odKKgi0eX=x$XKb!`Mv>DT+?dd57ZAabjhpprC#cqx&DH2{Tv-t=u+G@0F(0kh0 z1TMyF6c~NyJ~P5Kp+JDtw6$3j6{%cYE{PSN@4Y&nZ7;iY?EyMTMZ^)?t5@mf5LO(Xk}uB3 zd+giT{Lg~&4C(OgQ!uSf#-Q&BV8mi`NA8>;uLYk+v5p&?Toc{1ZP3H+4 z0)g1sCENt2B3u~MRpVLdxSsRWaj73UI%7Z6ISC>@E@&Zv;#4DZ7dIPMuI*K6Km8nA z(8`3}$ZO1^_uX3FUAdi%6s4hw7~*zyE@8is?gur~l1Ngck|q>Ry>G0(;BEMoBkEYs zyV~0wObOjGARGGIc$#apA1l^P8aNY1z3f0PLAJ?9v#hG6Zv9IZf_-etR^t7)OZ`e0 zwts=ahI*Dxu_kshq`<7z2>|Ypjy|YbV4sD44ugxP1jHt&OxM{|8;qEYZk8sqMOKMv zEY=F0GOna4#)nk1!GVc7Gk5g1$4x3CI?Mu@d$ip zmfyQDX`pO(Lo6uKj9H|%S9>{t*lotV?k0_53Y*e#QMiEu&B$WsLN>OHz*1c&>nf1! z3q7{P+M_F#6y;nL>q#ZCNCqxc*XwSaVD4mSSeQk}&rlGp8=x&uycOWV^!73x4ANX+ z7v<5G8A2Q`O@h!wFJu|taY^JsqAyi&kmBTasgk;0f{U!WMK_ov`L~t9Y8x1t?2LPV z&9`x3v%7wJWfuEN#*P>+$@IKElf~tET znEkClj-l8RRTSe!+_}3dsL;@;l;Po{p`Sz3^44uHr-EDO9w?~3zJ*hMDm_#k7;?4# z4O;A~>PWfM#}q%Q%J!i8u*~6jPz>sE*4D_f`44C0+Q*@&4RxjVcBTV5DV=#_=#>_VIlsI>F4x(LaLrF-{rFKN0bcE zvv*rs^AFyLa#c+nsZXdiPP*P^*HTv0@}s3YSdF1j3~W07>t-5{({;U?rl)B@p!?{s zeYdScboa0@08W`$y$!qx^O?CRsV2pN>H$=H^5v^%%Poi{Kvm}}SZQQ(FXBKQD7UDS z$fCGxO}YEFmKv!9M=w#>w7XLUTEytVi%8Fia#f$ElY^;9q%stL;-YZDD(vqyJ(qb> zEjHq~|J~jZzx_%6s@$$Ka7JF5VugKNlZkAFa1qfq~a4cktRyhQsfj3#;4V~V7p9rsy1?y)%&W&sYt z;{mU(AG$$n-^D2Uv&tzM+UI437c7$ae=f zSj8^6;qXsQ};1R4vgo!}5JhDK)3*eGuoq5wd>9iYo7J z532;3;N9W*S@8?lUnvH0r>V1NQiRHgwvyGsop#NVC)!0zd8{{cGAn-S?|$4)Jbu#^ zs01vH56dI+`veCK%Q3yT0=?cz8T^sy;zs@Ve0&OSi#Ba{*PlN>XR|$)`X{Gmp)xhM z;K(KiNt{D&8)1UEkXCn4=rrq3VbV!3f>$f8%s681eOtk^Bubf3{U#LO?op_ z5FDP;Wak|lbOU&LvTaI0RPlU}5BuW6NQN6rj2q!*R8c$M+2!-+=q(ZL;<<{qQouIl zuHNtwJD6c9uiiTN{INg+B;erD-955O{9@$-u=@rT{!0K7BGR+7!?{WBd6=*y%k9^ znYk&--lUWTUJt-6D_7D>y7KY?H>&qbM|T{2%`Fr!J$dfGBa1O@^AW(d&oXzh){{Q% z$rq!c37<<65J!PZjcj3SstPU2NqxBD&M(32u^)mg-L#Z1GyA&d?s2IsIm;>K+d@*Y z7z%_z@ZU^a4%gRD69qbAK}aEIj3-+u(E`;%vx<_^9@x!X2pQH-pY~$9em<)*Nc8LY z^#bR-!`sw()O1W=t12&T?emy)Kla#02YHDE=4t_s;I|n`Yu83BWUQFT1_NWC>JIJnt?KPsN1S@OdV4j&C6zZ}FhadWT-!K<$)9W-lH)qrR=kMBR`q=sB-_f8NGp1ZFB^FUR@$m$E+qO}xf-u%x6yGC439pC24xDQbszM2ADD>3ihNE{0?UFjj zoGo%9#5`Ob%x)P7$jbw{<0_pusKl-Dwt`_t%w@1!d&$8?@9(J!#P7bLp?B%P5jM*; zDXHKi;g-TibBl4uJ8I=vT2*Gb@q*9lI+7{ zzH9x|!;|lbNmSum3zLGB)ykq>*TaXtWZ<|{x59t9d976-DSt3WMk<<2Yja{jU( z$Gv;p;u}+2muC2gnPv_u4ltDiR)X7nu+yG%X-G*`JyJx2ruS;iR~eFcgIjKtV;}av z0!4B~tXP(KhDc&2+BR?7GoHI;u|5<>gy8K%Qoeq3qfy+5@rUwKdaw7ZuQ9UTd}S#0 zdnN2K{2MhDty^|}kq74|S&58_3CU)+@zOzv3add#2J5(F*eu{;eVvKDWV#a(f7B9YQ+ggOPcj!~Fv9CvkCeqeJSKnJ4<7_C`Jwo=Q(g^6S{#C|NKCP`$Zl!HgZwSnf{dZ1nQg zgnZHy*xDUTi82Fu?Ze(vBO=AW9GS>R^kS)TX@uyCql|4o@=WPTic+Cqh{P#i-pX2o zc^`P@et{$~MX~Ld$upd~lf6QbUo)fc0`CBK&QPo1dF3xtHlMqFATj=wDeW&UC(LR> z0krwSk#b=9AYoe$@(YX|*p|QhSmcDsQM|xB&qrTdOGb`|G%AEcvh7`szP@X-KWijGGhlxilRHY_7Oy)U#_JlWZwiC!=^GE!?~f4g)K5^{(E>dXPAe_?CeI5?f zVyf$iFE%`L@Yw{fS8?yd6?IPSF9gjkMdG5_>yyIaQ&2H~0I{>fLM9!VSH z-$RrF@@8NGJi9v7$vQnfM0;uM&dr==vGb!{Tc?7mH<6GeSn1*eI_fx^r~-iUXP4uG z_PWBZL{DIEn#Wto5R!ZKA1myG(p)p}{&qKzhE{pw*V&;aJ-%ZX+uCBE@hS^akq(Eb z?2P0_y#1<4AY%eJM~gLSkzo{3Aru(OMa)p0%Hz`>W0%hHGL$=2^DK&rj+o^{1+DfyeLb~Y3{sAk_z zpZ3RE$!i0d!mevG11pG%7Hz5CtFrY$R?pI@sjCUOXTgy;u2E32RldHvtqI66W5xN2 zJ#F?&{7v}|fM?{G8!P=53-X;!`7h9q>I)4O>8^tRD?4+OlM|C9Ao?vSBcRi}vA#{h zCiwhFd6Z8n*C+fXR?UW6HI=HcuyC+s z!1*!)_{QJy#V(Re|1tA)G4MrXXKqmketvepgh<)I6*fyP0(IRSo#!)8N8;wOzSQZY zD^3Zh7_~LFSo1zItR+m zOrU{n!^c1!BieEs!X8>%Vms*)nEndKlpCY#L?55AEU=Qe+$JkK&1#7mf+QI_uxCrl z8O}Tav|=wkrwsgQX&~IZ#B=ZFMk!ekRzlC@`5jRQZAaA^p$TaIF9}r znF2b@5M2C38t4&t1JbLGmdw_v{E#9c>*=+codP_Ew;UIpTXJ6iijKgRc$Exczu#MfBtY+xIx@LxH%Y>EY$O%?aLY)XPF`3^am;eMn zo~kN({^KY_hRYTLn<&U~gotR-y6Vtn3Djvw(9qp~eS|1u+U^4v24mD+(Mw!E<}Pnv zun<_WQgz=WKS3}Dm5`z<5^?6aaHMriJC1kv*5y}|8E}&e5#mN{-;UcBKx*Lee1s7A zopVO`BKY5mKm@bthhXqGa8y`yt_f7vELWXNzIdI*E;ylSfC~`di^{L&-s7wn;-&C8f#LVY9QCiSgq> zRjWn1hn|LsZlE)CIzT&bEs9}{+?z4+#rjeHrJijalgU5~sl!A5^gj!pB=T)`bzD}( zQG2S$LsZ4}45&S9vTk4PZg0%!@(B1uWz7cE_PK6Mu0%7f7Xfou!5pHBc@DcU;$Vr0&OJeji!646TTMVS)-;CfBJE1 z8dc1u)swYA?s1bG^q9!KzS-p6_%%VObgGr0F~Hi$GmSiaPk!dMnhk#AsI5EI-TksY z>&M`X)!2oGYRrY$c*1kjZ*^~me$CdbB?HbnA$S<-Bo(Q z|Kc)ei4E72F32Anmxicb>U{o;5U8Cu^gYD2laekC)p&wYar%szp@ux9_#wz0w6g|< z^H-`!2lO$K<)#fN<&tkn85mQ#&2H`F)C7CQ>nT@e;ELKoxgjhnG+oK)Yrhm>e8f#@+d=C zXNUMvC|QohE}W%HUhOJc$E^|V-1Kw{Rdqe&o4V&oj4i5A&aYdI5p&0(pe4|RHhRB) z7IXi$$7btrk`o3Rv>6sJy1Fzgg#Z23{-Kq2M4U0SUAM9WxHoR*f>(UKMku?M2#pr)q54p6hy z#pkh*trGOOuuK3|;bQyCCd3Fks?up`B)eEF*0@#`X9Bds5h6Nf{qdgAlDf}OSZ4wD zDwsb`CC%IlC9*ePTT0gWz2b1f-UCCMkNC~iuGDkha-B-*>PWikFI3o*)~LrR){5U~%l`t9pp5EP8IAZPx}^OH`R)JVK?oV~K{TN8M_uKow$D(@WFW zxw)xIOUu$g$8AVT8jOoX5(V*{NM}y1Dg^-k$$i{6+4`X5IpW`b>T`c!st!k2FxGLo ztu1rdkn|WBmilUFbh7aW@%y(FiO!*DyRZ46w@2N3VsbrZkXei>PXFmQaK0XkyjcFS zFHOw9zM9hu!(}K!cwzzKC=5u1qazw5IAUoS*D*4hCg!;1a3vi_b{oKBK_{zy1mSZD zIRa3?+`?jd!TfNyLx5#PRbD=8#4-51$<>diZ~cToikfTk66T!9L*M!3s2jqzUwtQw zU0N+E8?rJppU7xNeE9IVz{D#OlE54hS5hTkjXEEAO6*?!y$g7m|BX7{$^_p^cHt62yG1bF8i#mFZB& zd0D2G12gHW#o?n# zs)zr~TKS*^^*{=(+F7HLb%hMxT=c1Hj*~RA88+G0hXm&y{0LDYB+de%`{>=`Yd&4z z(9Qs<>S+%al1F8md#C7`F#1_#MH z;7KOjU9THT&&<2w%njmg45IO7L&L)~zwBSn@1C`_b=amw2gnY_0Bz^fDazJ9Y;Z;xHm6hgS}4*F>mNDrOg4F%;~tad$4vAs z6A}8^`Hit0R6&ONMR=G9dG;#q>H}}S9DSP@QO|GR>UZbBD%GlZUg;T||4@YUW|gs!N8-hx%Co`@Rl?xEYCG+L$zOVIGkOw*fzLKAY%zu^ ze1>7U@g+Z2&t~oHpMf8rr)4nO#$J&*x8JBK7+^2DzwX!4%3V;90?R=`)a;`#UL&rhT96!9z6G|vY*l{tlnU*tglHOvSjh1%7Ln5dpoBg_brv(eo~M^^fJ)34_2hi05(7%D<#C zl}!?4`CPxpd+j6RfFu&fDC%c9@zf&=eq>|oj$AK0`j)7$0LQU zKuM+Pe(z=$yYu{>19$u0rjaNg?ilEoa`hgtVGLzTPX{WHr)TzRkZH z#PmeUWRr+x>hYBfgr4iuLHY>vB+*eFor6O&#W2AN2iqJG||KY2oYnAKE;mK|e z5LQx&Es^ym#BJC5L5eegQAibLdeHk|U`pvbYo7_v=BaRk9bFZ@7G+(sceh?t-KPKR zw8c*f%poxb8tb*qA0TA(qgw33_(}@IY0rbqh=h?dqJ&M%H?-R@iiHsk1UvjyKT&s7 z^k2+;I-Lye_4^9}?_nYg=HOE1g~B3FBIw1zMTewZIpL5%S#!(+#GjkNLH z(*^NHi=X=W!9b>o7@&cDk9=P&_Emyzz?ZA{* zJuJ3jCE3t->Je`7>sIpJuUBBo^v8xxgqFodUkr>yg~C`tniy^=AgD^^P3=Zr@D%LK zUF*uay7weCrNkVMVs(sBdK1j{cnrUC;`#YJk=#c_#xJ{`?iAvVJ!40kqeKl899`LA z1ZJsBV0>}y8sE$9dt?ee;wMfJu#=eB-j7E-{*x|$-RRgr^Shh8Qh}Vwd|U3dO_WKt z>3k_hS+dr=eUD|cMih<9d*S21?uOZ4S${B(SAotU!FZGM*sKiyY_K?t$JH8`F&Dw}%4IxYW zd&%QGck@A0Bga%jzAL#e{2PREaZSZGjC}p`rlep4FWQXurk=A)#(3`6+dv4_uuRb& z15;W6h1UlcT>8}$?V)+KbggQ zX=r0y+McCM65$R;$F*pt(^+xMWA*FL=ZoSud|W{P!$EA>6!m6h^Wd|T<6yHl=NUVp zC!N-exMpZAV%#cP>c}jSHot}Vo%bit6qVoL!S)j+$E;I{{$no}?d3{$@IKnUze4;L z9WHr_w`QP&;)d&s2hJnyAmD2D^F&IN7Wm$6!Q&f*f|t5)^gPCfg`$U$``K3?EFB6^ zkWeT)DO6c|te#M*j*HQq%f5< zuMX7+SSs*W9ze#=*W%EvL(s*=H8OVMDKW%>?Ho<<;StXf;vk(VDJwIFf+|r6&KJZz z%n>o&QQfeqdsC!LBnr37!HDP7%N=!yYYrMq0~ouQJ`b*)o)_K|WuZNtzv6jYO+3fT z#$$6~^7N_z)6;3V&3?-jkBD7#f(gce3(fb9B?^hT*oHypdJEYnok&JpdwJ&&qbV^u z8l>kU2Td(X%L`(>oO$DJ^gY|%jS@G*k;Bhi_aRuPrfbEKYVoXEkC?9CBoAJjOoF9M z90$D4b4lL+p4W(5D~%T4uD!0?fY9;hT5Xmj!P!Ck2^>Y>d)`q~ETMiD16Y}0*v*FW zsDN&B&?~js{|zgD$Z&{)zzJb3Ut_bIJ%}BO@O4o;cd%Q!VE`eSrrI+d5|d*I_r1J` zaG5q@d&IzFPyI~Fefw^%yWf{1|5`Nk6B*bzyR~*{<&sKl%!GpaqQC&lMNF>lmt--! zVqHE+3E#Bgwx3PkS`_d^R#X|in4T;0(^HiXSR)Bx(iQ$fd6Ddu@7LtyN5x{BZ|($A z-*mY;I;!V7pDV%{y)XtX=PJw*OB6mjI%ofKgBVImz>z-Oy5mm4kkbSS=1M>fPUySt zm_j1Q@xJlKVf)M8NHZ07wo_kCz?=K%?}mDB<9meB-%CcyvBAg0blN6vety>mxmBzx z^_JA)nYf{Wu*;6mW0B8h<{mr(LR)h^wY`Hy#9V8Y`>v+P>bfB=PtTr~)?zWM78FIN zv8Q@EPttW+(|r3F&W^|eg!46DLqJ1eWoPMB4I&2q?G>4gQk@omToLYkmK6%(aiMe4 z+P!#SRGSm6LCvW8`d}A5=WTwX?p5O12sYwE^5I>~YGltu&8IDWPu15)8jm93j^UQ4 z{LqaZ&r-c2jn_A745%MPoJ43y6pw2O|CmT_VG^yLV!5s5o0%a z(m$C{P7Ds$ZmmR}-mO_H3_6K!$`(ryLXGy#r^KkPP~AH;*^{m>gp<`2I2lO+^9~VB zf@Be&LKDIK$iF5N%x^W|)D|>7GgRywVgG%Rx-H59HNBq8!@>8>$|A<8<(UeW>F#Hv z^r|YN%n>OP$LnZ42CSM}oKJ>{Y59TzDM`o1HjEws?@|$EDp_K4v^3d^uHb~pZeq~p zw+51$S&(5IQcIgD-Iz^#6z{sdQ%vmQ8+dQRR=3ftqV4#@b`21Hi3D|juOUP0pf!ci zS)vjx`p56JK>wew+PH+y!sujvEb4GOTcvF>Np-L?YQk}GRx!z_vF`MrX%%%<4DZ^7 zmtNRY&DQYS-EOq$D-swsgSHCtNg$-MQz;LN%=a&#L~o4ncB}4>2*^7S7~;L6E2W`b z`eIiq4xYepzR|#4@REs<9&!w~PL%@iXeTtdSf&6#D6&~)1aw_qLvGt7T?)vk<5-qP zfmRX zdWcF#n3jaZP?a5q40KY|7{I4RTHjLIklq@3nba6~$-MSq(}j!UDH?I58pH;q7u)yt z(@!s7%D?)ymFuT|{`~nFR}Q_b#0duJ&am9KKX;)=-P#(zPZ<~Cv3WLfiqS3WqD*js zW0M{T4~#fNmmNtb9E_w}I8)+J%{V|eElr6tPsM*uI3|~6WpnZiPcIs6)-%b?KH9O7 zbLg6#x!7mm8K(Ddshk1HcGFa5E0@k(w+<0#fi z>W+Qo*&H;HfYnW7Ek{S|M|9!HQD#kp^2#94IL_k2&6hV31%xf`%_$E7^Jmqg?g77R zz_W}0s+aWNin6@PG0PCPe;pM`Z&)iF4A{bq-mpZob<|- z=It@>KPeb`6(N=)fKIgcJ1KwBO8%_BGBEesIt(CTQ*+-PsWYQ2AJ0S)(&ls{{x^hkTRX&cO@f#;ZLkTR1z)!qI6*2-g_Xy*ws zir8}I+0~{9Yd|HwpL(3EW2B#gP+F{MTSesOK(xFjEb7HR=zb@-syiyKRfZi3cvA`LbkEP*^7d zT^}gu$UREFe)@xD`k{*RHA;jz+@ahQ^4mH?TvvO0J4@F|tHk%_u*|p)6COF-J94V- za&FNV3%g(hf54s6cHG$SjB@=HkmBbj_60Dg?L#++_OK!lhP5Mjz0TXN`z&RO0xoWJ z)xPBYKX)+VVlykJq)@pYCCgC8$Q0fVR~&8E%XzSMcjp6Xv{M=p*6co-#LEc z8y^?q-W=Vh5VyQ81B5O446;&j_esEt#l$5vdgejt@TKjXf&sGJjC4@uGjqPb_&5bw zUg8q|YDO~oa-%&)`@shA!RHt}d^?5|h3H6`Vdp7}UEF+fzv<9}s-O#h>cNIZm?}O@ z^_WnTf6udZ3fzE&G0b-7BW4@!6UDcgIt=*7(VsjC9-m^P*Q?T)Krq2gYj+aAIK{&E zC9z)6c;&{SAY7ZI(O!d46wF9g5HAV`QNfhQGeA zr>a*1JhP;VH&-FQlAe?L6eiu$K{7N_D+ES#Ni1Z*HpS^2Ui6(KFH!NY=6;$$g!^1V zi0Gqx`*K@v?LoH*Ca*d{oWpI5zBBc9h&ZD7%rz{5@8@&E#q|2>B}LH}=K6eqoOgD2 zwC?yvMMWvl3Ev}Td4fIh($a%wCH%K)Iuod-x8?@BZHcA_zl}D0<;FLw#<8lQL|HNz zBQz*EFx}gC=evuHyO8zNCRGd!1aQy*@>tF5vGWy<#IcsL?S17rYr!PgfN#|f5XMZX<0qa*HONP4ZWpMipn zgj^x$=TVgO1!~rM_wy<9{ug_185ZUGwteF=5fNPyO4=x`fS{C$iZn<{iYT4ZAYp-$ z(#?Rx(A`4_C@4tB&?z-ALk@`<&3Wr-7qjxOa67X;Ks-YKPk3C%@I<|1@ zo@eAyr?4bY%R(egpKhLdE*1KySnU8gemlkm(Ch~2y4;1rey-JZGAn<0w90>`c!lUH zJWFq_bI?g#X*vD8U3m@qCex`2A*}hJPzL$K4Q(I(t=BZOi!VJAl~q*cY7B>S=X$3q zcppFsw5P)C&>Dc;I_0am5yRQ)R>AsgVenxgmp`&EKC6Gr#JL0hL)(Q`o3{|;0^+w+ zP@bO;+`F9fdCx1@A7qi4@cgD&dbE6JZ&OklL1a2u_xjjRP|D1NQ)F_iCatgDNI}LD z>a?ewpM2}FLd$CUjwp+k#*KU$3`u6>VOBj49$NoAqo6vuGxT#IR_H9DwbR-7p0di> zkA4$~9Iez|t#Kc$XW#0RpM;S8pkC*z=!pnq-E*+~QmW*2271&5Zh-?3LnEVhJbtwQa?`hV$}=*vvx>G z)9prEk6c(jc3^}If9yb*fx+}1e!YMRvpztr-jyTo@bwC0gq1xiA%4FKKmMZ1GY#>s8a;oe#fvkz8vX7WEs06t*Pn#j*B56#2j{8ItSKc z^RZ`Sql{%v2a!9$_R56;Wfb%r(V97By`R$N1)yb#=#hpXHnfv^*q;`BXkBcq_(5H) zmX_8Lhu7kj+ndMC2ST5&tU(=O^=GAkpvBqVi`DTD)kZdx;>s5;Yun8BwJ`tD{ZXEF zVErvZCCinByVu}H6xvvA6_P#TaKDMl6AS}hThqwL`9`nK~PJJ zTK+N=#nZoa_8D2KCG@w!-N+u0|$@&i`F zfXu)_b? zqfwz$sp3stY`L99jw)xf*vz{+=+wDc z@6^?P$PA5pu36d%$5l#?wK9)dxE%f`lwW|va_2ILNI2tCoj~{7mBvchm17g$r;UM9 z46-%QTn25@Aq+O~IE(4A_k`!EYmW7PjOncCiX15SNN=mEs39^sgne_>QW|Oa_vVy9 zHIxs62n4;sRdr!n*2RhkQz41?bhdi+p41ESV;+gIH2&T&ynkC_ak! z{Eu=g);03AB_cn|k1pjFfdzS4>~jIJ%$?e&O0H1qeW3kvP2DHuFS6;YIjLPL4#Ekb zUXH@q)JL3zn?M`%26;x;^)-sj5`eyDj2+%@kL`cqngzucq>Fw=)_SMv=wau@K7sk8 zLQL1=bGSsk^v_5}*>>JTunjlNHC0ryyc?y!Sbi1GRm?iG!pn~1oZ6L&02GOeo6HLz zR)qE`zwML4S)Jceg^_cq(8=GQ=C=6;TsHmH0j|3as^t`kICp8F;k7V-<)Wc|D-_Fb z@HQ@DCmZQKM$Gg=bp+vYxgQiiaA?E0_p=-QH9l47A1FG$x1*A)sVI%O;(BvJ05bIK9w4cEkKqwCx$6y2UhEvQavW5JkGXrUAY z0E!ahZ9vh~?E`)5aqDkyD!_MR*D<=MQS2N%Ss4J`@)VE|@6cFG&Wy` zFR?c(KYw;l^gsjDW5Xcs(B79CN!r-8&47Ca_J{2`Qp1Dw!mC=FsA~D2eP;;IzTT8t zBd-UOsGvFC^CGX1TKM2KX-A zV{@}se2EGYluaBK_05V?*%?i*$F%0KY=F)0(A6> zb5Rl)-Zo35un$U#!qLMy_OikbpFADGQZEPUP2_wKS>Dm~W^gELsam!`z$PF{#BOtJ zl+;`v{=rZ^xskvKR5%2>rm#?Ydibse-!Lt|&lLnO4q5{hoU6q(}g(Nax_2 zO-k)oe(nthRmUOuX56|h1784X78!b=pS8bev8Bb zedBAUq`BPThDVQ8lDip-jT#3~rt|kpj5Z?GW{aq*+Rp{QI-l!@3Mf0=!~~b3xTHEK z2b5RM*mJNCfWV-@=x@FQ5DM{4eTrsy{@&-J3N}KlHf#52&cW~tgye{;0LpVyIz0D<@Qf&kK^!-->?K}%)7HI@*8 zL7vcK%Jm2Pp zQjEgHbeV+L-R;619EDFl3>zS+QdhU<%Y9hywJ&N<4!Te zvz{gs!T#=@rD@TP5Qv3DS{)J7wMn2O4y~)dSfRk#Rc@*3=ooj}-*l?4KE7|Co2RMy z$<5ef+d^~m_KQ{s>JqnON>F*w zv&52Z@ePN|yoGr?b@_U2mCXkU&lAs{P4=$37*!7s?QM}n%58IJ$0mF;wUUz!_lP4- z_MSrTyiNxF{MmwG7yJ`~EeZrPyFaD~%K~f~sdg zhy)HUdJTQ>4>>uOGNc!E`veRpfK2PSb{#DUWuin);~vC1B*wWA6E9b@*o1}Md6j~r zIO@X@^<`_A^9{V4AJ=Vs#}=jsMw!_>uffrUE61R2&_q%289){#vVn5CH`)#eFSGPn zmwTnb&{_Kwu(2@FS2*cD9rpr%%)$EzFD>DV=sp8wRh8L(464KP?K34;pgeJiIF0zx z${r+Z;fEV^bxA-h5_b}sxJbo+GfJ>w{t9ds)FwO|SVeFOuDqrZylpL+ma;31&5jCZ z#)#|0#Ryp!DzZ{`XbWf=lvaVpL$`Hj2)e1iKH8}NwU3W-qhz=5^BQv7!lh^g@k`WB z?=L|hh~AT+XfEqKPNVI#JppEN0Ejeq0DQp{SA22dk*sX(J7$!xZqf6ONf$2?iPyAD=ccI!d_e`OrH!wi*MO%H zfRM3P7|8LF(=)LB*kSp;L?|)1?oD<6LOEy@r-Bw$2-VzH>SNgsYQPp|^mp>3d~_Zm z;R~f!tbZOACh;vt?7|WkVOL3?hIt5Pv~5 z?j-2LtK6n=7}y7GAVN89