From 14237f64e22b02afe2ef55715912f84c035668a9 Mon Sep 17 00:00:00 2001
From: Hande <159312713+hande-k@users.noreply.github.com>
Date: Tue, 25 Mar 2025 11:57:51 +0100
Subject: [PATCH] docs: add graph visualization (#665)
## Description
## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin
---------
Co-authored-by: Vasilije <8619304+Vasilije1990@users.noreply.github.com>
---
README.md | 4 +
assets/graph_visualization.html | 128 ++++++++++++++++++++++++++++++++
assets/graph_visualization.png | Bin 0 -> 373595 bytes
3 files changed, 132 insertions(+)
create mode 100644 assets/graph_visualization.html
create mode 100644 assets/graph_visualization.png
diff --git a/README.md b/README.md
index 1db472422..8aecb27cf 100644
--- a/README.md
+++ b/README.md
@@ -115,6 +115,10 @@ Example output:
```
# ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'natural language processing', 'description': 'An interdisciplinary subfield of computer science and information retrieval.'}, {'relationship_name': 'is_a_subfield_of', 'source_node_id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'target_node_id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 15, 473137, tzinfo=datetime.timezone.utc)}, {'id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': 'computer science', 'description': 'The study of computation and information processing.'})
```
+Graph visualization:
+
+Open in [browser](https://rawcdn.githack.com/topoteretes/cognee/refs/heads/add-visualization-readme/assets/graph_visualization.html).
+
For more advanced usage, have a look at our documentation.
diff --git a/assets/graph_visualization.html b/assets/graph_visualization.html
new file mode 100644
index 000000000..fc21a1b57
--- /dev/null
+++ b/assets/graph_visualization.html
@@ -0,0 +1,128 @@
+
+
+
+
T}0f0vRoiG{>>Bjq=B>)Ot?^PoKUkDt?|T{*m&; zT6h_r&JU+plY1J4Pb6~m1N{CjSEA>9nY6rsXQAt-ApnQ({{ar)oIB3L1EgFq9@y0p zKwR<(fdr?F@O-*OPZHEQ@Hs>C1;i%u+tKF?I}a@9KX~L*pTngl6_+)Iu_tUY&6&at z-Hr88HR)&Q*>G|*erKVDPQs^A$hdutle3)o{MEao`j5^BkRF|njINHWF1T#pIwrgm zI`feQ&-RQo`YVa&!RY2Ku0fxxs<{BzrU+JPe)^jpeFLwWozgxSG1DH<% zipptSx%Qs6m&=j1AiU8n!ry@Ez|d}D8}-L*i~eZvv;(vfHI_@TNo$7Cb@&Y6T7R}W zhXqBr(201Z@O)m0+UlTr0(s#nU$NJVjx&goaZj;^5!?cTJ 06)0PSzL`V@N$uV^IU2zk;MvxpqCSIRg9k0M7!G%5E>yKTnZpG zMqxwa+6@>6$5&ha;HcAK)moh*H;fA~_%Z~#mLb7_hGm|?SXy1qD(0#+mQ`|;8Ya`i zLtc8_`cjISo5f`7!;Gh|-n7Aw9y7{(L`HedMN~+^$L<~`s^RTe$^CpLjF
s(o}DrJ#&r?ps3-fvTD6F318Z8PE+rv9qdfUv=XBF2^O)(^t}V zX05NA@Yx8t^FZo6ys>1}#5LqU@di2?zc22$C+)iTl@#WFS4JLfIol+Wc&W ccbR(iz(~zdY6Y ~CSw}xfeK3xXP3EMe{xG;*nw$tvFb<6IeY&v z`z#{~+8cHhx5)w?Fi-3SLn4$S+CapF16o7x8$d$i00~j$$w`9xk()O-n<@@ik$`C0 z&|RMG{S(>l_&x`S)cH_c@r$4+rdF}XQWJnBZF}&Gg1)h`8xWD}ccxNLj1`4>>_+1+ zfBJCxUD8XUk>mCi+z+H|J^7Ui5pM A$@KYcTX>B7C eoJ^lgLalX=`vpDHQy(k``ki2s}QNZ*n}r; z#&X=aJcPgC;5sY&TNA@6(@NQ}umPy8*vha!sALJC$p6rqRxNwP$r*8Gf;h8~O#MT2 z{eJ|5I@O%Sk!~@2%0G(0HwZR0^cV fa!#6QL`R5~i|Ro><<- zkz7=G(IyEr1(k#4$dj4tB<2?8pw{|b0?%+KJ-UPG-Bh`-NNu*?uHwuN0&JJw#fB J|J4LxanKeACs9F!e(HE!Is9EWaVl6X9n%on4Gr*Lax))_cg zDT5z`aP~ju43m+LQwqg;PyO;BMnsqgEg>gdZ6AyUvCPR?Ou3eOt}1Kg2I0!)TLmx8 zSK2z9ceg;%e}-Sb87pwP*Kh#!V>N#3qEYiL+n4paX5S^V3OdYCS4cph0lLrq-RD@> ztCPy9%ih I#`r+XS zLib+%w4H(3ne{vi?gAG*uj{!c8vb43x4Z=tIkO(AU5@^Nrhr~D1v$8lBcRRdk(&x) z+SeFq?r9`faS=|(N2U22$wHz<0PaKod{S @9-~Xj6^E%c4$Y(bYVZ1S~xJol`` >i#e z$*^eC ZBL!lt(M1^dyH_)<#!s5Q+HOphwnXe5^KFTYlZWzSTw28MPu0h z*v?ITD7AH JFm5TgP|mlB}g=3%T9y6xSHXF`F`}P;TW2x*q@X&0=OKJR#({ zI$XB{)Ij`m4Igo6_l#6EznqZ@|AA@GpHUWXv8@h7?B6YW#!GEp|1D7(^4}1pO>gO7 zGM=(=p95)EbdM|NJg>n7>%qbVyF5+Mg@l6ya%rniMsqlxG gGFN6Aa{8qfIMH!4?Mc^;;!9HNNNt(r!C&s=+oxl4P^ z=jy62cWDwi;;|N!m#oP2D>uC3*+fhD^d6h23=Mr1rcREaXgRz(sk3X69J zR%bZAVN^ya0G?KgfRFAgB1nF*vfPrM519WLcH>!& 6`G4yCdn|HiI~Ff5T8EQo>+VM&ZwF+yX#ZW_mc+{2ZwV80fzos4{zJlz zU+Yd`U^iGfq0ct1h^1ERu{;u`n4m|Y!+9X?Huf0`w;UqEJ(4IR_zuM~J_^?21_##3 zb`G&hKDk?Gf;Sti++=JqUU98UQrhb2h{~o|If?KFyimwZi8H`6eQQ!Mu2l^?GiOzB zLsRK606<*kBN_1Hs)>uq?GmjZeEeZ0ynwSG$jL7aSiwWop>`_nnOGkG@5J);x-f5c z*ayP#&UMc}tb_{xuo4c@7n-6
fQ%GD(mAUnxm zWhbpQsTehp%|7qzlLbv+>Cf?RKc4i-7(yPnl1jQsUbZ1a1~S(pmV j( zeR5IuAZKmnmGe~-#oOcyT=3V7pWU8v?5iFwyu?p@C1ErzSQyI_a5O_4$V|h+3Ql{h zI)O%CGZjX;HF~7{du09bBv<>Es%8wR6aRw-j@URsi1~m5ue9A5;@eXvF u)>hgy*k=Y1KYh(W!NL(fwsJYyCG9R@>X(go~PvE7J+~dNZ(}R?2USO zaJ$5QH^)y+dSjEKwy?2$2p{9I)PLE!QInJMkp4=G1HdFq7F;5gAF59!I=3 z--){#Z^&(I;CvshFa_R&IC935zdLfCBQ>{>Kr*5ZoR3&&YvgruVI>)JT~3Skqh3oM zo6Str?E@Mg7L9`DBuBM63sOgrT`#W>eXIrH@naGWun#Hb82L4EwR=>x{>uMKR|VP4 zdSRHJ6Th>N5QHW@Ou{q7rBbC^kCHu-Htl>w0xU8`91t&rp7|X9 z>avl|h45Wgr2qhj4JbQ?>Q(gVR8mN|ka9#D!0#YCtE5bh{8z5Wz@)PF2ffSowv2-m zL_oB^UnTvkXzzFb%)d(Z87qvaWQc6!$NM{QB{k{Qrb=#z#(fXm<$HQ>O}R(S5t)%p zaC?8d!2?Oa&nsLe7Q1C*LWNKm?<%P#1 Xib#pm#7ZNJ $Vs3w=bJqE>Zz*w4cdnW^aZ`i5j;G`$4(d-cUQgTtyfAcf8?CG(QO`{@o7`78%xd|2<6-kEEBco#C*}2-fr=2$~D)y(v} z4Chj7RtbpDkQZ^iW^yt7oW~0b!-v+Z{$9+rV-C0uO^tvBeY@8U$v~Gy%*?a((y%=T zO!HoF8_J;=R4lIX$Acoe^-|>bcn{|fw^jD-+)buSP%H4#1F8n-va5q zSFD^3*W_nE3((jb&HUQULa1{f@XadLM& 5Vi3G|Z4QY6w-gT$jZJKGnUDIM=qH4EdDTQw-!aAZeke*Snu^$rga z1bSFPRWrfKlNw}*qX|av*nnGE<~O%;i9cYhk6~D)?bjxjm54#7ObNy(Z)+o%T0NiN zb7ddcRUwdFwVhPUVuk)P!Df}h G7KmZLYJdn_UweGMd{(JAiI4;5_-2*vMmby)jB)^;fq5<_eZU* z{D0i;Q#){1{J>0fU(UoSR|8M!M2^jqRcI)u{vuoM74z}(NsZ{KZc@D)K|9sF&eA<; zsJBk2wA|jnd8ID2OS$QY$A%JUa3W{xBDNE#K`^nKOt%-YyUzA(Px3r}wH|vPEXLov z`ks?&85noQL9zbG68}B4qAR@g=3!y{Y=aJv1VIDIV{uTq{@-Z6p{TwvqF>jzIqIcT zk#PyI+S+`dLRp2fLoJTn U|P&OA6}5s ;7Zp_2D&yeTah1U}GSRbRy`%ofll=?|wk^;ZZktGTxo x)UKztvO}WH0V+&=huZTOyITa?`^*Yp$1x{#x30T2J~!F|V8P6aAfiDL(ZcO%lh^ zWq+hx&=qa2rx1EozC}@2N&iZv6N)I&O2<4Ko;3fE;Eb%}9 ei^Rr1VA(RGafGW!vcwRG6V z^hwI|rDh0$8e$Ol37xjNM-_b y6_M2GX|6iC|O~V=kj#U8HtYR94^?+GpJz&*36w(hthYIMOds@wy)XZyz?NFf% zrh8&JIoJpPLK&6lt{`B*Z@ST;NRoE&Bt?8}ma@V >;33&x6LowxwJqyAND_> z^xd>NiH+Ri4&Sb*eQmijBO$OQ8{T!*GON7kF71bzLvE)w7fHLMEsZwQ;(dIoNcR>s zMxW1Pwox1w%6xZ3LRmqxQCO(Ot(>VWIW9nw{_fcz4#%>@;b$x{0@67J g)HPxV{^{@wMBvSfP)5}E`t4I)VoNa%9Xv+>h3lM?NI+pw@-HAjfZxs z+M_w~dw4PL%>qG)ijdPPjs_G8wlDF>pOf4^4zcx0bz-a@du= K~P@9U9w6241h zh4t?;#b)k}daGB}j=LAbbB&fVSPq(*X!bQCoA&1++f3BgA!rHCxr7selcc)O>mMpl zA9W1|jJbXC-@YA$Mt9X8Jv;DeLkqh3Y@)Y|f&x 7$ z?6CLr YprQP8DSB@SI`v80uz3DI6~t%#kZ8I_c%hXi5uJAxu6KcJSYra zJxPuS3Y}MudVmwQUD2CXnxm0MvWyK7cdk*Cr*i}{;nKUmKMO#4Nx6EeZ0@dsicf#@ z&nJ}CTx3T?+A0%%Mi;9Bek1rZ$=`_S)878Ii(K)?+kI8ehgp^{0SEIe#NhcnxhYp~ zAr77rMUYqVmPzO9UwQr;faj093H)-IUh?T^>bVqrZ=i)~{M_t9O>i~ cV ze#tD&?ckMLP0fmn+xDn=;Qnpl?ENqK!r2GE sJfApA}msD~t&lYwsTOg;xyXF^T zqX%nOAMDR(SNS(G93{!RQVIkfwFOOYz>kMc5&ILTs}q|)G4@Iau2KHalBLEAp1dGB zK3y#G#ynE$8_ kfBVx_UYq;Ywa&>m_|F!sjxO#HNBIW zqM7wEYo>UzE|g5X8!vNoV*z(*@XTZN$z8XBABQ`d9XE&aPm!TL!jyuxhIlc12&jpF zwrg*Vh22$dRpjMyeHCK{38YDEHf|gN9b?$mF86;^=k!15Vb?GLeek*e(g%NLP^KBQ z{=W5ODM!uHGtXlsr}!eNW<*!$BjKEux(XF6pU#k{txj=f;^GK8C>Ze<6zCFm3D5Th zUJ@JT_W`M!W4+>kSd=Y)vnU^^9H8t-5(muVvNN!%?xS5x^jy?(BG**m<_d$O&{tqX zv5^?KoO`vr;+{|ObGK31mS&fUYco49!d%)fi%q1B*04dw6GT3C&$wykWN6oO^>{Ti z(F(DQ=OmPr=Owk(PYVRiprz_Jcg^aKN9tELUP;t0ZuH+0wgC72C5W^q>s>su>rszo zVitZZ%YSAX$2 ~G;DX$pZ@jur9^z+ztl_AMr&&~G&=ov 4J*vUr)c)nWGH)och_7zJ_ovM=go*6bVYnVPnmNz{NBe`^s9nVVcWTf z;=z9k_Y!+zMs~BI$b+o6O<+}2*n{S7&2+^3+G{z~Mcn3}RB1_On8Qd1AAUYncV;F@ z1k8)<9T;Xap&(rp(DlH%#u4Dd0>bHPqyR3~Y)AskhDYwniU)Uv6Y&E_ NTWD z+_AK7J0ni9F>zpWvfs6P)ChOqPj%a85XwH9%@=|kFQ^DXPB0PMmeXju&c^zQy;ceH zy1mEsdmFEUerlxk1dYvGoU~5tjil9YrJZb`^MiigeI&vCNP@4ta5*@*_Tm&JCsARJ z^Tf}eGo(ILY^ae&!Ej%TFJ)rs?+1?3ZkX|mIUiucs(;x|GLwDR@r*^xv-)DU)e7Z! zX!jATJN<3Yl*k5*IdAdGi6g@j{xJ8noh)&X4 b8@iaNg|;Oiqwk5nY;Ov4&c>27 zPvM4ZWKSgT{Vdvl(*@b*nDE;lt3S-x_G;k~s^1W(_uofboY;9j=(OKPZh{Ar5YyMM zZrlhcnWH?#Onf>Dug6SSoUFqG>wmr AAM60n+;{o@L@brQUXW3t$t6g2_eZt+mqtEBWhDXCBgTLNl-5U=&e!Q&-N! zrlA)Xx4^?Rpkrs+KVBj&*oEU}fMT=<%(5$RAP7eg{&qvQSh{e3wOkc{>G1t%?vVK? zuQ3dK{ePoh&!O^(m)O)5-)FfMGtI^J{AE*a#Q(Nuj~UyuckVyy*;AbWiGUb9GR2sq z5U>1ro(Cr;pYWb0)o+=y)Bi3M7DvVojJ~cMuZXDzT9$v&<1zPSHRddDSdNXzb1U8A zaPr%O`k+MZI~`Ab4tZEZW5=JiyJ?l5oD4w@D}^QwYfqn^d~CgyMj5bhIuIIVQ9`=* z;fG>$Wes}pa98hWAAV|as7NMt 8nH&|@O=uuw8CD)&$qeHDoYrQz>Fj<|Kj>H3( zt}8?DO#XMPy^53~@#w%^_P2C?e`zQjG=_he8H&}W)}mBBMZ9#cRmCj<$d_4-gbgbs zt|aiLg9lQ8MyVw@V)y~l10j*uM1a$y8q{}3N2nGUJbO*euXOi~n@T~fdmED)=9rl* ztBBE_n8&C8s@$+KxLvrJ%p>!Tl~%^)C2S *TCCVOKmfDf=1j9->1RXAt!!m-gTQSX%>6o7F9?6!pDi-CsY~et?!j} z+Z$XK8(eAGM;+OpjwUHj($caIUI!u7+|=%buSn;$QSE$J+Ge3E8V;QEYVvq?d#hJr zyEH&bLNp86ucpRO-%)@3;gHm?Ead!GYL?vnN}queCu&IhRD7tdq7rD)G)y%Z8}#g? z84uO>2!b2?JG*Ry(g^E|O8@>*xbx44@qCm8+7I&}*?64IJisD(jL!dX)1P@JuvEUo z+gdDTyC}}hge+V>YcvO4>I;ayPb0~=6J=e-oIz}NWk~) z%x$4lO#UgVt-u*UuP3W{#o8ce_!Wuw^YaUBIIe;Io>sNl4+sipW;DfmLagw16JvU> zQqNc=v-99=+O)l`hM+BN>uKUYJ7x4_cq!KC$^@k~i2-}ndf(s0A_}bKYW&|@t|E82 zYG^x31TmnS37A)Z>#S7xduJtw%#k4KLRP6OtO7~G=^O%Th)4euttidacg4Ev^}{3; zO5j)(;+GiM8;b*a(G1Xwn!C9pR rOGt0YO3GnY0gKNr4`Ipn#t18>Wd za37E9MefH%9knW*Xp+{MO#2-B^uUiH0jFrGy3O5#44R$R7QLam<*qvQ(_dx;Pwdiz z=6a42?!7Z9o{OmDA70BTmVmT=@`@?04Db_ISaL)vHnqOvf3%NtekMv>mRT;gI-D}b zFsv*7K>5lZaA@st1k86C7y$$Ld-KjWz`K=y;kQmG(8J`caZci!Ulnjm?1d7eGQX1z z$NlMJoo>I3H5$*`)T}MsdG@WwE&p%ExBq^v2kJYaxpzN#wS4bj-CI}dfqSbq%>bwJ zZPlP{)a|#AJmnD&0c9of6lb6H7iI(I%}v_2b2n$12*K~yY&79S-ki)=*F6x_xQ%?n zB>m`e{^1q}Vf80wM~39TJ|T>wUhN^^!R}W;bwMAn6oF^(dH=3aS7I~6szK|7{KP!G z^ygc)lWq!og#m3!8>j@)=J1lA@5#za>SNaLo-R|G*C|{0?q}`R%x^SO28x955d;P; z+dwwq76*mi$8lYcEl$vBkmEkcz=O!TE{CpY)AH;*w7cgJ?XX5bzeM?C;{Y?y)eY-4 zqF4Wmx3}<$qhI$u2@wJW2myja5 }4<4*>cXxMpch}(V4h;=Vk@wwa zpS@@HS@+J|HGe>}Sk=|PdY-R*DxWZ=2Z{3N*3MYHOS7ChfqmHR_Y>TKcg{q{afO?l z>`47#5e52Hc+k`XNWZB98z^9WbV}gT0b{z%UsX7lSzXl*XF4F|ZIG1Z+nnk|9ggOJ5@`lTuV0_>?`fktc5Ys@epmIW|Y6ka*(xD4KR!Z>?Wx<)2 z17yMHZ`&0HbMAML0(b3&GiiG++}p#JOR*l &>_}d$m6<=AIMR imhxR8qZ4TPAcn F#JDSX@D16{@4aVxWLhIZEzfm{t{b@VKmDc=jI?BW)Qtu^GRiyfHyW- z=b s#v!F$q^+k#Smq{(H zN3;Da!Mar^eEZ=lHyc=t%CvK8pv?JoAp#*~X?ivcb@*E=2R#2*PspCDS$Ee=Gbe$Z zO|!7 >JYiIx*++!YC#L2kbs=S75{91B@mBI#QLK*eyH(Is&)34{&;4%p R+YX-w$rYc~%uk#2F9axqouhf7-{NMLp2G$p9kEf0b_MVgDQ| z$r{YSj9@uI8uZ_>Z(W;inb!ZGsBee96OyEfUrVej?HUc!;`&W)7Cc0?uT-S725JLG zOZr#Vp9^{Lu5yzT9w}i9(OfAb@`Gmqf%&giz|-dD9SY*kL=bRmYS}3uA7|a^82Msl z6f*s*0LJtY0uQrp=n;=5u-S^=;Vd1&u#7DX&hQkj?FP#KiLpuMvAuQ$ovyugnOsG5 z;H95GiXQIYWh)(?XLtV8OSL=&LC7BO2WngwS~6Klms}y8WIUQ^Ahd-Xp3A(zCc)F- z yDq~syYIZz5Ca~g9 C4 zUTZy73LtbYFaFK!`U;F%Uvq!uz-7AE$=0f6{+tC8C}3jmw@(xuJK@N|w@=kWZr5I` z_~ZX+`)M2Ul0x~j{&)_tv*e=x{(=(o9~vA#+JD&LX-LBEbIlzptLa8B+?@Uwc&@;T zoDT0ImGqQ>QttZsQ;&o1|Eb5ZeHYT)2);maMGVPkDr!B;D~n#3uc|#%Y9H)^A|VFf zDWhcP5X$8{-VWf7_dO n&p ;R9e@ylucm91>~9qi-S{yP?AcZKx>Wy^jy4o@fs3TMe& zTW*Wor@lQRQ=v&{oEar+oN4cqbVqUf4v3!WQ_dN2ZuZt_?1gNM9IUtsE8YNC8_?ms z8267WzlH0pd`BhVtFr+1mD>}zw#Zc*ND2Pi13aLUjSlzkpgZ#?(A|aVQyb)eA9crl zy~Wxx^~rhG^#7K6qb3eXi^+BP|0(s>K9+#Oj!G%mWVHe>mv?c~hM)X`J7`yhLUx zAXFxN|BhsfK+=FFaCN`=$e7ms6zBjwV6rbgK3t<6F#6Lr->hxgmN@_3Y b*1N{%qk#UE`%)ll~b*9_gaYp;h?9% z>cR{_Eo}dhbJz->G`5-tmX;GqVj<{-)f2q%7bCE1W=On+pvV2;RJs5RDdZE1^tO)q zf2GNtH fQnSQTC1J^#Czd{YjjZyCb>&cPYS0Db+Ve+J=T{~3g{3fr20b_`gT zK%BX1wQ&;w$Rx?l9&mmtTt4_=fV=qO0o3jDpu~PL2 p^7%r5_*y1-q!p=t{j@W zR=2J8wngP(;qj>DuNf@me$G9T)XCSq<)j@krsOuiq#4>N1vQU3zH0_4aNCfhd~kRx zvlPDKOm<+Sy(|+p3QofRz`qpxldST2OgGZuP9!VE;55s|5tTpkZIT}ClL!jL=E6uC z;fkDYDA=?1x*W&2G(vt_0P$>qc?|l92VhI?3-~+|b{pRi7Pg|>!Bc!#f67n&gW(r+ zjgOe-;xM#LL5iSWm}`VZw4J6rZ~8uALR_C_l@BZm!T>4;mX)ugqx zMEc)3K<6 ^X+^46vV!resLkF*DEDOwXy-+^fW z=)&(|WwW7qpA#zO>vlVlBFU4yx_lMgPFdn|b(Y|M4zh y>`P0D zrJ|%8dOWHv2U=S*8JY3mWNa2IrSMrONz20mu~!q?`t2!^KDfqA?^}XI?TadPWujzW z6eF7J68PW1W YJ}Agr-$uf7yLo3^r0Bu zy@Jm_uDR*AMnd1XiQ%#>@j55zO%CqEhfj|aV211((u*zcq4)=*p7R*>M-uZo=v2#X z3@ss~*N=AO7PKvlLDiz}a@sYZ&vQOEVDHvLSnHyQLfOCYZkO8sVub5J^987pThsj8 z2VCtRsJkiNvtfbvQ{c)^{kRw%2z_nUjT;un+|$&SR8L)OlnD+(^tDbY5?{FV2We{ zZR`yH`d(QZHe~=^^sfoKcZujLxYF<^tK%`E|BGd8GSnMK;mJWPpzya&eM>*>{#Tp} z=6?5<*!%RIkQ-b7$NLJ*zGol+uhlig^7(apjwc?>nuN wU9tIf3gi zj$6CI!QjQ+uuqPAoT9UbHZGM=7BIr6Npu9X^7%E2Pn|R|sQqa_!qX%F7dE<}s^o)d zaJJevp*=qy_9y2DXomj9t-;nUtvi-~#wjCyfL=K=!p8M$WAVMi6S&QcrZhc(?5Djf zFhKkdwHWbRQQP>#8pYz&MUa)lo0#Rq&?dsqT4>iuM-igwA3~h1J&AeGO9)XipX;vS zKJgwX90FfR!9z1ea#1GQ(5%Yz(*&LzdipUdtTf+;R2wb+ bE-A^agp4lN>J9gWV6ew7%a=-Pu%HKDM3F7jD{_mOC6O@vXl%A75|t-p#5Z z8pqUppZv(~r`F)`1?7`3Z6A8gagsw1XUoBv(nJ5F1q71v2pNFmIeC__Yi;Iyx3KKy zxQ@G=3re~D t7-U2xp1zI;EtE EOmfWhz)Sul -D9Y}lb+!V+hYdky}MCDF&jtbP=h2P&2m z4NoM4f5ejRX!>1;Mm{zLi2g*0C|3GMDv5CTP>C%1+O8e71kd>=exlb`yg#etQM=My z)ysU}qed}1ZvgiZ<;J <^oS*dBZ`Sl~1IjA)w6B=WzV%9sI8!)%?#|Kkc5ju0aL}?=v2Ko3YL)X^$O8 zoCi<0H?I1m+|JIbYnl$v#>v#`p 2bRwWX&(y%YDTn=j)1M}w+{>AfbBSp~?u3n4D# zn{*v9W79Tu#nVny*EX)eqr{0?$Q*GV%D=42n8~{Xh?xI``IT97{*T$C`_8|!M~ ~Ukje}znlKo0T`F3vfqOi4aw#@$K{RNY0Y!pJ>>=$zzt$;V|+*D!H5g= zrh)fQoR~{WSE^OwN*cQ<+CI5vU`VNQdaF6ile`?|v7q!fg{Cg`Ge7g+Ee5v8ruYy6 zSU_%ly2UBJVK_CnD!?8heBj+U(T5Xj$x1|!vi0f-)wM}++sLgHGVc6`$ZXMbLNJ-h z(}H)os1h;zE*$MCo(?BzzQWzM(PvlZT;?(r;^nr*16K38QhmpAR3aZTx)ePc()~Nw z&2`4!b$c_R1!BKPYtyJiIH+Fc57KA78} wxpO8NZjN0+0u2Rl)}ip;XWS-dWqbC zJl7Spsbxjvm1vo!T6LJXayxwA8*~tn)<8D|yoJG@<5#r3_}rE*&^|R%uZ9V-Pb0N_ zob538-q3-}HJTXXHPHZBP_d_gE)o{xFf2C?__-+aJC7RnWbYKY@8I83UJI|@`2UIN znGFmTbP0j90HiY(X~ywCk EC9 +iU<4(j{~zhMPX++L=L!INL#a$rofL7v1@=>booe&-wGbA zIHS5Jku#PAY{$5uo0V+_o`ixhH%Y`PD!9P>fdK| aznmd}7jEvPTV7Y+`d`2zU;D ( +&ewOBIOlBIWUDv)=lcw4f$H3iLX7ORLQ?#nUIuBK0(-C_0kq_QcCRjl7X zin(g*Qanb><&%Au{g$y^xzfH2`iRz~h^*eG5@XdQE*N`;r;n2?FIN#%O`k(3VZ?3X z$}Z^u8A4c0M_K;0{&SqZKy_3~=M|>YWFQw|wI*Kk%UxCl!3f8yof_uBq*51d(>3Yg zU2@{g7pAs3iEbU9o@QOs1ORUlD+*r8WLjNEuZOB#l{RiH#I)to`laFHh$hl~q*SX6 zPv)RMC*p~6w;aI h-YX7NgRJ_vxcxUvRf%(?*f#GIaNX_r*S-p$BaSUpd}+S z`#Nee0?nKBr#GPZq_H5i7YqCmtHG+8WCj5=N~?#0nzPL_zCAv;!f;2^J{HR$9e= zYz}T8gQ4HF<9Kg@kivY&P<^%EjDg3n<;K7-h4Eh9K1|VsDSb1Cfb1YgLx~>u!3pb_ zn&v}Rm4`U@t9{z1Ae6+3al+@5(-8NAv!dl&S~az6NJ>heew66rIbT8P?liIXmYN$S z2WZ}so3gR*ASQ$v529ex(T~#jH9-qZwCp)vHMBUjfN{h>bwd?HE1w-pEC|H;IJR(p zXtD4J7GkMyQ_x-vZch_3=9*4Bf>nDK4-RIpGbEBT)CB@Zrfv8V2KC>h8cyH7H+#=M z|9~eHataS*@ot!hU-XY$>fe~O)T^PTLa_R_Yx82EuZeY_Z4u70^cNC44XNJyToet- z`#DXG`8q9r2~~3=MB_|qm4Ln0XI)0QsIx0XcaSj1(p_wMAzn9~a2A `@h-vC0Ia$FX)xl%4DnD*PPX->h(0%;ocS)*#+996@1bfci!t}h@ zC9YdxW}Yo?pwRC7u;on_HJog>9ZCf^36?OkM^zqU>=%Kk3cvqWxCJtgAQO2*$Ftgp zg_)5+u-olurE;;VEIpkJL(xWEA8FuNk+#Zys+q|5CUy S)N)a zZPWR(ZPnpZO0r>RxV(PRz}4~LcysQVtL;k(>mAnJ;M(pj$7qywB%veWmaOI~?6v!v z>71FZsSU^Vok1&-Z`bRi_Qi#5@-X08$`*4+(zTanN^_?}5)RIKI(BnX#|xUdesq zNbSttb;7(x)!n+?-t903;5T8NtG1lmtGHbV0k>WJQsjwt1ft=ie7CM!aV330y)@T- z&o^9mLDCVi9}k~ t{i60KB}SDp~;idi-x&dn66M?@FrAU!l(kqGQ+&8Fu~j z#DYQX6MZKj0RN8Q%Y*fBk(|Qs3C0P= }Zjt#aDQE99{1s#-vW96P5NP++q> vi#H*@}ZYQ!4DY6N%{6_z4wLsHJ`iM-c^w~S7`rcGNjj` zgHgm`+v{9$OL?P6gVdu7@}}}+`*Rxu3pzjBI~A3;G@+M!W)(ryte#=m*G=tA$$q}> zUfbHD1%70zI(?k@uzGlHF}Fcc=!T+1xAhtWB-V(;l9@wTBfR()EHd3Og(nnI?_Xj0 z4WZy*$GY;&H(v((joFO&zYFrZSx6H##{gSOX9tsoMAD>+%*wh|Xf)zcv k05KtB$%2U1Gy+~7RFJvOp z<@(GvO8+(95q{>>?_4eE%uE4_ zQ`tWVL#Suc?VMhw4KHxvYp8DPzQ}=Y+&WsYI7Q&kQnJ#aE1Rt{6~k#iI1nIZ86pS8 zxq}VA{5B>U2 !?M~ z|NB)39EF 6LW*w_4U#mX4R4UpF zc-vl69nLy!9#Hvp$s0H>QSg;^Yo7Ov|0+8OVvrn8Q)T(h`Z%am&D6qItRZmd$O`^M zOYP{Je)SHt-pNWJ{4ra0OBJ(%`RY@XhX3}dJYNMjMXIQeYg*t;=Kvc#4oZ6IGiLX4 z+>SS84z(m4$O%&U>L@s48J6>eQvBxPP5hNSrAq}1B`PUvbS%2aD?hj7hQDjDM{g;_ zsVBk6ayzqaM69BkJS57y$;Lc{6LTQ(gToOM+$W{x-d;8`E;}IiOK&VkLUyjGQ^ -BQv?*BB^6xqKC8mmBivy$``~nHdo^ zjI`6wGV5{b{&HHV1@hCJl}-K5p?R*KRy~%KvW1dmQbE(51o0v6=e$blcM$hKy-pO~ zBVe^rN8vfeVzQt!GI?mHplU6Bc!%G0@!TD~OC3rUpV$x0i}hF~3=zzrP?}To>C@&P zQ@cqlL(jiOP%dG^v3fc4tkj>! YKzR@3^MMIzAJ@9 K4+zN#!5^=wP0ps3owtf?C(tTw!rB^$i|l^lyXgqLkB?VDBKTM@*B5(N26&HTyB zbB*f2@WCKyr8+nA>O=$bg%?5`11^*2gSXwxRkqcPbr{Cq&Cn~luh!TKX_n}5b4|;o z?kodHrj*SXvQE=6b7Il6ZpLbfztXKu8 v%TwYPSW*x1*?&ZFerH !fR_pL@r20+GcfC z{tb4YKLcg6&4* ze3CdERz-ekr;F z^sPtGLZhir`e$-tc<2S^r?w|Sa|jD7Ik%b7jP41h)oYs8QwmD{OK0*77MD{>h$a<7 z(L?ZLiJ8vgI}xfbDg4@@byC;KD 5`aWdg-khi$a4Frm$?%INZKVtwGLC^}X#lzx(r$kL5PytQau@K5lIn;kx7! z=|p7Y*#2a2X3?kL0uWkS#48({Kgx>lq|J5=pS|>3X5Ol`TVnu07F}I0xXG=A4PiQW zw60EsKyn0#NJ#62$9A!3kpi$QafVpx i{R$9r`BZllJrg zBmwealX4$>MAWp^sg)~e6*Y?c+j^7i 7KOD@A;C#Bzq%lmne|E8d?!4#nT-@F2!uybef3X zl*|66pgh4czyVM3*pFxzk4|q;>D3RUSWw(vZ~`ujsW#JhNE=KLB1y#-u2(v_(G*IT zEF$+V?ugJXuGl9?>dNa-B7rE9(r2^2ni5Xk5e7XUw~}?uaP|b3*<>Q{PFin?fr*d~ z0qlZ}l98+g7)#T6E8jbPgo3`lgo{VUC>Fr~Y3yvF%j+9_XXxA |-6;r{*KK=hcyUK{9%VX1I~{3kxN)?s@q0z104Xt6EKr zTyMX KW?c8VQASil+x>YwCAdy{u`FJ8Y0$dMn`e zUea{-D#**Oj=ya43@WOJ2tH+ge?2TGkl;&VSidbm9EdbsQq_;*&1Tkn+`~nYK4ImW zrP0+EiCmgAnTq%Mu>M|LCQGZ1-T~T=iK`v)CF9f+amH$lcXh-|+d-(|bWoF^2%MJ4 ze#S87oi`-Q17SwqE1hJ0XL7DenB-TF_l=`;ZP7->`8mW2eom$_E#qMGW}+`WFl^)@ zLf9MY`(Ot OqCc$__o zFnNmTka^Nyuq-oGlA~TnzfM~D0ebu)6h7y$9$d;+#x&RDGl{)&_p_j+IeQKZRF%Jx zgFJn*E*V+r<%vCw%R)S-4Wpzh6H+gaI3c6#WQSF)c1m3%`|VN&o4gIb4gYJhls^b7 z=WB(FXvC1$S*bZsJV-PQzwrU1xvYW>(acu)2v^@6$5vFE2d9j6Hirs$aoARf?80mA zjQ0vF82X=mdEMOof6Zdbm4e2q63f!9oG~sJP$#0WSs&$Kjq{TP-I@k2KdN6863Rap z@N?ihl?>uFA=^Okefw-(+>b+8YVkrQMil)ZHe{E~Hr#*1K;OHwwA-OWGS^^Kk=h(D zl9RbHccOSV73@w#Tbe9|@UFf)H9(h2(y;HcyFz+|HWM?LLV0K93)4_gY)dJlC#M@7 z6IcCQBA5t;q(E|~aPobjK9|S5W?+!UO}1s+=UILJ(hUuCBS)TWfyr~qJ!;m-aq`0- zOAagurWhkVo|Z4 8B8i0hM6c{WIX$jl#N!(*!<^Zn;!_W!_~UCP*MY`!VBn3 zD@xh%5gFf?dHDsjYGmK8Mj})tTS`#EEuKi@fK%b;3;JId@4bgeyQ oJ{Pq$}BY#pj4QHW6J{uzj|K z0ohwW8eh~aOjrtMj(Jm2zmRK~W-X?`KkV2F$*ELPo=KR#;M=RuMX8IA39$?f(LBDY zY2h~8b9j#1lm(>M>-UR|r`6rL8$}EstHQsLMY8;0TbezW5VJ|<{2;?X0s19d8V&qG z!P` -NEsER77hJwOn6IL}9gQ%C>P51ezQ?g783M1W_P+pcQ2wzAgI`I7v?$=%6 zB368|<+1Gm&9C{EeTYQ*Uv6za3ChSI$jDOb^4v=dFlrJ{C7^WF*9Jq=8D_RioO16O zT0SAO3#^i7x`leJr;oWuZj#_)zP?=%vpW%R3-B+V2#8hSwp=aX`}9#?C0DYiS0Zow z HKca)>qfCc;6z-=s>l$jV`Y* zkl0Aw*VTAF#!WJKsIsC~@nmV-sM`?v{jxH2)$G2r*OCOXB%CC47;;{ZpCick_illK zJl$ch%imo6t$L*{gyNf1Xq+eoU!7Zie13EAVfd3;fqlg8frgs2GN(fx92(%#&9>r5 z9d*<%qd?*>gNJv%uCo)dNyUUmehd5x3@Bmzbi|KmDbOqsxQ<;cJ~1GHtcpcjE7)FR zhHC);0KVU)ml#OtIBk7WGnnLvVK4PF#0oI9Hv(PTBD&~s*lEwY8KpCMJLY&0D=y`K zV711=?xF>pqBBsluYb?QDTHMpkZdYHa7>_I)Ht<3l&4eGw{-1p8)mnv7InqLc#y{P z4NU4|s|&l|={aeCmI;Y{9`9R0WcWfq@kcx^nczqUd}O#|^Os^DnVAqY(2RX4Bt6+Y zIi@@C3t3fQx7;Zt4U?$VNk2@s%P|KQ2VPhk26AfOB122zzat!bJDAQ>mKk(nQGZll z)38a29|m30cQdNLnl~0YBRbrSoo$?iJN; qLg@0Rqpl!(Tvcmn|h%!NM3yIMKGLf-7F&^GiWo8 zxbeJ=v0$*KSFY`?5(R`&Uo*0~bWk)x^yq{3yy#0(=A(vM@01?*#K19qLmtr(S2o+F zkAzKD2J(juOAa3-cxKK+sI;+ K5o~D;Yu~j(J9-zkV4=mDPbklO;aFlE b7H{78nkk_+JXN0DBf=1uelVYyX5fqxazR&!IbW4Y%#OKJ9Cs;W|$pLxm ziJbrn<5MuI<`3$=Ntvgfh0YmRF)mQoA}k)pz2pj)zGalM{4hPl2KNhx)j+6wj964z zUUTfjCyaaxt&Q8XT4T68Uc$Y#IEA{TP%#;u<|B${*_*0_<|BFP!AkP^1S}%99==4P zJGSr2Po4U115) mcV@i+d+oaQZ8Uv?4p;y0OB>f%n2^NLcVA8*o%Rvj% z&7zaa4?>PiMGcZQ`= mm?M6({HY2>w5 zwu?#krGaREJDm$gtjFmmKIaQYqVx5*3>V9 )8(U;EaRa{^ zD(h;CO%ryrS&D*eK-j_c+%vc{zeS8)V^!YIV4Aprkjxy8_0N6R(~9UB?s^pwBwa>m z2avi##jX=i`rt)8CBP|*{uqkCx}#vEIwu3ElwcVu-@ZwhD?S|I{g~hGFThEI4QH)G zLXDVn8`SYrYM!NzPSh9=;e2!hML+!_*z5MYt2Ru$rB!2K1ut?Tk%3Ph6Lb7#kbath z^68l69yVI0NXi;vP*IHd*Q@c9s3`*@ww8F%9HlcOqHP0#=4$FTQRs{8Ri;FMh(ED- zPB%{p9M5C<&a&5KD4ImcqrfX6zgxI=PXotcJ8QC!Yyx*ulgKRel!=6GAY^UBPb*lP z8>K56Hx88d>D+H^gTI;+UvBc4|1J3=C)S)boY!aN>|}lIvO^N?+30)!NqsT>h03jo zK=Loa3z50Sv}{lf)dm7q!yn}c+5AB )Qd-( 9NbBBWw_MWHO$=RK(-C zz@yVv_K@N2Z#Y-)F9sL4EuV>DPhbiR^2oZvDGy(^PxiFDqPPsg{98es`KN+7F5Ei~ z4@gW^NFh|~-zgRf11 6zV| zI_qaxx>ZAO^y9LdS(nNc`1T^(c0gmOg_8p +vERgiI(F-uZ`dnoGC^! z=RX_wS@TrknF_gU0evP~vY%+fI4eygwIApUnN}d5uvHV=XR#(ri^-XBTu%yBKuARI zCKjx7GdwS1Ca54a^1=yuk`f66sC$~huRFfB`KRo2&O+b&WT~0(P&@+ipbzOPaSGS) zZ6`VREHn?jesaXhs}$!AcOPy@+Ukc5IakC1-tsP|_4x4~;6m$&4vmscxuayi6)i@o z1BOG?ejd~j!Odrft%ylk@4Qe?GB?NDh$zLP#UjZ%fb&2 udwtcYI1(%WVV}7_&Wbg#< zrnp92if`MZWUCId?Axom&B03-6YU?tt!Gdi5ncor6}~N769HO!y<|T_EFJFkUy&mL z?<&~A9mfpmSQ^}*r~n&S*;$9r<7}dAefS5Lwf}! z?}r!9xWb>QsqBym#<}na^G=aq(0- Jmd zDro39OP*JR*yR&AEThCI*NrV2(IH+~E@Civ!-;;2Xc&~WbZ$*BZ|3*0>`5{7iy95q zcj{rFl=w_!j-^ADj92@;TbtrD^nqdQ?ABL!F6a5)0_Vp<%!k{}pYqqy!ti*jWGPMO zZ69xDm|-UfZwlS 5j)INqng1*K*OBHGe7r=pf@NK3M~RQO^SF2!6iSSB8o1b zD%mk)UdP3!Ou2}&o&DHg{JONqb8)vA>BIgyqag6KaFV4EZm`3t@j@f`PIT&=*J-fn zm0Wp58Kh$Lq~~fo=k=$DO qZs$+pU{CG*hqM(iy zA=h`gz{)nJMSBr+2M9JVxGrJv()`09-PW@Dg8KAc`K}d Y>SbUF@?1B*m zGoVsdT&Hl^j9iHrV$>Iz=3Ioj=T!b1UY;G6;LwemH