From c11380391a6b081a2ae392fded8371f038d500f2 Mon Sep 17 00:00:00 2001 From: Matt Green Date: Mon, 5 Aug 2024 14:25:59 -0700 Subject: [PATCH] Update Readme --- .gitignore | 1 + README.md | 12 ++++++++---- docs/images/denormalized_logo.png | Bin 0 -> 15675 bytes 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 docs/images/denormalized_logo.png diff --git a/.gitignore b/.gitignore index 9026c77..a1ab9bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target .vscode +.DS_Store diff --git a/README.md b/README.md index 2ec0b23..e32af89 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Denormalized Denormalized is a fast embeddable stream processing engine built on Apache DataFusion. +It currently supports sourcing and sinking to kafka, windowed aggregations, and stream joins. -While this repo is very much a *work-in-progress*, we currently support windowed aggregations and joins on streams of data with a -connector available for Kafka. +This repo is still a *work-in-progress* and we are actively seeking design partners. If you have have a specific use-case you'd like to discuss please drop us a line via a github issue or email hello@denormalized.io. ## Building Denormalized @@ -19,5 +19,9 @@ With the data generation in place, run - ## Credits -Denormalized is built and maintained by [Denormalized Inc](www.denormalized.io) from San Francisco. Please drop in a line to -hello@denormalized.io or simply open up a GitHub Issue. +Denormalized is built and maintained by [Denormalized](https://www.denormalized.io) in San Francisco. Please drop in a line to +hello@denormalized.io or simply open up a GitHub Issue! + + + Denormalized Logo + diff --git a/docs/images/denormalized_logo.png b/docs/images/denormalized_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8bfac097c5705e772b617aaffba999e7a6b61706 GIT binary patch literal 15675 zcmeIZ^;^?#+&)YQDkv%-Ln#FjX;8@#Dj*FK0>TKHiZDVpx)FmI-EEMPlN_VOF`6MQ zQjWpM%`rO0Gd}kZ&o9p(a6jMUyW<#K<6u``ulM;n&-03UVx)bM9H(!3x~v>-+8^m*rrM9_DhGL2XdlivJv4ks zM~8@KJ$lYWN2fBRtNGB}kA7puzTa-l|HeUXWM5cdCgY+RN#{&lKtUL%qZfO(rd3?Z zg)Lq|4)&lcw}8=^G3N6LZ>ADPE3@>@#=G1~h*Q$7ew6w|@OkD6UB$bbrVmz4TsbqY zIV-z&Y<gLanjL+t=@6?uRu3u(*8e%Z(qac|0|hm(=+~8D2Zb@oew&? zCwxp7{wsV^{=XIdHxd8u91XtYEC1OVD6kx-y6>e>aM)JoK|XkVcC2Z)#&*~EWb!G= z<0Nn*cq?9+j!tpnvjBAf=Uu=vOa!)$^7-$bwRH~t_X~phe0-4FMzW}E{l++doYlv~ ze@y9I!#1t*`8BWkgj9f!bK3uFm+t=;t3;awkq&n#0%6wiWknGph_}_L7TNRb3 zYd>ma{9n5*X#@Uhqk3rJyVOr=GOIc+vat;gBx9XW_f9sK{7)MG)Z5Owp#<$Ly~M>W zcTW5dy#+`o1*%TeMPE|u_~E)`Wh<22^zGz=Ya0>F_b;T6G~x(4c02Mr7rxoCM1CS>O{*sRoD6Ys?TuqV!VW+;>y_xmSkYhk&s%{r)f zcDc>o=GbmuEw(H)t$1#^t9uU%V3}7C%Y*bs_3e`beyG(XJ0>Kz9gP)%vG>)8P1|W9 zuJDuTw>QD0I`U4XjfcGU1&O?;@Z;d-=DmJQkc?(|vqiv%CB{!a5XxDNuFi4bVnwX> zhnxjGLnbQ|oWb#v^3F&xfN_lSjDfs3=jnr#v2Et}-|9L(kz}s2dO@7>*S{CjFB(M% zIYPr?oHkc+SipCc-RhhpJJLy9!tLrA-=NacGmP6&H})r!Lnkh-P(6ab{`q!pUg#e% z1h@Z#VILnfSIn1B#iPKb4sWc4m%1)v@1uD$3-C`>{vg*M$Lu+D?JVA0N&uc(To((#vQg}3g2o4EY|N_yFG5;rnL35ZRJD#ZXT-sKGj1r zE%jCv~}$kxFBw+vPo@QI6^+yzfrVw`V8n6WG>}?pm$~=J&Cz` zK&o`>cUFfPLEnvln3>!|RUS)KBSb5T;tD^b37ZpDN5KsyWHt58Wn*T^B2e$% z9&31=jcE7(Oou$GsKhYVlWYOghNT;EjHj@|1>HDHI=SSokuPrE&m7`M6&EkZs z=Ni4BOOwW-CNqlHbdRlGp!;h0EGj&IacW6G=TRS{xulXNJFivkQF;CMq@%m89q;ZU z1mXjdM5sitF|{&Z2yH`9copv4;+U){rWp|TKuWHw69Us_p{!X3O36gmLc?pfW=3d-MBdHB()q z=NLw;l(*tiN_7`rBex%Fkj{{hOlmN zH|t5s6yIh(;sQ8EJ$RQ@cfY9U!I1AtgteiSFoc!La*c-rm;v@Ic#~)!gmnq3TDXrk zY&g=b_mouw%eG2%%?7Xl2+@SQ1VfFAuD+~PLadnxa+~znIUcf~wM9SGk01CIcpyYLk zk(lwrXl<8}s*zWjpSwD#wLJuPk5@rG+iIgyxhz>7DhX(ifM@g<`D!}|VNG=Lk|R8y zaywNN&p>GHdAoDR!PQh^$i`a5*1+0It4&QxV(RW`+sC6;39|Je2DuNu2r>NFlNyk_ zY=BBAQcNpXMcx@wZ?o#JZ%%+{iS5+0$D!yC2W-kPA7v<&aGTbPp((x&GuZr(w%Wiw z6~_rp6$+3vtG@C++CmY2Gq|lNWee^gA5yG?>(}Zlc9It}lERRb3vD|!BKJOzp`rSw zeI?_V^u^s**rJ6PorK!GzH}=4qTwW@m!wnHP?5!}MD3#)T+sXtvq+%}6w09W71uBnF*x-~<$? zJwsX}=ZSf9w}+BC$yr{v`Zqo}2rKyTZYo}9YD2M3QJmcy1`JPKVvxO;plNWwq0x_x zX+{bE9?wvk%YacHC@roDhltKbAa}?{J(l^5P~G$+qvOM?x(%YC@q*9f3emX71BJr< zooG_XJSy~eq9vy^4mIAC^3Rs!`)aObF7Jh>gby&}?~e1W))C!a(R!U{@zi^&iB9KT z4bh!uq^UPI&D^z8py4pTN@)0~0X>+{)R>@@NolWZ4)e)kU5dRMp7;|AAga7=m+2(^ zn&z;87`D(F)a(meBoRA^IgSbh&S-#ckR5TFG7vLJ?+jPk!Am!lW<9zhq*{z@7|k|) z$TF$uNgn33xiTOJST?%gQV`~O9!6Z@ZQGredZ`zDvAEe`wq%djK-9CN5qBt8jMKVX zNcQTjXp#{0`a+1M0J?cYp<;}WbEl)xZw1PXdC+ttu~-c+i3&A4w+7@)($DI?V$RyRtz-Qcy>;2HZx55y0IgOar_A8bFgfYB@!K&y`asdi=0#$^hkV1xxFS+En!8#p zxNY56DxCC3Z$Oc%7J_?!JHV*R-C(UCCdSX7Wy36t!U3qVNB@+J{Rj5N3UDIgH1!6Gw*=j1eMwuy7dMuenh8@VspbPIGdJ(`hP^RqN~>!bQ8kT0M*#MS(JPvX_; zZP3Ma!v2EDdzj-}Cd=`D_o&k$Gjcrq`eyySWavtxI+ggE_0`Wy20t^3Awu@m(?^^O ze?_vdvnGdZP^P=e{!At}L2JixfThRu3w(0xcUWYvNHT7(0j_SBHKnRILrqND9LWdW zsAO}A8y1$>9Y!|;O{b7U6xCR_Xxpa#p;(}b%vDLphfQO)6DIc~Cr%-mZaLhusa)wwT+putUux} zkIh`j#1Mc>^`=+_`J;8}W;(ies4?=lKEQLtDq~Z_2H_(CN4B>4t{?;ewj6~hItVb+ z!c6MT#9(&%TJA+WLpp@t4U(zG1b08`Tb5Ur-9De~nzj&2Z z-vm4du!rkdXLLFtM=7L});8r~zMy3)o1QgF2zHM?SkEy<>L^#7i%nK-G;NX_Rfv1c z+8TUUK5n?}o&pVyFZrIJYO|HNT)>h>I9UDh6lA@luq4E+zgYcuXuRXY=0wk;52S%7 z^4WCPVR=8qy(4YSwQ1*PxDU>bKWvTyo)LhtMe})K#r-NhP1I%1nknw9>9K{Qq{51X8~C>~OJJ zxbt2lY3qCL54okdaJ*hnL5C;&spsnV9sXZRnB*;zgpvJ)0< z0Z;Xtz48YAj`RGt>po<3jWoHYz~Zb-?cO@ZX)mgaLh6Nwp8O!qSOx*?T%=7RhAEEl z%tAtELQ{tlg{^a|CgJ^+Q%Pf_IkNWc3%w-^%)d{i`91=&G z-ECEuTX&IClCCstj1#uz>a3CSf2ZV=Gu9drtV7}|wL3O`mb?ZVk59#>iek3O>tFsg zq*~Z0p$TFv;6&a#8GBtcpC#c zIf)(XN!4@>VjjWS^qbqm{DORG0xaGZA187*Mdwkfo~G@dQ)88tBd}Fn#QwU1?$b^8 z$fWZV+mYy}rTN80916%(#j7&D;B~urzAVJ$O5r8l^Pgm+XM}wikLtfz09J?e)Q5^|<@&lYf(jyD^W9{u2!^;G#|n$2h`TapI) zbQtpbw<{}mq4f*Rq}yEna+1>!<9b2@#eaf7=$7!?gqNQPoXpt(@XK3C5TzdT&9?}} z_p(K%6h|?mvD=tU_TsS)UZe6ci-N2#vc6Ttf|yBcgQhF2v`u{~1b_e4FfhQ0Fx220 zwA@-LPe#Vs&LYR%!1+btpUd-t%O)4QWG7+~Qr)@gcV^fi_w@P^;G9R&bxToL_tLcF zH94Q@Gd8k)43F1ui(PpzJ~XoZXjt~U5~nPbn70h5)b1i#BJG54OBBmYmcL|8IEXGQ zjOLb=j`fBs?@HC&3OE`cf8|kOy5U(A;#je?=OpIxx+OWOW#RbP(j0LvK3PC1Un}&H zM*-TmvQ1&OD$AFT)It!qWdjdVWC~2v1+-Pro$(#`8Qa%4BC1{eQL+S2Na=uhhuTt$Uv}2SBUbU(I0k- zBd4^>8aYs{a0yeIXH|xf>>tG&Wq6>idI~QC_tu;>c4N!c^<7)VBr(Ojx_N&2UkV=& zIJRQ1iU_Fxz3VZ>)pN{#o>2Qr(#;_oKjU73m12KuNuc#f6%&p{-gT9?zLR~P~Q(6;dby`xfq}bj49 z9F?ns;Awl0(=v5&55gk^yvRHtC;jk< zd@rTgF_d4K9%u+y#{rRRc%K=4eQv>uE}i%1!fuu4U}U3=rK=)lI$>c{o3&Uv2~;d) z+=}PFFvZF9aChUx$g(3tWF5M6$vQsKkvJfSO;yZITYF(R?16VKfA12@1D=2M>S=pq zUlEiI?p*vJ=6%>SaI@<&FcZcXoUa!M7y3xK1qK5;OGiAs-iTHN=O5(n8W)eOsj!gKiqbYg4QFT^B^+_47W0koImWTXZ*r#IDSlPmHE1>0Y;5ExsNk{zNq4m@e z$9p8NIw^B*iPXZTp`Y%PKIwHOii%ij0u?89xi%=)g0hicp5((W*1BFys|q%s+8h0n zvBsu`Cn~Qhlrdn)99XAZFPk}kZs4Yk`qOHQ%JVM$tl}TXNm>0VIj~HHwJQrokcC%7 z#9gO{e?drJ!Mf|+RjHI(>qriW*%RECLu6U7rF~@@5JC%)>PsI$ovFjcG8Wj@nTu`{ z6$-wRJ+eF6vft25-(?Dd4+ZXQBKc5P8;*VycBSxwTNseDbSl8xtUj^Wo$>L zj#Go9xkY_Fwz#A^;mLQE#(4`_xjjiEL-qE)h7(DA`K_P(ZjOsiZTyO!Oi8eeAEpH4 z5;83H>JobW#XR*Yb{;8L_|Pb^CSF0=At?O~_ImtSM~7nTF1fc(zajOI!)K#eSpQ4G zR%NhOkJgXHDab*rq6Rj#&uQhjFyz-JhWV#dtuzUF(PYWCo0@wa%i-UHQ6i0T-+*?3Z)Fe-%4t zICRgP|5J77r%;>Ja^$S95Ae6ssjPogm}Ks0{6xwORKDoyn+CJAIfnrrM?TO%%}8cDgb+Jo?Q!>o_G|^r8(R%T7+3-*u!fulk#dsnRU$ZS;u5OWL3u=_+1 znfP_UF5{8s>Lcg?W1+N%KvwRQf87?g;_v(%)DNjf6 z8t^{gD)iW?8opvb?8@85Fu%2!INdK>eonE!ay`RzUuV=C6FD%_A$|-suY)dsPH{`E%EXDRBqF%7= zM`TcH@Ryk3QQ(m@&^$)d?)7durQFv+{FO<2w~5Imv$<4()CsPOxo2ETcegASbubty z7OS#C+uHQ+3nL0%O68SHhNihe`(sicmDVxXI&smixEl6byPJL9!{X_@2y(BUO@2+P zdVh^tWO4-^lK0^6+!nx>z(qlGXkYTJ;|};~TZs;d{mv;9qBKpRbum`zV<~}Q#zQ-H z$)tVnWvdX_EDfR^Vx(mBr@vJ7aa^B*&CF8+HOV>+WXi^bU9xayZq0=M5z3e*#H4G0 zyi~nq6_%Px8av6u=i$wc99odBy#_ZPD#2|7mbP|=`GFL|tYx%t2CL#-o8_r$dANd{ z^j!Ftjr^bzB?V|yB3~Q7oi^3~B`mQFyUg1nP^l^Eo01n@^{r47Z^tJDOK{t)-{L(pv`G#n{^Z%mUuVhS`q@F4ERKuSQPy}^b4UuSEs zDotG-aGQ_YQR_0kFmd+2E#56%s%JE5ntXU6*hyn$cIl$%^r-OESN9(1F-G#OlV` zMg-s8S!KJuAME1h^rq653RAA&!m1F3xtpAzl{oeXv8GT_OsgV-XDv2z(b96x=eZK+ zcaIZBt?`2^BIAB5RhjI526W= zKIs~9f$A=DUcPLT(JKI%LA-7=R@5XJ{HXV)kLN{OKKDgm0n%`MF`bPgUwyo337g zK@wYmHHop`n*nTuZ0E~2ZU4kSBJJ>^@qr@qGHt-tzqJy;ZZS@~154v1)DCYp7-dUWe5N_T7>AiX0Lx>S{y&HS8>&lNwIn4NCa{{+j z8wh1j@UxaQn#DH?^+w5kdTP?>hyNuYX{Y|{9*@{ngac^G76-hZ?lUnR0MrIagg%Mq z-M|-58qPc7LO4n~X)CA1PESFN?ti;2MM~VFZ*1fR4s`Ica^E!4yI|L@ST@gEtM!** z3PGCn03d4vNvgh2X+haqc=oJ(@pxJU3@EJHFfHPp9YQbkv+~Ho=+*^Mv4J{ioijJK zH(fumA-Nd;)DKVwKk)A6FJHM-d&`H1gxUo)MwJn_H?7X}dGokBcO=4Q8fh zK5BG(;&|m3e$Jp5CsWn256h@uV(HGzg*Dm_C!c-DvCSqMiotPyHJ_ytFk_2mkq1A!`&y+F!BA!ArzK$L`1uYMJ^{l-SC&V}Ea3CUc z!8#&ip_GGey!gGXk5Yf#8^-<#gh;;6D#LYlH?J@ARvok~d~TGFo;dVQAI1=2Z9qM9 z>L{_{IHu^=exm^G3)lnHa*n^Pb0o>QB;xO#F-sXUwr zCDPF?8IT#KIOhJacg84s|LQ25p&Og@-xd709qLt{&%m5un^+GKIR09R+9tX`5uvKn zTq_Raaq5T7IHvozqXC|tzV3*@m_TW|$uM|DbM zkZ&l?RI96zaU-)hZg4a1$)+{(pf^srkrHi93o3~Vj=z?Ll@ypI>mSiEjMNACY;V>)IYP#fhrT3fbwym7neZZaETXr+ZO<}gXFgY@18*nP)7cF zT=>!I?*`P=`3I|uR7z7~s}M%yKWo?X%hTXD^(GXPo`aoGk62Sql+WyR{;cgYq{}`basl^09+=Xw zhsQV|kFPzR3qln7*fwVvelfv2y5r|%o`3^y>=3ejZcqkL5@{@a+rGU!u{_g8U~=;L zR0pa2H$yXUyj$gZCuBdckm;&qKPF_G-CBX?%ci|qq4aiACr?2 zt$0^zBd^!lgy+WEeRHbApQ{2ZALJY4u%#2T%b&PT1C!2~9A(uiX>#dE+lqC95M2~s zC;LB}h2w|-{5kwjP{bcz%Gb{OGWDj#(vHnB^7kute|?lqb=~#B{}nJ0GwMOmL%U)X z6b(^Y8jF|G^2aQjZVpHS8k?G?9!mZ<0F~HpkQ|*1{rpu6<`v%XN9zp0y_Q2@m}uk! zwWZ3>#$$`G3(Zj=EuP}@;j*d9!B<42zWDu}6_{+^YfWpe4RjGHsJBOL2XYP8Entjy zNLLs75(Sc2-;skFvl~Hxdjl&mL92E0>}H-*ua=`;#OW$IOhNl&oI-$YT&74P5jIcf zo9(Y?NXF9E=t`M7O*%MczS+q-nFZVps?pKUHh+_o#apZk@&m<#ir+7#u&V6$JvXjy zx1eoh#Oc;j!m|+}!={jg&m8I%oE~)J;$1`}jS}ag;F=kx7qG2E7u`zqS?T4)2`e!= zw_Em(uvt@`e7^LLV%b#uO1fX6UYDvY#+}g+K@zwwO-NWuRi|>TX;gns&pJIVWhe8X z+eMQPhlc6+=*JTTMHMFcoWq@ay`=|o-tH#|ee!j>EK{U2POx5(Ft+1$s|=;Cx=_be zs!cqN4MEenHbM6JiUEz;-#@c{EA70z(3i^EkBBOLj7WSY1Rwm)9fY9nL(x0;B<-lEfSnCC7j~XI zdbU$Dj=wy=Lh+Z3TJfBZFG6d%Fa0V6b0OQ)mqxrl$e+RpsPLJ%{EU$AMQGs=jb2ZK zCv)l!deAyzhW>MP-oQ!lf%&I9O2Ug_ zD}CN~WqA)*Y6+dUCZ?CqFv}EyS}JWe^5=$C!wl?e{SG_ad;!iY(36JNU#_RaK--yN zIqGg%@|3<_kbfz;#E_{bB2(|M8ns~|Ehf;^tCr3Jlo3E0J@5Y@v)%JvwMh@02g^@b%2F^_~4v(W&hcA`r!vK_PmeSV7OBflN&tW~Z+ zX_Sb7@%PQ^^rmH~I9e8oGm5Au8HTQ5eOOipuxYxM9Oc^g^M#og871>GOfHKuI$JMcObL{NLX8*G#9U`$ZI`! z#cMI6pa}H*?2@pPjQXM(w^GbKC8=v?xNT4yUuV6-6~4w`|F#~_t>~TdT{UhmuPuxY z@d1lkHQI!cOE*s|qzN{;`#$nU6`RWMqakSw7)|l@c9li3^^c-?9g%zq$SDO)cv9Jz zaC?B}7q8cnA{uq^j;`cfI4$^>tJ8vij^}e$pHTljAK%Th-rb%Zw-Z_4L0_4*ch`xl zYc6gN*&BYL=?W9qlrM&xeC9!-Za5tJ* zE|sJ+O^cs3O|^%QplC;0t&u7Ym2aCsH&X7=GX8EFb1YV6rZcXxIT?T3#B<6+-+@@m8VgRLXA~So9a4W$^URvr z)XmGNJJ2&B2%e==^H7l>!#A35##W*BT%_>gCwE!tCF>j7biBYMHZ`x%iSN^>#GF>T zk{H_9M8_9|)gllUG5V;w>L6^TjXH2|M!|$v?ce+lV$|0YM0PY6tzODd~I=2Lp14f)ja{ZG`l)q#DW%NBaI+EKbL%Y5zReSaEk+>UA!jeKhm zM?%wJ%mlsnAMdqI;(L&Yu%q_y&YIe|tL(k){K1|K=E z!i<;rSM~gG%YT2{O$FaXw1(n;@V>(pC}AOgYPUW+|ysA2mW%V=YV(KSd^P@uPUd z4i>MABwIx`DBCUN@xXTQOx!l>D(-HQoHl8&Y&7XPwiUAjR~%tZVBHoYRWgqikz)F~*r zYjiK{6j;gGvWbNL#@sG_P5Sbl8T>5IV!*yR(hOj2X$Kk%H7`H%`YCj%nVomT#(G$d6mn62#4?}N{fDPa% zc5C+ih#Zl3diCaYOV6_Or4pPoU($coT$I~loY?T)1qQgVb3EDF&g%Xf;XtR#&t>i-^g<;$kE zBLgWuVWy?6>dp8Krj@R|BP|6HngGQqOM~Wl-^$iS_qvs$mQ1nbdJM`t|0Elfe(?BvC5GXlH2}H$Ru)aDG6#NE+%EM)$Rd4LyBe(y zrH=1EUYb7QMn(+J@aW}qoGTTN0o}L&u4jUmG^b6A@?RY^2A%Aih?GnobDqyqvK!{W z9(Mm!Uxr5S%K3&n)Zk#2xZi}3`0yY-crv83S#hUBk_Ck*vEusFcdHtQGtfQr=`m0( zRV0d2H)qPavZ$jD#{|BEC{vA^*^tk01LaE}j5P0m>E;==M(ZGBr}radn-o&~>LFv* zOPMgKgp~|8dZCocog&*}Pf#^}{wjUIg^XVlfrDLN7oHK^e3&9&-t>?>C8jYMfb`JayZ%o%&v_Hm&d}K)PI)F85JWghc<^a9E3 z&R>mqy6zKA*Mc#l2h*NBXSL#3X*$_2YZnP&kupDHrY@O_o-|cN5owVH01x)^jTR#i z_|lkLn4V#hWIGM>?_`zt6hy{%84Pc~U(+(JTmmX(wC=H`Gz#5o?bBupZ39E}Iy>v| zG;^E;0$KdQP*s>Tt268j_Zy^Xv(7C-fNpad&jZ>Dhz+mV5|&TA|BRWeeb7re^|F@G zc?3_G@oKAv;E=6Vx#6o32V9~tf{#Hja&1%=bTFOw;;>ewUs1BpIw{iEj?koHVHN|8 zwoiK_!JX0oxGZHdxoxehvJtP0>Hlmr&^f(FLk`xrF4%EzEPK_)4R_F&*p}-;D`RkT ze7e~>ycM9}mzIyv81k+)k8J&&ywqNxri$fiTr48xb+GkaDWm;}$oJr2Rn3sssu*q| zny8LG4{y9AG=5IFkih#Mv6!VzvqFP+nBbQq#xrzdGd|(2GWxm9A&#fwE7k;CxC>|o z=>gpKoX<=E>{rz4^rOcHMjFzS!vqI-=Wi&kt&FiqDDJ8D+fuIw`I=>k zep(J~$4!ufM~{z?G<3cDepx@tbC+h@-d%X!j3Mq`r=Vg`;ar;V9N>@ZYkAz+F!z5^ zlZr{uM47bi&&+*+4ZUtzaO}xwY7@oUbB{s|o(%0mnWHz5ly&Mn)IRyrm0=l%7k}Gy&7>O_aE7 za?QBU7009IQ|6KJ^+R~YmHZ{6*Nc<$W*V*+0NN*@Q1ts z;&^$<6v-`OAK+bk^w6-P7(5tAdmy%Yk7vjyvBFO_R#*REI9_SfoI%0jrB|$9 zf%I-Uy69sJv<%F_TMsS~ZsT#3^xGvFnpoTR!t-KktcbG4G~C#akHisWmfK>OFFMV0 zUVZuIS8sG-p{rg%`oOJxc_RkNs2!tUK-9as^G%T-4|9u;i6f9%Q7dWi!esN+^YdFL z$<+N(h=&9#KuCBYj3y{a<>^sx%>JCh;ryh(J`e_+^EPX@0TJln7M{wCnuwrRU!yi;BP2=(#Wm3OWNq3Ge4wKC$Kzw9JbtOT^|K6xX!XnC=v zGTp2(s9Cmew~X4TIP;PAP4Clhj?N9W*Kvw)7UfmP={~)(Figul?^M31{u2&>nlHVv2X(%=B@RPQ4MaW=IkaNWmWQC zs27OJU`p;dWTae;sZ+EY*ze3KSs~t( zub_ETPN^?8J-jrh^F#Ut!6mgf1BlSwQ{(@$Tx|nTG~hv`K9Ms}y*n4s&RM7rAuP3c z&!--*1cgze3=$8RDo225K>Lf%$7xErtudaq0$vU+j&M#un+R0bOfmEBgy09m zXQO&FbEso`^eTBauytx6oI118y*Gzl%Cy%BV&jcr8WdsLmUZfXDj*=iRZc_Pj%Q_F zdLFp59nXIClkFOSw2w=GJMyv0QgP&an`g~>X(2{Ay*UBLBxlw>85S{z^4LVh7nw>5 z(EQha>Pr^h_P1{f__|(hEa4V+gu{`Z?!~o^LA8I_GLlPo1C6zuJ6Rp>eVLgCE#PVq z&e8i3ewB%Utbi-_!|gmjO@{gAQ#9@Nr$k{{i0HA&Su!rn6|{}d`Bsn@q4mW;&xAfOmIV; zjrT>S;bU!w!^2VwqWKsdU1Vd4i7DG;$^8!o{yA`e`*1)8%FBM56Voxei4OK?PguGP zz`U6D9` z_wU~;LwA=7&zEhVv7KXfAYV(M)tO>cQKx2v`69vYMZRmv5cI?)b$Hk+KUx~&^XVP8 z6OQfu_yW$nac{fqM3?$0(COYkm^$PxU=r}@_9R=9vspX0&QzvAgylw8)xpf;m>+s4 z#0n*ahZDW?0$7!3%N2^tFay*Xk#Gf!hc-;#MJ~R$-riZkw+7+AXND@73N>=bvYwg$ z`o_}}0t>GrSd8b1eH;gk%a(9AcyD_){E*X>KjwBmbaF0{sN&p`zA5hPTi+-zu3b+_C&`{)w|i8 zT)VzA=kKo|N1oYLt1yNiqDYP31Vq4}ebznFDGOFH_2!eozJtsTeZv{bub`FjeE{8t zn~w7t3mg{c)wITg&8dwCloQCiYS|%qwZE7E(>@Med89P^;i5^SI_;& zJM_nc*#n7m?+ZND*p*}lF9owmV<;*2qj9xpo}q81o}LNncZ$uW-t4U9d<|{&JAP)_ z!Wi#6Gg#$Kqn0t6-Rv0k&>FvS52^fJ9IU!2U?&)R9E8i%z8bW6scJQUe-k_TbXyl2 z`kIAXCYqZuJ^a{aji1(Moc6&9F9o;xGVV-?$#ufW^*h4LQuWNyd%l0Jrb|yeLa+sh zFcZ7{bQK)F$kR;E-mOOuIRhH(ePbv6Gzm)#6ZbClGF3(}U|xtiJm_>Bj_wh+%7}e% zdaW~zS<_P}QQaYpQ|5LbANLbPYg1*?=`B&vyDv;KPX%Z!`{_&Uf8S+L%I7(0um9=Y mRZoWhwO0ZEkGV5TX`{PUv}EqvWXXOy>$+M-nw5_n-u^$qVj$oE literal 0 HcmV?d00001