From ec86daa8e47382432535e1b444948d6a0876d33f Mon Sep 17 00:00:00 2001 From: Oliver Rausch Date: Mon, 18 Nov 2019 11:22:08 +0100 Subject: [PATCH] Add Cora example --- README.md | 5 + paper-classification/README.md | 40 ++++ paper-classification/build.gradle | 34 ++++ paper-classification/conf/pgx.conf | 5 + paper-classification/cora_tsne.png | Bin 0 -> 54358 bytes paper-classification/data/graph/cora/DATA.md | 1 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55627 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + paper-classification/gradlew | 172 ++++++++++++++++++ paper-classification/gradlew.bat | 84 +++++++++ .../src/main/java/Apps/CoraApp.java | 84 +++++++++ .../src/main/resources/log4j2.xml | 13 ++ 12 files changed, 443 insertions(+) create mode 100644 paper-classification/README.md create mode 100644 paper-classification/build.gradle create mode 100644 paper-classification/conf/pgx.conf create mode 100644 paper-classification/cora_tsne.png create mode 100644 paper-classification/data/graph/cora/DATA.md create mode 100644 paper-classification/gradle/wrapper/gradle-wrapper.jar create mode 100644 paper-classification/gradle/wrapper/gradle-wrapper.properties create mode 100755 paper-classification/gradlew create mode 100644 paper-classification/gradlew.bat create mode 100644 paper-classification/src/main/java/Apps/CoraApp.java create mode 100644 paper-classification/src/main/resources/log4j2.xml diff --git a/README.md b/README.md index 1c44129..89cc0a7 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ 6. [Article Ranking](#article-ranking) 7. [Movie Recommendation](#movie-recommender) 8. [Entity Linking](#entity-linking) +9. [Research Paper Classification](#paper-classification) **** @@ -59,3 +60,7 @@ More details regarding this application are available [here](movie-recommendatio ## Entity Linking Entity Linking allows to connect Named Entities (for example, names of famous people) to their Wikipedia/DBpedia page. This application leverages vertex embeddings to provide high-quality results. More details available [here](entity-linking/README.md) and in our [paper](https://dl.acm.org/citation.cfm?doid=3327964.3328499). + +## Research Paper Classification +This application demonstrates how graph data can be used to enhance classification performance of a research paper classifier. +More details regarding this application are available [here](paper-classification/README.md). diff --git a/paper-classification/README.md b/paper-classification/README.md new file mode 100644 index 0000000..bdfc022 --- /dev/null +++ b/paper-classification/README.md @@ -0,0 +1,40 @@ +Note: this example makes use of the new `SupervisedGraphWise` classifer, which is available in PGX 19.4.0. +# Research Paper Classification - Cora Dataset +Graph analytics often allows you to leverage relational information that other, classical models simply have no +effective way of capturing. One example of such data is the citation network of research papers. + +## The Cora dataset +The Cora dataset consists of 2708 machine-learning research papers which have been labeled with one of seven topics. +Each paper has a 1433 dimensional binary feature vector, where 0/1 indicates the absence/presence of selected words from +the dictionary. Additionally, the dataset provides the citation graph, where each edge represents a citation between two +research papers. + +To run this example, download [the dataset](https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz) and extract the +files `cora.cites` and `cora.content` into the `data/graph/cora` directory. +`cora.content` contains the vertex (research paper) feature vectors, and `cora.cites` contains the edges. + +## Running the example +The example can be run using the command `./gradlew run`. This will perform the following steps: +1. Load the Cora graph into the PGX server +2. Create a train-test split +3. Train a `SupervisedGraphWise` model on the training graph +4. Evaluate the trained model on the unseen test nodes +5. Infer and save embeddings for all vertices into `embeddings.csv` + +## Evaluating the results +We can see that the model performs quite well on the test set: the following is example evaluation output: + +|--------------------|--------------------|--------------------|--------------------| +| Accuracy | Precision | Recall | F1-Score | +|--------------------|--------------------|--------------------|--------------------| +| 0.869 | 0.867 | 0.846 | 0.854 | +|--------------------|--------------------|--------------------|--------------------| + +The hyper parameters of the model have been left to the default settings, but can of course be tuned to optimize the +performance. + +## Visualizing the Embeddings +The embeddings themselves can be used for other downstream tasks, such as cluster or link prediction. To visualize them +in an understandable manner, we can generate and plot t-SNE vectors for the vertices. The following figure is the result. + +![Cora Embeddings t-SNE plot](cora_tsne.png "Cora Embeddings TNSE plot") diff --git a/paper-classification/build.gradle b/paper-classification/build.gradle new file mode 100644 index 0000000..4d92f2c --- /dev/null +++ b/paper-classification/build.gradle @@ -0,0 +1,34 @@ +apply plugin: 'java' +jar.enabled = false + +ext { + mainClassName = 'Apps.CoraApp' +} + +def pgxDir = "$projectDir/../libs/pgx-19.4.0-SNAPSHOT" +def commonDeps = "$pgxDir/shared-lib/common" +def embeddedDeps = "$pgxDir/shared-lib/embedded" +def serverDeps = "$pgxDir/shared-lib/server" +def thirdPartyDeps = "$pgxDir/shared-lib/third-party" +def smCommonDeps = "$pgxDir/shared-memory/common" +def smClientDeps = "$pgxDir/shared-memory/client" +def smEmbeddedDeps = "$pgxDir/shared-memory/embedded" +def smThirdPartyDeps = "$pgxDir/shared-memory/third-party" + +dependencies { + compile fileTree(dir: commonDeps, includes: ['*.jar']) + compile fileTree(dir: embeddedDeps, includes: ['*.jar']) + compile fileTree(dir: serverDeps, includes: ['*.jar']) + compile fileTree(dir: thirdPartyDeps, includes: ['*.jar']) + compile fileTree(dir: smCommonDeps, includes: ['*.jar']) + compile fileTree(dir: smClientDeps, includes: ['*.jar']) + compile fileTree(dir: smEmbeddedDeps, includes: ['*.jar']) + compile fileTree(dir: smThirdPartyDeps, includes: ['*.jar']) +} + +task run(type: JavaExec, dependsOn: jar) { + jvmArgs = ['-Dpgx_conf=conf/pgx.conf'] + classpath = sourceSets.main.runtimeClasspath + main = mainClassName + args = [project.projectDir] +} diff --git a/paper-classification/conf/pgx.conf b/paper-classification/conf/pgx.conf new file mode 100644 index 0000000..6a14a2a --- /dev/null +++ b/paper-classification/conf/pgx.conf @@ -0,0 +1,5 @@ +{ + "datasource_dir_whitelist" : ["PUT_THE_ABSOLUTE_PATH_TO_DATA_DIRECTORY_HERE"], + "allow_local_filesystem": true, + "tmp_dir": "tmp_data" +} diff --git a/paper-classification/cora_tsne.png b/paper-classification/cora_tsne.png new file mode 100644 index 0000000000000000000000000000000000000000..32c03961370fd3226a52f1f0258540652f55cc19 GIT binary patch literal 54358 zcmeFY^-~;A+$~H953U@kl+#^xVyWvxclOZyX!mTd!Ks# zg174aaHoobU8bgcx<7i(=}j%SNQ^Y=D?SnP9kbfinb4d zR^|p2F2)Xy=C(HMOsq_-3>0QgPIlbP%>Vm;CR+zn=C>yJgfK7^FcQMwl-yDemc6vJ zF4L}`XOrGVgf_eidPfs1lJG|J@Y>riIc2@MW_pdnQA4bk!5xSt8*u_tNEVr|UR%qA!ME5)el#tDvUF=~nVF zG+U5f8Wj~^tJ$sMKg*H$AT2Gyi`I?v&x|Dge=@fCm_39SQ|uoyNq&ne2;$j<28<%g zm=dg;9 zrO%(o7iKx?8D||ZZ+*gF$xgMR2M+|HDfq{C@UHaAt&&>S8oSbiGXBuL->aR)A!*e7xclMBJiUugnrTPAO zd6gU|>SCRcBfD1R(0a^s9ugQ<6i)`70(NN}4&?aG;CR)guJ4kUkMFSg0?WziLyVje z=YR2`YG`}-r2jqYa0cDJAN`#uJ}^T21pkLaKd*ThC+DrcORZ>u^wCx?ApuZ}oNBNj zo6*SR*tdTsWOQya*Z6zqC$cMNYe4W}oljeI6gqQ^_`x0n7AvQB^Uue7FZspAg+G-O zGORdB;QzwU5Y}4xa@^qd*U+^7NaJt|ZNdITrk*fqkGU42N&YAUbe zYvPzaGyUw;Vt%l>{E=zY$3_Eu7jui%>Fn!ur-d%73xK{HDvZkirrmp1r z!SRfjZ~w+E18;_*0K7`j*VdvkL6k%NQZ_xAS-#{M!U z8KQzKi$h)Glz80Fs3hYVGVAIRdcyJZ8o7X|8f%n`)PWE_2Igy?#M*x7l;WK=T018; z%)OhQ>FkZ%NS(s>N0a`^!La^V4`!;Zz#E20{a`#@wL?;xlKTzwKkT*l$hfj*%&mnc?ct+$xkEeZRbA1+GWbrx zhg|CSRR&i^J!P*z^{Y2m2lD}tV}W33jL{hIK(n1cA#c%x=UcsahKGk4G;1R+_h;jh z2%+8Pn3xjzUt#uUe$*%Q%13Wa^l58HE;Z%Cx%4pA(%`TnykEk8-+EcQu(+`(Yg8*o z5Y$g%oJ@m;hNk7Z>^zhqkP%7DQE9#S<%`Wyzdt<6T(i4lVaf+eHfSP^62#aZQTppa zO(3HlpR`qRr6|0v6@>qrt%^c--O9{L%k7U1sU-X)G{9PhzWIIi&B~%wDbeT&XKodz z!Xgy{#?h>^*=pP`&Cbkx#cuNBH;~UXSl)11^KFiEJS}uy#4Ileu@F4YCF&DMY`t!d zXd$Y6g>%-8&5y@WK6{Img!1xaR^Z8>Eoa6Sh(Hr(cFe6eltn5fS^46p&6JdrnJuJC z-Lr=qG(-L4Zur{2euzrmbJNh9r#&C6ilAbBiPT3D zNYLXdD-lW?OlXab(KtyqybzUOg8lf~*-f8$yZb3o4jRlB>u76BDA^+w5Jk2_zEZT8 z)U9xDZ7_nfa&iLoSP0nDXFo~%cTgN29&SRR8|SyxI$3#B7F2fFlPzX9TTs#n zoggvc_nRh{L!yJ}y`3Ej0f7v;58b)aDOuZI?kzfddwcnb3RmSJ{Y%R7uMW;m#;mEA zTTG)K#1a-0LowGJJH>%ImgWnzW` zU8wvKZ+>v*AO3p=bPwfaf-Kp3JWbdS87U2nP!UB z+4XG`L;9`W7UhRb$Ke2xGSoJDkrZ+*+I%nlw*-xjKC^X&srHL)?fX?RqL3g&T+LWA zz+wJ|0yd=Wx-6opxwu-Jno5G&74jX6go}gD$LPuynfGeWP|N#vt5~}!e!wY9RaseH zN2gT(2PKk0tT1N@&Pm6;57z`55H;>-(LZ6RgngBb9Jr)F^Uhqi1j3p}xG%%0D^qM-8-% zrp$OEU6PG*nZMyMcu!!0^yReqej!fH&i19bu1MI}FhMhX_-A!}yaqdwsQBPuUxkH* zsnuBE*3{J4lbfpJ#T%cVM*E~H7pa^M$a=@RLcBOa86#z(I2+{(d>8V)A0_>A?8Jo1=xF8LBB`LzjSDw$C)+4|gT zx*W`P+(Vw9@(-t{r#+wVA<%i#jIC)^-L0tt#fL-4Qwg5W??hNXnBTvDLzN;%<7ZX8 zz4=YL|E}2uv?_@hsf4G<%qK0Y1O z&o4PZP>SzH=)(5G-ZT@6e+LPV1a6yAj{!zne>tOhyUo!y;B~#sQQrb&HCwNJP0#Bl z$ku{o8T{&QUPf+t`A^-4b$ri@Y;tMkIAa7h>A1qeLJ5qjl*r1eDx|HT`kV1^^F;_k zo^PO>oJPCh^FAw`3f%`G;R)5|eR1Q6dJP_Two~g+YJy_D;}wVRk^%M0hd|9y<5+N#*?J;&Qe6WNd7_WY>i@H8mB%t*Wa_?&T$ff|Jhc9^2U| zC}KPEsvycRLt=#InRkUAgyD^W+E%WH`tbRn(KR8AQG!0+cw!Qpio}MNojs$NfjlU) zJfVS(BnTcQmc#Sp@i@5YIOzEX!|iT&lUIzAK-8d9AXPHz^q`F~r&8g#U_h=Jbe1nh z|1I6?O8sfS?I|4cbXAv42HG#F>mM45psR$5XVMkzDziNLS~(b)>m zaYvZ}uN{^f*$kta*lpdQJ@-Wp9sB6X76DT|MRYh5^2Ev$=i?(S!nJ)vGYp<2r6WU*{jGWQbtJ8@xG7Xp^$FJzn);WMmArC>^q6e;384?F8Rw#yQ23I8yHj zl_4S`G8umOB%#~nGVM4nf?sYiO=r`vg;(0Jt-*iOL8Rk-D?H`xSH6&pJ(a(R+J-dI$R%)Y_lI>{4x8drwX!~UlUgqG#t+BOk8K|r z7`iu3Pc9~9t6UB>+R4baFFkI7fPke+5VQj42>!Z9@yEat8NnlLe}7-uN#+nXf)+yY8jCBiPh; z95M2`y^UwC3pN|c$k>Y?=56eiBE!{?VBlg z&{5Tr^K5sFT{J(ksupI8_12)NTI0ob_a~JJ9Zpnuc$OaOH`eGV-$Cu9L8Vf28SsV- zg1n2KH(lkf$2*5xTPFeJQa&IPwwI;rWXT=Kj^_U^DvAIk=BXjYFMbOC&q{X8}bkKbT@o*C?T9&v$cUaPC4#y-xLdnyheq(52oa zhWGDXV&Ka`b<2}E29mh}9@P^+j=l`(RCtueGpKh)k@BcDxmYVPS&ERWdyI*Ugy(jteQXoXfizA~A^$@wYWdrdv#ilW|M6=G} z=0u-6IFfW=VBpnicj(RqTd4HMC`Vs&L6$d%hd(ng_#rz;a`pt4W_p}Uc&ah*avBz+ z9m!@qw4wh6?&?M2$kqrz5Jy_PIR^SM>SYTqb$oe_>XwuqflzFw#zwKRD zX4##SezKgha}=$;nu{!+FuuB8@R^7&PqLovQ7WM*0hsT)z1F(GCUD5*?gCc=bMjL` zVIdL6!Mecnxqz6pq93k6bYH+IRMMH9Dhc*geqkr~%y(HrC*4<`KA7r795G(Yv+GQ9 z3}6ydGrfmYnYr>;z58w}<@!#fbF;I9ryHZE!2+ISU=NVp{do3uOw5`|PZ;Uuc6@Y- z%T4ySEw;@qmJK&Sf8FwOs+h@Io85AyY{n!+GS>9Q%YUP9Ej4c|{z@1FpJd<_!(r9+ zVglc`4GMl|fg*G+{^Q-C>Z)+vKpaF|2jjRSK!T^Hp8{xbKVqRG;5x+^)vb8!*Pl}$ z1{v2@SD&On9uUBlYOS7J`?F<0RCgrOq*K&ydHcuoaCY~?_;jY$Wr+GU3bc7x-lE^_ zR$rz0na7?HVQCUOf{4kDskC(=$_`S?*k}sgs0c6KF>}>)JfGV@yT5NTv(ge04N7@> z%9P+i@1t~Z;Q#)u1K+J?p9MuzfMajYikn4)zbpD{&kU;56@NzqzN#r9g4&UtCr@+* zREHvxd)hUoFxVqcljrT4g!4oC{?NEw%eQUdL`GVE_&EQ$aE^#e zc(jrd$r>`Px>#U(f4%63U{lAZb)t0^9fYqA6Vt!w7XW_OQRld@7!^kE7oj!f!n<`$_g2m`yhHM;cjlq0Zzw*rug1i!tALVGnsI(nb`tbA_w{-r@O4KarefSqJSB}2Den);+|KS{@x zn6?EfTMhGOehuj*hQRe<&7IV@u+AvORV_Z91dqn0X!3IoG2tNFt+qGH2TEpfrDeZg zitAw=`6-6Dnj4_H_=NG)xu2W&jjhzLLCqdlJucD=l3|>OvVArGeDhw!_a}J8R+I=j z>>1x@SmD*wF~3Fg3bb6|_B(<8jZm&waowK~D)sWb;1PCHh2;qKLjYTQNjE@MA&RU1 zbqVt}8Yo%yal6^Wj5R(fe}0Ac>xt})+fX+F%`lmEXV)AC0hW1&s--_U^r@zzqN!b1lLEp1FIjzl`y09OX z=XKwHO|Wbf^ll&bkZDpZ5QrSr!Chm^X#iYj5!2s*0naWShe%$$esh}UPQY+Oa%*jcV7Y%YgQ9Ps;078e_A&U-RtfpG<_U$h`5((l**K&o9JfG(<0ai63=C6n-}mlr{MGxwKsn8DopZLssch<4 z*i1fkyN>5-!&oe{wa!2!zKnLz@x1(U+XMB*WzG1Un#2bjap$V-;-Lq9?3?QZ!Ry%i zDDdDJHhSM=Bui67>g!)Ai@nRPstTIK6n_%z2c1p_u2)ge4@jsjPZ5G8uX5DSEGR z5qQy$;vU@9S-Bd;Q&>Q4#?+1LnHH-KaO@m_L$0di;)&HU?IEX@o{9W;HzN*J`gGu8eIbM;0l%1l5N zp@A&CjQ0*f_i;w@VZH6C`_$G;NF@F*X`p_HR249x_Xy4DD7DdU6?FsOsr%p3J|I}enRASA;;z&zvY^ocs&w1)b z*FVe%Jz2Xqw=BwTd+uK42kZ+O`AfM`Xf(Siw*zH$dYHpd~?FtR80?R0eO6 z-MQ>LgJqdF2%-0B?_`#jIj_)Z*;iw5cS*;|XfNx(Hv(vGjQN)pDzkfoT~-<`Kjqxz zAhcDdg=eOoo*H>R>R69VIo}pgLZvOFhJ??9Tr7H}Z@)|zywW0xs7NWB!JoLU62*+; zVN+fbw6+;5`4ofUQy-9(Ma0JD0JC#^yxt!}gidmUgC0y@_>)9VeYbn7u#4p&%c5Sq zyPahstFNl>f{L(fGb06JBRCvz3uQsp3?X~Ol2HmdAOZWHH|L zhB|YU8$xKqoHH^}U)S0Mz85<^%`U=X*WUb#rVY*mOJX%P&o!^Kuw-M##vackAYikw4@w1sivvPsIJaW8Pi&SMXqK+frA|Jou1d@f*MJtO$W({s1Q{!#04N88`R>de*u-Mn3(8jfin2LSW4Y3 z42Pkyj;87~($dP^9@^X_c=7NY5Ut@zj${UHV=vVY|a45YEmB-hFoa6T94EQk(H5=DNM1KS+c1MLds3*3O=SKNk0UW z&k4aYg3eAbeQ@aa~<{KE4jPYAI17f>y4W=TiZl z&NUW$PN~5`qWbORwC3kWG=iW3{8kvqJ=v#EU)`gEyHs@s(ks~tWlDeSvDI%4+Ru*c z9m|gCnjp+qOMD}UUHQeGNb~CrdtFlQ0MNNgX)X>m#I>0MkNz29{La7`K^WHlL#lQwlAn$~5(RoODdp zSTg-%SpZi+<4ltQ5dDNb6I6$$2zF&*wJ~5reQ-e4Y=ODq&Wc>?Xa5bj4^A<8k- zRb31u1Tf_MX536)s+w*-JEj@jB zdO8{KZ<)NfK60N_Y+8k?r*Ww}uR*g4tc&fe$vkZQhA*}{Op@`QAM~Md?}FC;*4Ib% z_I{_td>w3f&><)qp)s^p9wLl-RG*#P0s@B$rxGCWUa4Ub^94A$&~<8?&;qTNIi-Nl z_EP8<)PTJ`i$O4Wz6Hbq0Fd&j?8Gbs=3oc zgEyM(uXpz?b1Etnv&6-nw}l9I+8-`XDV5}3Q?a7bqTrXNpPg!Jk1zB1T&hABvXV+_UCcU6V&+AG zG?%=yi*(k3;UceSnD>b~4%ofYM}TXLTm0$xDc6bMZZz$7koP0>q?=?soW{Y1OWlYntnZT8Im=PMK>t;s;V(JiLjSncj3hklS{W z>0Fg51^^tr82CqAj9fP6qPAzMz9>Gf0z;)Kn&?re5p?7qlN)b5{~T#V@H35c9R$(* zlF0wYW$#bl>x_FXg9Q~0WXO|?!H6@{OSFw2^8Ppc3CdU{+kH3(p@r`tvCSWVi>I&- zF9DX6jh!6;c9%TQhi@Le(eR~S14)35y`{iLbis}j5B6UXN`;>KvR5F2_N%>lvjSOl=S*yL6wGBjxXboq|oIlvQbX z3^LdnQZhk!R@Sc>yl*AvDyb_**Wl4XEu0wS2zhZ|DZVNz7`AMXj~+i^T$cTUGL`CJqWh9r^Sh z;%6>s3+v~HGB#KxFyAw?5xr>nGnM{zJ|dmVVb~o4&_e66^aGAB31IctY4_NX8=WYQ z4VN=*n-h|%4g=JxhRJvxfB2%ikFPPVzFV&}Cy4e4#9@ZRzeW+C^Dj!2{lZ*LW^-^n8N5zX15vt|o0AQXg#5$*eaK)Y0 zBg5YxwzP4N&im;+qpyXa96#T&sQ~D`r#Svh?gDeIvQ%~0cJ#a~(%k~UeOdtl@{CcA zLh-wPF@CnaL;&{qd4JRteYjXRxwJG?X$)3t^X5xRYUB~n1Y$`lZ$nIcypN2tqRHE) z{p|Ys_>~piG{qSBSILgWZ zb>I@wbQCb41@vK5!@v_C&Jr*I>LITAd}OET(c0RY_xa(R_j<|EjhD>jctzUU`Y;h% z1k|TKz_zD)Ki5Ni!SU3l{C#`VMW?d*<=!SHGyu61YWs7DfQxH3e~hSi>r6pQE4)v! z<8*^(^wtxYnin12!J31z@|9gn4CayH?)m{09b$Pk#&?jOuFDxwvff@tY=evt;^dD; zXXCFFZ}oZwC!J_+yq5igXZi$JpqziXl!naX3tj>k4Ah%syctp$lRxy{ zE-Xr)orn9*W#q{_Ruf#=UR?e@Ih!!Iux7a8Epr2Q$VIS}f5nvl1^xxN=ZO&WWUCub z&mz3K>T1*x+rs?()swX@D2{V_(yq~DZex`|Cs)9$b2tzm0?+p{K>~ zcoxZ(ag2>`?HY2^N7S^m@+j%yQ)PIpkGE6Oe*FSw5Rd!lPSo-A!^hcq3Xt-5f$@U;sI3kcU&9xZWu(s2#oje^xP zaK=U?hs}3qMTO2SIx2cFheeY<=SQYe9^xo$9}GtT1_WMZ^>n8t!J-Sgbajd5l^%3* z0!RGD;c{#QlVa2VaXftB-t*NLt9(jk+nt-Ju|O-(1FL_B5tS>^swd*mdEZJ`d6$4^ zwr(w@V^k1&E|T*;a(kQCA>`)4DthTP%xup`xpY70-GutQVsSri zd9Q|->blaixv3?j60ggr&K_Z$1YinCLFgyZeKJ)LI%>8DNI&;tUri32zk5K6S1Zit z&n}sKyp;S{tSqQ=l{x8pELWC&ej*?F>X9ZzXzm9nv7kS{Zo76qFCldJU5W%n5t{|C zFHVM+vc`!8sw9u4e1(D4MJeBIy*X0w;3ZpFT+GY)LzwIeb9?(eK6ca0W<^R8{N9&q zt#x-~i;e`fHL<@v(1UYH#>B*XN{dN?8IVgA=F(`~-vxbXbtOs8@Krrq?OR-1<^?1Y zX*}U4ZW@MVUAX^C0~+s3Q$woU0+xmHpIH-rEI8qslG2 z_y^$+7EndFqr3-u7rQzw;^o#6DGKkb<*R_5Pd zD1R=X;Oahftr}~CSv zy5S$rPR>pZ@)O`8hG3D)J~oGcDb7@Pi+ZDVhJ1A0X`cpe*-}T%F-ElNI!kzn^;`?*}>cM_6cq53|X0_e# zwfz0X<)u9|%{4Y91$+z57`>d;CC9B{!~)QclLpd^>>wh%KJgo#jPu(%<|kr6&LjP8 zUpP0KPpQ;;opdtFOJaG-2tO`BlQHh-2qB6bBH`*PG-b%f!$m5y_p~5G^GOtkUwfv> zJ}ukwG`8cJc^Si;?Jus{!nKJAGMm zC(z$^SeCW)j`}<~-re8d0vV)}=eU`@Ue?+9Gr+oEyI;+lx?fJKayjqe_}tg|gq!by z6=?bt*VeAI>&`d)$$UCgZWeTXu_zpIZ1r(OztXn_AN8> z`gGFY;UJ$ZSc)7h)`f9EngfC6BX`7|}PW@}XBO(zl8o}JB zDeXbz_J--~G>-h(WUcc%0}4r0=B!vZ8w+YUa;ott5PS|x^*|B z7hIN|aUXWXE`M|>*DnhlhhpcQxm%4x#LBwh510edF*bt?FigW>;um|$G%Ig<+d4Y} zT(s^H`StMCksIG8@#1PAnW*EXe6e0HEGk|1ItG!$*tT5aB_$;pnTqM+Fl#sd0=Ojl zZFe%a)mIi47O^Wjm@!Uok>P1tIFE<6HxF{GBl=Lan3#h);6!rxy31=W?b+B9=oY-t z8;=^1@9x2XX;CaM9~zlL;~qP%F&`d}#SV$>J8RM8s(QS)(3oo(+V#HXwEqZJnA z?b}kYH390~ax~&ECwKd0=X*tEGWBJ~>I4;d?J%tmTg+AFlerxkvgy1M`uh4qULwLK z>|i!?i$a4d9Cd`iz!Woc_cx$7e{e4ezS`R}uGxucnOfSA5n*gQxC6;*(yo(>>U|es z4NHr;x|=rB!rh%{i=jWz34FGLerYnbY>kNIQX>e#L3UuZpvz-@gt&ZVU>k7WQLFzydp^r;bPb#fswXn-icWbR3{g5axS=`aD60QaGYB zo*$qAi$FfPeLVIV4d%bd+_fnU>8}=7qPn&EP7ooyvIZb4%~u+jFseH4i9oSXtaXbD z6t(qdgF*o<@}?s{2zVku3>6z|#x?~fZu!g~GuyYq7LJ@7UjAJ7=dFC4XJ~Q%IR9h? z|1p#*Gzguh{Ux@rkMec_&4GHg+4yR65w&DIi_eqi3(agQaIfBa)5E;((gcvbYe!AT zxz*LbfKc?Mrvx8UqFJp27hqEWM%Q?yS*vsHsve3Xonva6TLns=kyBFYdbkCPJu(64 zrfqYDOPDEnSnw!Ne-{tO>d^6$4LUj^U0sZkp~qz;g)-BlKnWD_gsDz(j?-ZbhpXe`0$_%A=gtbmUBjvAn3>F(QvG8z2CKs^fRKS4|9r8q4gDR&LnI&dqtanOY8F>nk4 zKp>%6h7V+VX4O};ZFo8~T1*ejXkAhjR~ zQ<1904_KDrN*l;1UwFt>cyy9P1qxGowI_9RxZ$O6jCSQD@E7QzViG326ag=CTq=DU zaxKAk&!@_k~Ic|g11ZaU&bM<66j6$s#T!opZ479F@(sadZP`TGt+?J|%M z@IIGz?rL==v6E_8N(vhhy(olZesCqMB2OMj>q&N-j03#$ei;Tlv#|+Yx#z7Rk-`T+ zlnWGrl$1zuzqh)!&e(3%9FmyU%G2EP-vt7~&77CB5?H+~seqaW?cvu1fY2j0H0;i^ zUu>t;nU^qP#!xA|oR~n`I#rTWP>2RA|J=)!3V4&22Hb-an!0|nR@T>Gn;0Lj@pRM2 zV{TqRjfF(p;7m!mD|>omE;yb-8EX?%7L1Edp4Z@RSeWvO-q@&q_xLz@qCy600JK2e z^=kwGWNmKl4o9$ZzxB7=4jUZL$C(4gjY$%EN&PISfI1hs%PuzU5OEdY{|c<7l7Utj zJ2W+7AwFhpdqT3UquD*ZDx4Flua27gCY=j=J=&+)>w8bUdHUZxT5*?JpDDp{ppSmK z$YY+IsQf$=6R@ak6&lk0@1#hqO{Mt{U@q;U<}MhEwMKZf*hKYOI{YVoG#;P;fNg~N z`Fo3&XHmc;TJZzUDo_KjYZ;t2HR-MoCCMbGaEO-ZZ#$WYJw6!%?~n+O@*U6>3HJ1c zheZ5&S=?C4#$YO21)(LTrh`R*{TI6|XHY+T=Y5`H4A6S4#IuWZOr8?^-UKi19zNm%%Q;AFTP&?orMSHw{>)kmYrNT9x7G$x z0+p5h27oW1JbqaYV7e2j=E-mY-+(YO@K33-=47!GCQb+7q(sE@g!7YFp{Zf}HzOnX zI|rU?2eL9j!7RX1EgkLe?k%Jx_Kv)*Fqjb=N#b^-5q3P!B~;czGljv!la`(aUi?Mn zJLFDRO=Ueji>TJt8YXA9lhw6HnX8BRfUeEefsoCFF8ASuzMpAU#ixIbU&&g(D<9P z^X0EmW=h38l!F0qza7Ta6IH7i%V(MtwvUu-#06uq=9q8bKG4w_0BTo2Cd*i?Q4^Mx zl_hb_n?zHrOAgoDG-)|LF(Jr8z?=6aynk~S7IX$Mk*u5Ojct}*7pZe~eYblphmnlNVsz>}C7uZ@oMniE`k)4&Cc&DdZL9Y;JnfQ~mk-*91pvA%%($$b3_6uLjs*zd%SN(*4@tcr-xM)6Im^X;ulr(MXJ zlgZ@DlQcT{O6;Bq_0Xbe`&vVAj{ENd8$h1@;z2Yo6SA@*xsEL;YRmZCX8Yq7{U*47 z?DcaCxnSmL1_h4)-FP){`Gi8&d*4 zI?q2g)&reH4gVUpCy13C%su>7{Km?8TMECVqy~W46bRfk>yN@fip!{&F@!>n)ka#m z#`4osI1uCLS3}Xlw)D*09 zdLC|-oz^6@^-B79AhBnCMNdlMO-JT`Slig#?wxItmpi%s_3Hp=qX|y?`>#)T-u3Jn zo8ZSNnx`4h`;pE5_F`N+1cILF-gvA%JjlZU9X}#vk#Fmf;ZIIkG{Dq79azC2kASPm zo9`_03;e7Xvp}`HWOL-O(lteu}VNZ_THT12i ziMP3j5lkBPeV%_55#C0|)nF^Vvb$N5k<;K_V-esb1GOP7=xN~P8pp)NbcC`$x>Q`Q zVJvo`H#Hs@9D3#8q_@H7s?0RhfM9ct$Hyjxgj_jnUC8ui%UaR%n#2xgog2eHkCy4r zE@;!$8p&u>@A$0SrOHyBjSzqc>a|unesOo%MQQAO;aQXgVsL*9C~22ZFtpa~bUKyy z7W`Krx~t-6f9K~1uqC7e>UT~uc18A(gBU;bx(}{L$;T%F?;{>2;kUr}2zmkb^CcM; zmLXd(Cw41`Rrxh>9$I!MCqnB*+DLwbHVpYFI6O%$@dMCkJ0qfxO+$QKz@GK%@^7v? zJAyMEor*oDWs5%O%12FRQZXg*TphRhm6k4V9O$>nhKF1BNf)H-Ehqp?HB*W!8-?jTm@YTU9k@EJ(Mxb(c>YuT*_h}_qvH{1$ z_EtM8Tv<>-DmRrpe;k?LlA=yL)gE09F6kxb(K1xRJgqaYP`o!>ON6sgEv%ojf_=h5LZpERo&S%~`_cBiLB7lDXtGBe#yZ4I zmNzs&dtDRMrPX8$SshJxKc54HY`@*zerd^po5ywZh7yH_>VY6@W2P1 zYX5C&VdH4NKjP$Tvp?XN=2EW;7Wr^N0=j0}YWH(4uoBqgV|7MF*It>_pwJB-1-d@c$d6l*&?W6nO>c@(Hg?05`nGP0vS z-8H%l%gfBN?)9ryY;mB<7x3N4w2X!xoR`jk8N-@C7Ar9zJxNxwCc5&TqXLD+7ZK<@ z-uzc3C&VD#SM8W_^p6H(X#Wo6V0V023y6pJA{}cY|GIBBkXmguuM$NHqAYzBwRi!c zB=2(JMm*6)N66C{5{iCGGBv2e$A|R8DVYuYO+9baV4o9WWaM>x;I!^~jv{5c5e2lT zZY>BLwz?xTB9Vp}-M)iE8(Q1<$WN34Pn2yQl}01>+|Uh|glOWBHJ5}9r;+Fd6MXgT zaAq!i^p)qQ42Nwg=ql`(So9MLBV!F952$%wudtf$qN@}ZUe{BL|E!AGk@p)oqgiP* zfCV)F>OiwKxNs^Pj9#(TAM=avxjI~L^m0YP|Fn=)*5~@@?Q^=9o>F(yfB8#}m91CD zD2j-Feff|nulfQ}evvYUrR`x0_JH3+;xEt+WgDzBf;R!V373OW>SuIXd;X-wyL)LJ zug~JHt~~Sew_47>qa#ppH+BtjwG2l@0oSQditpiAgsKVOwtqU{?qqa8L}aUTd|VpU&W0TYH$_ z|2;|#1&KH)PBHI^9v~(g_QeE{-=eFoxzxp`S=-)s9Ko_dryU+Ie-~J%iiZIONqrBl zEk7}rZ;qGTLO>03N<7}pbP+<)<9spMjS6N=V(Q4Pp=dpZ>z&j2r)rZgtRWn~SydVh zn=R9NvI0Ym+oQd4^wv7Z!7Q6b%aTpq)f$oKcZ^xbxn8e(#B za8QX$Ye~kXZzY_S2kJ((nX$1Uw^?rDr{+Jvl>3Xy5bT>Y|L0t2x=Z@pC7g-TUYEZ# zHW85?ROVim9qD~U*Q36LZqe3A#*)OLWzCO!=uM=t1OYHG$A9VwE)JBBu&IfNk&-Vo zCtQZjP8iiMKruEv&Gu%4So;8AJaBNQrR-8gbahdHy0U}Outfh09-|b)duP`^j_R&? zd>Xe;oTpKy>hSvHHm<%G|^Ga3}~XsS4=z*8l7O3#>?JS3JKsz;Kzag4#MfvJw~QFl1g9 zC=np1{9f;yT)?(W4glag^YMn0(?Ntr{ro=`g{N>XNkE`A3sBrxpFD49?_2eR<#8T2 zhu5%FM8u|%LdK$)_O%xvWORcJ;FpdFz>`Hq`GHeIX11=e35aiD3hlTLXCK#lPR4|E zYORaj6IAP7TU*PiBVAs~vGz1V{^4QnH>wy6vC-}SqXjr$@4y!mut~CdoK{&uZ5hB9 zxDfHgzopSCG+s?Tw5^MC^59fpGI}vFn#Tui5+W zIBQI?6hI@>+xr=ysv}r!(}TCbb#V!*gwEfRlad5XDkhhg+grVg*14~NPMS+CKN7c1 zfI5>_JC6LIH8J(Tkdq{vnfg6ufZQzn(%F5T+wLUu2J;yvkTrX$E9T8&6d5%EYGr<1f~=M|*X+ZVE+C#t6vqLx-CmY4 z(~v|x`ee>aQeGa9V#%J`(aI16`u;WR}Qhf5DabAOj5tNz=J+tI9^FlWe8m@ zLU?w@qX3DHM}&}aFz0wpN^kEtQsC?Rbl#+{^&V|jsHX@eLgvo|O&cy@Dz=OCxhlkm zr_)6OSg%+DESH>F%EqS1kW*pIF!luXDQq6&QQzT(UXvMxp=bjervPV!^Wd z^0J4Jg}3S8BYhY7`vosYM|KRKV~}vIb%30i-F+tt(<+ZF@3$VMKCX}e5A0RGTVV2VOPycK?3{O$0LxbNlfI1ilUjFA(@c^$1BSpQGY*qyMDtSS znqQyLE$?YlxSR9SbB?z)A9+*p!@;ocTu+oS<}9eG(F5cD>K4(*dz-NScDv#lqnS`| z_#Eko)n~)-WRjaxowM579_7IqSL^8!3FDgS%AtPmB!WnkbF!4x6gyDA{}<}eEbO)p zCqhN`5eElH)g=h>zS3CoDN}l-?>q&LvSp z!>xR?D>a~)X9CWStltWg5k|0<&&=bhK14_|FXvK9(rkri++p>Gao2v*8lLsJ`c~+p z(aYH86W%2mE#Fp~9`+j-pqTm?Dk)kiQQ8lqo`wjRU(H1%7T=FI-pG)YaquII&UOv> z?;O&i930wuT6HQ`r(2~dafbZmc$vGh8}C%YFS+R{VM|@e>Q!n)gt~yw{_5_eyg=}K zOfr5?g4)O`mLg+$Wo>D9_l6+M?+ZlYaQlEzn*ykvRpNcVe?y8>zqyJL8$=2g=;pij zj1NSCq+dAZRORMcI5>i7A4o@25~Q2M31oBoag+KZb2t>_6<9ejEH-&_g*LvN%)Y>e6 z2c&=0)YO2^Ze4Pt_yjpR_-skbpN|jFd2gDU7{JaREhg;cQcuTs1*=L`qC-uY0~D{;v|w&@M!?`5pQ{nFPvuV)hm_3A%kBDKS(l z<}+_HAHbnQ2Vj3%d?^61y`>P@AL<;kD9j_{CESy^@)9HXxph0+c_swvdrv zz$c$Bb)SE?-KMnNKF>E@*XQp&oNkn{zh?Je(*NotDu3dCeWzg(XrM8#GC`S?o22ce z>DV$``}?(UYB?({wP^ZotbwO}o|axc&GoO5RO?3vjk66cq8 z`Dm2sXF!jX^6D-BxOX#~*;wYKLEvWl_};U77pU!I$l`XhJ=kPTRgABgqro-Ct<+rI zowtkP_rihyf`Ia=uAKlur_Cuj<GII`}=o}8OzEZ ze>$;z5eo}AKffTHsQA@ic;%{v`YhCwBD$MV^UIuc$JudN-9ZFWo9pt?JV!LFK~Nzd!oFKArc6MMZ(_0h1-$pU!Hf>0vH&sHxFq0(HXgm0JJg zmFMk6!ZK4hFUloFjUA}^CHWlzKVSaXb2L%bP_D3%^_-!yGKa2J!6eyK@wjSxyS1-R zd%MuVswbk4+|pUZ}#-N zl7@yO%+hoG1G@s2i?uGa>NQFJuaB`IbK%=QbiqzflJ5rT-^62{MZaaqOa)eoR`LuZ(`Q~JGSt#F;Sp29dG4*v~qw!oA z20_QU*zV0yh(f+YI$z1`0S}joax+`n)bt^J_et|+4b^P_q~^yciny8@=r*e^X;FN~ zssobYWvu|+94Q3_u2-)DI9>nBv6#Ak=J=W_^|+Y9>cqlL1?R%Jsw~lPpFK1_Uu&rn zUMN17%?p2ZlpUK6*<)NzK8oWk&`vyp1s4jo}@PWhgregF33kyqm z22Ng5N@|s_ugKKyS=Gmc9EE@nsXmMB`!p7om!9U(N(p7MbPh7&`-OFdc=fpW4+sWu zM7g^UIZ`Re?7e7&RjjY42~T5V(EfsYb(7y2 zn{@mxRcg#J!NTGs;7T-}jgUgsHt8%ie6d!b>~Ys0#v2Q<^9#|1g^x`6z_F2HhM->c zK562?O2c6up`4^w*O%7jTQXL@YU~8_tElSWr{S@AnfZuc=G2>=oLJN2`lI?shvR=r zG>{Pupv&G!?59mQZ=><}!_}v!DIYaf&x) z&bOHlQ@ay6J)Fy=l2BoC*(4M-SFJUeI|2(vC7=deZM!M@KV53CIH?}ET8K}5S;{o7 z^R>00H)4x1nA^}mI%0~P`B*B$eYZy3y+Fq8UGFF@n4G|;$%!pvvPy`BgtkO6S<{@h zf9>Jr?Y&rQg6R8X`FGU(z`2!eT6&CR*ccPL?!%`L8~XQg z=A)Ku40HHV?b%r}pqcT7oSbK-jlJm|K80y5bc}pXU(-8A{h#x$X7wX`RfHR*%2^C} z)u7ofH=41b_xGP7id2t=jsoqYe;8tmg8`?qR7=NC@kH=7f za@==BJgK1A^Pkc6;cT)^hvzK?DXAaGYxN#jEgzzEkL7)c`3zI7QaXUg1ijPH9x7sv zVY~=Hq=IeQV69u6p3_ZP`xA$T#?6#1dD-VDs~5KhaFt%(M!=lDx>VZ=KKJCB-b>)z zslFL8(BByK`seN3@p6n6uD`W)(OZ!`LDopH^lLkZN49j$qf|s2XCzbswWtc&cudc4 zo|!cNdyDwuSFL{A21&mewF8ak^;u)x0WvPKbc=wZ+zUn4qtvBCR#PhyMc9nVOirh- z`?(=FEas@f!AJ(HtuDr9W|zM)5F+J=9wy6lY!%3vfF~TF5SKb@H z`u)2=oqkA1PL2g@>g)nRF!xNbx>_SuP+VF%+@vy=jLIhZ;J7lkwibTg;wz;R8sfC4 z$!Uk(z@stCdrobqPjJ_9u4GX^N{wt9`-21>?Mkwk@Qc`N^z0Yv{ORDsH1x(kLxqBSSI|;eO(lY7--+zQ( z;-?Hg{#imit~9g!dwbgQ-udK-N2iS*dgITav22#6d7YeafWl=uw_1iWqL9tod_P>h zg~k|psOfx}e>#u4MMAIhk>tdBvi*zHTNZeXjb&4^DL!%sjK}zn#dkt zcIS)Z+9zFlsJGSh;bV>={v=*)caS@yHF~Y#zfpQ|InCkvH;f|dnen>&A$DWqYq@iG zaM7o}zD{wG-*+BeRa`XzR*VaW^S-dKmpA&f>i$CXR#Qf1D%T|Pv&d0fNGd9`N{D$# z?HgrR70$tS1h#eF0we`U6_3|-KEZFuZE;fZpN~3y&j@Y7ackFob?kK{9x&RIHPxE3Er%Pqthm@fqFJxIf#57x?xDDG66X=?iB2mGW-VY4hcMgtL1(=p9)V7o2XSrTWPi^gs7An-L z&Zn|@V$)BbumdUnbiT%+XfVq?+?-@rzte(I;~|5CSiM7(ibN3?5}@5fZAL zTO1LBf$0S%(cv07OtZ33E=T#-FLX+3$-R}9TPkWv@y>KtBUw*pOj^9ClirM+WzaM z`|!+O1R6z5598$`rEe`0oGn>X}}*d@`EHj?g1?$xl^U*g(aio?km znERoX*6K|iv=fwkj0;nQe$w!0zN41vPb)`#Y)kQx`IP@M)n%Gi_xVI6zW)l;}RoEj=UEQ%(X0r-K6yXl(TWrgllUi&M zT;sIJEyIf|j}I!;TmJsPJ-{st$_?*LSe5Gw)>;T-_ zI-<~%Gqx>3gZpKy8+|-uu`DFUj zEX4vf*d;$-Eys^FxO;{uXdL)8Rl-0$TrE;dwj;jZ6`Cj#Q9hgTT<=?f$It}(ah>qcH(=lkVX6)&fjOrMR>3DHOE1*g-! zDWtTGT4TNtV)A4w!k?eZW;dmHz~$X0*~`$3QHl{?=)t)uPCZ-3&bC}$Lc_-VG@o%g z+sL}+h}a%-3JM}_bB0DUZb_kK*I^a1lJvNJ5rEd1ClT+S=@;j3lz8{#*|!dV4R5mA zar7m!@yvYAx8Mxh9LRdBmJtzk_$z~qaqDD9=vWHk?-Vi{`T*t z_6|tvYfcFLZjL=M2nb?m@qw=^EE{T=Pg_vU9v+wb_~}#OOThc|NZOu4Y9$3fDE1Ye z)73}sUp+^_B&f9UGwu^B5Fo5}PNr!jg}($MEPHx3WPA!vf`LSg~G@o}PI+2fWexG^* zE&gBCOiay``i~Zoi#&a{0)Hq6$}D!VnJ3i_((ZSpGf2uSW2=hb3nC?dWYAO9^MX^1 z8pzh8+Zx6uFbsl?=Fbm&j%s^~*&5Mu^(a|IE<(AMi=HxX1NHy(33COJ1-Kx`r#qyp2W{@pwQ|+`{Vh(X`SUqe zTb(+RhDPjhX`D^E+vnO$-jB9|$+^uOSyCxJg*EnC9ntz#3(1A^agKZCB~rWc3ULt~ zTOV!^3~{2+!^oC%qD8G1B9EMSMs4i9b z+rg!~51(Pf%HMx$V8|m(srWs|3W&2XMMd>mZ3sq1%d zZ5eU`WU1zius<^;jGCU7I(dP*Wg9@kVR~w7xw6R-&z|uhEFp_0GKi2i_%BuZ zX2*J%&8gMEXo|bSG(tK6O8OYCFDAqbw)cfhLa2P!@#4>*snkbjmLt`idRk8^-IMG= zCdi6PO~A66Enl47Am>;7B~h!&EYNAAl+DqVHQB-C>3~%meNm1!EyzroZz|q>+>K`W z`C#u-ge>iMCBtr_lVB0Ji@r}x{G8hK@0P9bL9u*Kcq!;?cb|PVyNtrLK9d>yCkN-H zak+NJf3|&%o>0NObnU?S6krXZ=(`Bqx!P@P#m8=*)j} z|MKdqICb0up@^PK<5-0JB8ijNoPzqp!)$^wzuVdOZ4yL*WD`)r1_{T`#~$9ZkV;UY zp%aV2z3al6Hb;j?l&aA#IlA5(7|C1>%&+gCnQ7j|V=BqE86NRUpDs=@ApA>JVvDL8 zqhGEn_aj-gEsNB5Qk}WDLun|e&=?d z`Yd<7m)}inpo}B4Ct$k2nL99Sf}BY3t$CH<*@Z)$kQBHxG&IJzi3#Y8@534~WkT3A zn0q_!y413xh}TYgYj(lRL(cnW&8ue8f^+EH^ai$r_{j1+L$h zrtAUqiWP>w#+j!?gDeu`-@@Y3Sxv+Il>B!S@mlE-k<#XARwl!v!7pry_2d@T9S$^I zuJ=i#{lT&Ir1yOPGz4U25jZ)il34|I)83fzmI>()Xc`+o)3a!0Jm^xg z0|7Hcz>~<7->#d_=w%H$j+oOHYc=&gy*y5jGD82=HP<1u+y3r5Ewb zW7||k>kL_p9sMke>3ZGF|67%flGhr&N!rl_M8k)(gp?VoA?n8^nV&V?P4y*Fb<)_)5ny8?=?x>~3D$Z(B091P#r zTGw2aY_<38T1u1#9!wJw>{{04B_<}C(gcD$Qvn%IyZbPXnF$?mQplL^TU9mAhLUIv z4OO+hXAqp;WQB%FoG;W1s0D?5%AMv_+4Es!q~SU2U}(x?fYop?ID66mS~_l$eW)Nf zBrv_*Tyr>2`R$dTeMaAvn^pT)DS&I9OK*)5Gq^;qXwlJIp|VVZ6`LCy`f^kRQL7m5 zE$;t@FZ6fE!ET(2!#zK~3Ku)sS^SRSRa+9eh1izG-l76!uy;N>@Mkq;&17#g3;GIC zU~(ab1NOkzRid^~z^@>2KYI#8Rfb)sYrgda$AgCKb6_-KrCCS4rcGUvs~xg|0sN@X zSXtTY@Q8oMQ=NQ#lgUEpy1JycL>klb z;mr(RPTt`)T>BVUPTzn#6QDIA;aSF@cr!hmyAE^6dOW+Zh~;#DcZ<>~=b_5=HoyC@ zB~5S4dggrjwZffH2_!c1pUAtIzPNW8ALLcsBloodW=}Y7eI;j_8ve%!}eofVxBsjii)`g ztF&%hl|N4vYGRZjz(+ET93cCx71^}8^&C}e6%#(b6>cJvzv;7RH7JoY&wpLHR2mIs z&}kt3mp?8r8y+Vz_$}6fxs}K!VlMD|@ct8q#sMSeX`jAvp*P9Gw7UL$3oRx~_}5JG zAL6i^`%Bkuo|jBsa7~~Y@}!j{ILp1!ED6ahaI({cL22=&`%2?Svee zc(`$N#{-eLubJmo+o}YaX#oL(?bh|>f_;!}97~&?#6%B)>QNEy{5%rZzzt3ww&nq) z`~Y)80<#m@RcdzFSragoK@C zEela9!Y8iKU)cUSAkK%*?FDYI>Uf`agV8V@S&MbGUQcNl2LUl&W)}ANs<(_Y_~b`+ z17%ms!qK_&?g-w+B|H1@y|D19aN%KSwVfN6OM0-7f_KpJ(!=L0&bn}?y_X^x6;?zuS{=3rLIUIZAx{SZ8i4z*z{gPZLV3B z{`(qdw$_xBcbyac)MR9KRx$ZS|q9O|$4s#E6-7eDH)o>(S0P5Ut6 zTv&WIt7Y&eZNYY`ycwh$CAV-ww-6`r)dNV;)QhpFApyaEBav*_(dvsd_MyC{rlh_; z3COQNLocZ6p+n1&;Tv~GEcGX4BFvvYP$Cu89_0oVv1-6RwwO^2_cDH^;huO7V+{P{ zYQDx;|0>!eza@l9u)(#LPlK(-Ob%K_<@&UPC*m>a|J4G_Y4cRpW^ZJ6o0Aw?KtrPZ zvH&LVfu>@MSA<%c@M$6XCz-7=ZC;#61m+K?DjK8(*|j-ipGb4xO*lI4O0-!79%vjO zt#h=$=q<2X_X~6Lc!>QMltKV-ZtoY#uoD`?zbXQ5BPD@v-WbfoO|Op<7?(C!w$kp4 z{nhJd)_)x|Bg%sTU9opWV6wUebTNU>dRqZ_j+4lh_TvPs6GhS{Q#E} z?%~(mZ1@&wL2z$u9OFIP+rlYcW*t^U{rW~joM>aSe_3x}gX`?{64je##R3~pdH@`r zf+L{x)44C|vKl)x!xRX|c6Nteg3=j2tznaCx}XfXBPE0qh+M&p=;VLN?6mGKMC7w0c3JJj*GrvACItz9`cMdyLrl?ST2a~t5D;dj8CB-BrCPq9tMYBQrj_Y&Ij|@}p zcZnl8HdOhF75;&MF(9*%6|%*OYSRi?I;u)UC{&LipUHr$UxL#}=JdRw?d|QQbwL;$RlSARqbxR8t=dqsm&GzqeAw_PqD2Fe66n^DulAy?`Yi$z2f zU0q$>427xLF%&O(Wp=GkUu62iT~R1zTv^}^?<44Q2YavOlWnZAd$BW|$#0i#5f*t> zQO_&~{Ch}KQ}ECbS8Kyug1e5YgTq@atn3Vm9jc>Y=tn-jhab}HXAb2_Qp>63 zgUaOh%|1J`j}zM$i!UhfyqyJ#M*n8}8y^RlaH4!Dld9Bc zSjH3GJ-%;Q91RCr0^bb4QG4qh0_B^hZ}ba^R2hK%bQ4|gUHVr^eknv@^1#GKupnQ3 znRGC$9^3hixA>N2@NT(mi7MTHLLH=4-i%n)dUL zrvXUvqnWp8eEo`!{h3eH^#(m-FH%hDY_{v47*sTI4q!8m{+Od%HY9&1Q9^@CqFx~s zwnZl=C%t>b&Xr$~+N*uxf*wzZ%Mu*xB)CH_;cUT#ihS*%W=Bo?x!{@R7(Z+2lRvE% zIyyi^v|Ub|S+BXmUSkU-VC(?SC61o*>+2rTH?^HE)iANj=#u>XUDmzhnwR0xy3#p( z8Rr+ZV>H+2lao!Ssx0Xu;42u3Q&d^GHXuLsWz^76krsyRkLr_6v&)e*8GK~l(z;cn zUI@r%ioGdktMVUJht<&bZpY=Y?$D^naYVsQdm6q6)PS)YVI~Pn@_+tdQTe@!MuMRVdPi-ofy%p% zc4?}m6LV*47Rf(*R*UrqoVB$NOx_RDzk0HK35AXnO)9pQS3XlxkCQJHV>G$8BEpA7 z{zc+@IW}73J)?&iJ}hy)C!auc;BHTwDW2&hnF)cbht5SlKR-tz;D`mW2Adn7+E{}@ z&s)>c^x6IJZJu>X8GX?!sF-v+{%F38^rlW>HZC%ELNKQS4++CvnbeTwk)U_ zD8$GD_Vx_%WQ^_?#y=Bv)trKh^YZ+QbA0f!WJ5G7i#%^nAPcNA#Pf|{w5P0)zW zOzd+<3KGPQt-iXtL=ZK3U}Bw*my&MRJYz~qD9fF@{{FQ_M@K)qy!=Q)@(rw(tuDLpB*_NUP2bd7h1=jMmGDMM5dEdEif6@rV zO0VWFwtWZ5H-2`Nwsc>HT>(0=#Fn2n@<-P#t7-3gnzxWw%=duQ-x8Ct^> z0scdQ(1XjNDfK3ie81ouhT~7oQJ_lda6wsNNXMSW;YgK1LMotuY?(>BrKRY&v@~|1 zo>&Yd+`T~4e*4qKaJ}97+6iAg8R;++X~b7$R~KlAlwbOB*E;D9%^i)svtP?&*$Y-rECbUI5Is2>7qf9E$hrem3$$-ynVMr+`L!R2S$b>0VqB>_V- z`re@M2zYq3nsi}&lC5#SGzF!DmQ7^tzyg7Nr++w8DxJpEd)P9Z^106WKyl4|j}Q|9 z2K=t^TDv=t1Rks%uhMCoux$9d){y}kw$B!fVjvgG=)5m~^LMGo^JvXzj;0RBXWPD> zu)h7g8{g~4BO+U8Et(B1UCW;1Am@DTs1bS67yS13Ev-dTsFqU0<7Okd!Yjd6G7ZAZ zr7}&;;s#~(`va7}EA81Oqvdv6n)iN7CvUg{r(FQfgs#`QsO#}k?_!-9#Jqq@`_r*@gnw~OR*#$KKu;o;#ofwnrv<=(g*VbUnl+f>eJpGqSQHrBEI z-(eU7wbJ9+yp@e1K|u~X;icxk66E*>!OVui?f_U$-xnUs2E1>DQYnzxGm1(|Y2Z{t z_%+Zxzj1ns@>3Xv_xD&9xBEe1O0)9;Iv9RoG+(8Igv$i|&33i*92_Rd772cbZwkNg ztEZ=O&V1JS?*b#6-P(xn%O$Z`G=T+YbU9=`!_IIDL}cw%Du=@dAP|t;BXHET?gQ)# z;nP_U3KAX*+&A!!9NUrI#DbK&if{;ZS&?^s4EX%AiIx@ z7u9zHQsYAM)Jb=bkJA8zmhVy1(6|G&khetA)Vs`LT>P}O<$y~l{UA0V$9OdCM*~7(?O>)-O4WH(7&!|l4m@jM7 z)sw=RzSS@Vt9uRi^p%ojfgE&%8!G+9T4g^_Y_EL_|T#C_a%<^q3Y zqRq|D-`}6Z@lPoE#Nkw7L=Qg;Z_rrI2<#qok&<|?2-U+3QrIH(q z83-L5>)Y+T=k|*i<4bDx&ufW!X2*dqVyj%?XzWqu6L;zU)`_LmRp?l-FoO0HVh)Tg z9=uSn2mS6WfpK_GW~oB_4hW(bvz{D?8@7q67BQ*wp#E$a(> zMyvcdg3Xf9no%s4Gn8UccqZ;EVAfDH5$_Nv3#Ij&116%`aR&kDAP7{dPB+=<0p-j- zP)3@{Y$iKAZn@L4zz+&qv@tO-0>~tuz!Owm9%UBUo#D-&{95?{$hM*9mb?a9UBE(Vxj13Tt(V{H_4g@RQ`~Exqx7aS` zI-$_8>#C7_?1M79c0$QJjdioOyku0@6w}niuI5-J@7_37JNjhDSTiqxY|B01d-D=< z^?V@xvTVF%7rB@9?-rRZ4?*ev-dv=H98M_fqUx;%lvrZ>m~*_wH?$-5!O&8HzOv~} zoYGlOnQm5%U%c{!Uo1o|5?Bo9?kv@xLuMmSIPr2)ycoDjZ%PHa^=zM{^2e#*s?cv` zR)EgL@3Qn|U{?EU40=nYfglauyD)s&9eLR^?cU* zz~+~SBS`e9tE>C__iy!Qctk{}18q=NCsqmCak6ZjkS?WTIcKN!88~=kyL_I(@c;sK z?ALdaGHfTos!{KMzr;L~s;u!HK?^@po% z?2C(wnS9<$wZ{Nq0=SHdkFQnDSf)%}4Cc?^R^!kKCiA}Xc@^1WghZ30H~5e;e|cUN z(<1MfJ2Fj$H0=$YOBE(i9%f={TI;wY znf-MOez*|;3NRDTpdsh}9GLNAA_%6Lno=z1x5dDQ)vUCjOXiJ-=E}0@qG$wjSAYm6 zqYxx;?vRwfs6iKrcw@uE_~FNtV|#agZS*HC$FI)>x@(pQPFc?axeGu zV<1)^;(R?kxH8zewPvj^=CthM5)(z%JH0DkcpmoiF|n~P!Tw%sFH)=4jU?cV2cvF4 zMZFJXNs45%!U5S}(rEc-AnxjPJqI3x;tX6;3@}#A7E@#px1ce<0|d+{Arf!4wpGJ0 ze3q^1)Jln3y}c`vf2h;S6qh$9|6bqfe!4DKjy56OzAN3fUT%pBoq+RyI_$E+T=mQPP%2&H4+iwe6mxLAxiKZT5cHT{5ZfCh*wn`D~tt_|^+Cs&OYRpd?X& zitJkAgNrqF*6RvpX}~D}UQ7`Gy9*9+yicN-L~d1xd;5 z)_bb=>z&PEUDSg1ve25ywA#%Rid##QIZN30pk&@)rbJ=I_un(m%iXr>_^j+P(>kMD zBHP^%O*Keqo8K!rJXkt?v8E)C0CJnGQNLLPQl28Ly*BA0Q2Cm+Y)GKXt2GiV1|rYgQ&Y!w_hOq`0--} zKx^yu&a5iXnt`9iO~d*xqtj%~g<6QH248o5^yu&%^0FWZLX zKT{cvtg|m~Z}+0PPwdq{yy*RVzy^ibNQ7L80L8@sOa$ZW>$}uo1)JI#(rB|R20*!R z2(k%STIZv=C=~vuiJjX%>&ZM(V-piJLPDMDYi$o+ZE8kE_rK_%ra9IP#;9e|0!5vl zm|u~th{1Y_A()>h^DpyaLDiQA&AnMgku*0!)Wf_)GTm~8)Pa%E_%}$#*dIB53MjVT ziWFXb;G@pgHR#aPFBm<2ze*Q)r+#Zup(D%7$QDi~lxfkdmNVegBzQO==ta!Wry|nEJbrk{WVQOk>+88M* zsmTLph_yl0U;VZ{lthyW#vuWusM$A7VqsBq7{H2XwC`L*QXVGNhWIWeAt6Av7y@r1 zaV8ymKaPZlZ)ls66EdoVTf?}p;Exs;$4vM2%G@x2g7fc(AjHGTe9Sq?f5_JthC1Wf zWOL0HNwuGY7XM|ht_WMZwn7npdU5pc;Pf19OBFBhC3DEyK2(wAJ^q5n+?6RIYjMpA zbT7n*N-!rM%fgb9lhMJJyv0*8Cs07@@dHy#Q|ABu+1+LGy0d>d{r3_BQ1f`y5{%c z0S#11wp5!wbYO_sr?0oGZpVD=4qGB?U$>*)5;g(h4?tcduYm>?@fUxGFIBD zCQnTAtDXAhhM^p7N!Q-fUfL>e0^h8;I$lBoR~fAsPsy1wwsfpSMO$4(d*}H77p6gd zJ${_mv9$)vJ^tLmX*NyvgttUF8)hB8%gq zgcItR!7@%$Q82OlsEaq=*7eanY)#XjWTE)K>X1gQ#*WJI1$cjMP&;9sKqg_h+-MWU z)d$cZE{Fa1X>SU->=7_`#>}07n0UNGqmDKvKQHf#goMQz4x9CYfV{kXfZi$cZqagd zBoS{qpfXTC!(!|vxhJ_c&F_Q-$uan>-M#H-{LwBXN{S?iO7MTVkidt)B_8ZUj3Fg< z{@K_0mIUzdI^Uw3#~dI;{u!Wx(KTm)I9wbVyhQxj%?*V9fCzp`rO-EAO=#B|_9B44 zzHxRB2}gi?Z*`{i6kG&R^iL4><1vdw+}(X8lh^`^{2`-GzIQ#uv1DOEh}d)P1pNH` z%G6lPO?GB?XPaPZPTp_WoId0h_<;>4+$Sj+U-p_Gjyo-q)Dd{^Nx*}B7*O#DpHkwu zoz$b0loPCSv?*Fk14*l~QSSce5Z5!Wl}q5ndANy|x?9}$)V&@JAyt;&hUz5EA`boh zCpfZGdOkLTjF9@X(COcFUt@kXd$DQF= z5LEcf&V*A=MHjSOw_7%(BNK7~4PP*?5*8Bgfj#t*mzPi?9s>SG0d|ltpEWi%hN>|g z#mmdjS147!`n#Cmw&vcy+wAV{4n~pb+}+(xG+3#D$y|olPr%Wud0g%LRabuoogqdq zPxs2IOJkZKI(-iaHt;HB?j^|jB=1=kBhRUNCR+lHX6KU?+y+e<;J(rrjo#{~+i?Al zBx@Ww^Lw7@mgBn*6byJfS*61bl)}GAJ3nJ@^4_ip8yJv!-u(SxyV)<1Qv>1G7?Lyh%Q~M z-+=JITh4B-xUz}sCKn^5d2jp{)yIlMN6girPl}ncP21FcO`qYcX~$QXU0XaQPAB!> zl2=Aw>awftc98?SMl_?xk~w{nUKady8yw;IH?>L^LtT}kW1s7;0W|V8nC{CRu$;m^ zQYCOdUNoxU*z5=F;P01nT#xQmbg7BjUKpFQ^K&sNn~VE-A^0OR(_Il-!+!!AR2D-O zkavrRlf+WypBw#h3Swg7@^5=!MAL4Pn(ihDm?5w@hVLO1v`jI%ooGYI z03ag9e?IUr<_w5@Y7v@&1&PFE4t@iR%mAEIUkveh+(&WR@yExpl8wt;wPsDi@6 z+*wN?u7?IT$Df_W)8Pw%=i^dS2LPuv3JDYdzk|zS9y@F#U#cvf%HVf>RQ@IhqMir> zgr&ca;7V)2m;t`KjW=LiDfUU%KOYcP_kuyKE%&<_5)u-mfL{f$!QspoHjUqo&)efl z@SxCmrzlAq+mjIY)b#A@)b_}WZyjf{iKJh<*A7z{GdlbQ$_H;@u74godIhI)W@}sS z@`WX0|F0Gx*{OP^KHiPrJ!O8cYfR0~M^wQAEvLxW(*4D{TZ72^M1dkYdjKWFcjJh{7B-E|29MX{N*{#FWE2!YoJz6WX!ZXh zhO7O_0Bk+4IB;x$QIs48{d50#AVV9#EWZ`-u_IaBDWe(eT7(d22?>Dx-oP>e%2BmS zdl0B~{{&Iw(Q|`|nHhxY0?~v7Kte6&efViiCJ0b~u?2zR)ARGeMD80xF6SE0$P`_V zFu=aYWoAlSThjvOa|0}UIA5K^vq99356brB^=ih}A7K#X;Gx;^O5W9y(0uDx0#=_X`f?@oLyMy-r6z3Hig ze}_Q6Ek14iXZJIklCHwo(w~N_=!4N3{NNvd4#>UEdSNp^v%q{QU)LMW9CZ59Oy`%a z;~9S;jqvKYe4Z_njzcObH+-^3e7evG`{DPM!O*kP+2!?{97mmmH~5uNBL-{=-CC# zqMYax+M2Mx88ny3H}-!N&Kt8jN->;{yWU1 z_d2VKy|**7&m(#vlK(x|qR(a9b>-QQtci-b#=Rw2P}j(f@!JXa3p5y&^qhT6+0!XFTZ{FN*1fYBcNeCSeZ()QFz%xT=ItXzLVT?f}#2&iTMi^ z8l?y!+IH$0?;{90XMU89JUJH4M#%y&<>1|a{!)FqY+bF9`9a0tQ4@6k!asikeZYSH zQZOSgmW{KQpyErZDo5xx_GDD`uOw=f3jki)wqpBLML|Gj{}Tm8-_EmI$@#@7^C(wIK&||GdB43yY{*7w+BsO0E>3C+^{L-0PXs z(O-BWm8?}dX?_!r;!iTOFdYO1C_}0K6^`@%suJY6bEW6Vu5>u>p>tgjT3zrC zWA+r#tZQ<{ji6oP;=c!4j50yWlhHjW7AmhEheFjdRiRvOH0${LUVbc=!y)?X%YZyB zxgJjw%lru!9VAX^oMoZ&IxH>5;dZ5k#P1))BJ}~>0PYW2Xa%dNhm0S!SRK7H%N8?lHufg*#DT})Bub@2(eEpu#<|KnnS=vgHNvLVO1Wp z26H;W6WizxIKRH$0jZSk{(i`UK@}kcwYi;|t~5J<>>|KL*3m!oyI+I+nV_>X%XVK> zepy*KAap=(vr4b9Vq-%eblMP%6ZIyj^c1HG_`APf>o_Gda|C!f0dT4p0ci>3q-#gk$jHbTJa4Qa`7Xc?FSfaT2Dz># zPBm$1q_D6sFyqM=%mqAwq!=o6S8IZ%1O)}#0VIJ)YbK|af-?scoe)yPef~#S9oPI* z_44A;YP8-2DKG;dyT0POY~%Is`Su-AOh>(R9iT)YtmW=lmK4aC;qrR00B)e8Fk}vx z-w_Nso^B8leG|(!INv&aVV2Y*KW=TP^VD86VEZcoehV`yS(E}SroK6iN z5_yAK2Oe(ITE9r-)E48dii2i~TnY)cS>gAZEr4zuIylVd9lt2$8G#bWQnxjD?)nvhPEPIb)<>@7eiaYDyu5gE_8a zQudaeTK?xD5iA0kiOT787YZp_ZZyh0 zlMz0Qb;9j;uT&9jd3-pQXZf834p8=^pdHeG;w{J)hUWObw15_;l%~Fn@M#%hb9eEt zTHz|nSZWUB(+=TzZm@Rk!XmQ*f~e4-Sv&?(VDs+m{Jc~x>}i*bimaXctCD+Ttwpq1 z@k*;(4ZDbN?*W3b_jRq(pp?+62Ax0c|K6Ad-Y96_=BlaG4JY0WslTzB#i_=b%$e6J ze&vxi)a!ZgNm@!4vNP8aAj7O3%=D&K*R{3!zl-&6gS1ctnoi0tBfE&RCfz52cM85X z@hp@PCJIek zj5s78-&|afKuTi-N}b1BfDxko_q-WGeDMqMv;Eb+!Y~_%V#342SDY@maFE`DeyCj3 z+YjI|g0H{_47E6aQB6D%(eAU&vyK0+xbKeV@{RiyDUqm1C?y%$84Y`HijWlvA(f0u zNM$7vS&@v4NKqLfGa{s{jLIq_MP#qyyszKydCv1X=e*8&{yhIB-0tsvU*q#$pUdx2 zMQV!9m!5~9ieuz~wlyMb^WKjEQW8pFVQEPW@_za9xbzd7Up*!F@MADs5Ms18gw^7e zd;OF*$fQUf-93j6ZMU+r!nta~cXr92zv5FJNDpt}B#=}q#Kwn$x}V%_RhjpTj($M=||B9VPU3c_=BCa9{Zm z-m?1o;*uNV&~ai9yYZ0dp|J2B5CYB5t(A?RS)O|ui4!8Qzr9}tjT_S!&!R-b>CYIp zV?+L0sh$1-H?p?L#2nwoaX!<2AK7tm*rdey?$~|D9$mnb(@T(|u0(mk3fdRY90F+& zz+c{luS(@hKLsG@t12l`lDnx1X2!dlLJJAPG8h;bEKI)L75crdzTO(=Hlosv1dOIS>gF} ze@brNTulbabCuUkIj-M{}X*d|CuVog?_(UnjLjRyie(ip;3F+w(SwlgV#3o4-c!M3NwW)1LSLq3JEND z^xUt1K1Yz29;MLhgf)Be+6A0{eJDnxLb5{Rc&rnY6;?e$5y2Qi_O(*Z%O}T#W-a|`O z37Vjo3{^Js_%jat=lnVO-McB)uU`*I zn@3X=Pn?ER<(5V=ce4ZPj_SS%`j=CQO-WXlmK~#waeUz?loW7{;LWzaJZH|M_rSs8 z9rbg7QDQ#8p%MxidI?93qJcu=buQ{eZgKHQvw|~mJ4!B&Zo}-7aA>ArXOF)rr*50ZxqNcv z&2~%6z}*6TBM;-VnPA=^o)V0=eD~uj)F*S24(o?h`EXwGWGiRR`dJa~&sY@_yd1Jm zOTEKkLn?NFjS{vjI=Yfi>!)V3i?~dOIPvGO@Vvkng>_`rh0M;W9F#U+|{Mxs~|)N5=0Cb5-ZD48Fk7zm!x@ z<_ZnS3N6)(?47QZJKkf@j9^Jh%CaQANiFZz`gQCk|F`-a}( z(S2!}ft_kDu=ZNi6evz`#Eb*5GaoMpFKTPJt2M>uFmd0k z++mTOr8*)^N;KAMwm8JSMyXG;VS_a~0zv6bt(=66O|W~uS@sJ-a9ngO!Z7C=I>f_% zfRZv!22WaNNVjZxaBJSd?2*^@`vWD-=GU2fDi=4|bL;r)8(gun4Y>JELJ4<1q(_-; zU|zGjM4flZ&>74EqF36ga&SlR9G%_EI!b4be!$PI^Oq5&^_p5)qy~Q;&@Q&Zt zTNfM-wEwn$%W21CJ9O{9=ln#3gfhm!;c(mSs@qXb`>mtre|ZNM7Yr_(NJGWbM!81H zeWVh~Ap!N{(KKoBamkxcKVw%NKufY^Fis`4gpOWkQp4w9Ijdcjj+UE$otQ z2w(8{6UI@qT)AdXTid&tQnT!BmoHzIk(K??lDd9%sk5T%)kOgcaH!O+L-w||$$Yec zda5sro%`fo;dH|6Y$1#U|G>a04Efmf3e@p`My*z>>gzYy+uNhC*X{TWwl9cGsBhnV z{rsrF@DHH)I_RjZ&lDqMt_Ic)+oMkWf%k`~T>*#PN1AW2NuFsgcC!bOZ0+4sc5J<$ zpWl_q8Wv2aO&lB?hoq&&VVrVxbq%=)rt1fQ8fHEg^6Rizu5)&F9&SoW%kxxQv7&HXUu%|bSmATk?B!WUZ`2~& zuj5SB9Y>BFp$Oc_>TCQ2X^~iv*pWnhf=g5s%+H>TO)-UaGww@oYh2`{zof}c4BVQcsPhcwCu&34;R>{Ic5cG6 z0d>lNk$_>-hNF2)E`_4cR{(q&utg|9MjC;m2&P7HN2k^_P3!}>?mI}~XK)IHA49D4 zWns`wkFcxpyrsNAE0(F5H081xi{aXkP0b`pmu`4c$#P zs~+qS3*vkA@JYz3WLg@kuYj=bq3CQYXOBOBFTd{8nj@ALl+lUWYxqY}( zLCezZp=!#Q+2p^W2=eaT>tC_5bld9M-)L;ntdRxyi@p#JWM?E9ql5I+2M>5vX?&Bp zymj0oqLH$S=G%I@OCK7w#3c=k6!kZLqNAdk(Bq2Q7l<(w%y}aw?uwTe%d3ONPmHrc zTNhG$x?gKyWu;cjojP`7aO`Y~xY%zuSFz>AzkmM{f55@>-6v7R5{t%un_3xnul@V? zKajc@Ea}v-{hgta>a)(s*jNoj4zzkMy}vK1+u+>uss^{drh2IaR+n%vZ5MvDa=T0I z#FhGC%;b5tk6+skMO5gu`QN`qUz)|stHhC@`&pG)-V#;1*W?JBr znFxl0(S1PNkKRsi8}%m?vD17V7@(?zf=o~1ge=H{dw)QGOHedW|5`v z-eHZ{cF5T9xq*RaS>oKUFY#+#u2`Hnv8MXfK6$4caN4A#$vLz}H+_!yj=@;U^v;qcyX|6zx) zMbXKPmIl-5r#~cZPZj;I;+c|R)S&z(wAZ`g;n(Bi&2PNixnl9 za#!bS%4ES&bpgJEg(-Ow4eRPLf~M{&X!nnf1Z5a&>pywMRH^->rnBXR#nQm{@9I!; zP-w5iA_v;~ZkYT^EWEIJUi0U9bYhQ=jlxpW1h+M-Yh5ar{vPFJ%WNE)0ZDHE-oxQhr^HL41hW@6>2&7aLlk`{i;7S#5P(p4gS%+uo?K2M=~YIl4+bw^*8fbQg=G#@*Nc zsQFvV(8zK2?7TZ;?`Q+wa~xkID|%mC;mDoVtwN3qBijbF@~!3f#nI@CSzA9^KEHv} zKhppJ+(-+reLTM4dF}=pn%xQ=T|v@Jp}tKl*|$dLc>}|Lo`0U6l0p&qynkHd(gEQ& z`vbO#?5LWpOZgV57*z5hsiI_pOm2R4N+JF9uFs#@=Et_AWVzD2rq=|_T0eb3>9+} zbBfl!3g4XY`d5^Bw~rfTMqVJxG_62x-r2eZ4{^O+D`5}$#0-3&E^lC1Z*E>~CY10& zv?}^OEeA*cs6ZQS0AtFQ$eD3GOx1mC)V%V%KR3=+F16p&nz{dluKd8-jZz8L^bvf$ zebdH9JpxF^2IltA~i+a~u+wBk4Sme6AyLMpwy_$nZ zPJgxiJol%u!GZuTHLPL=dMPWf-Roc{$3!#6D5K+J&kP|r3i zILZ_d5)vZzGlB02ggS_qeXTvBPiE@e=Q=*UYxy1)A;T4y|Ex_T@opo&$}Rk0*~-;+ z+xvvY>Y>Qpbi1Xw`p{lj~q67II++LuG@al)=5%=!r2rrSHqH zE^FxO*1YdHOY@&zfY-0TDwbI8TUcD&%)w##Z3)FPAdU6>9%=UxMuei5q!&i=P1lIr+E8N%8406(^={oc+In3~o>GRRmcuxPNHNIMVjiR2;SK zqUecr3K?w=`Dl%er>?4+dWMgV{WR+uX-w5@f4tY9J1XT;a4 zsd!JDJa+YGuIhig`Nr+zD&P822ByQ3^%mGFfuF!NwW5q$nSFNc#l=zMfk{~GAV1xR zk7viT{{{oV5Ul031M_-2H*VTA4D+!qRv8ZukN&Z-MwFf4_ttDoJ>>TNgB=oFe8Ikb z2@Hqus)n$C)YjMEBFF)@;w@XoeVP&OsBCGus~dlyrSys${=R)vB6a^ek%~09dK?PO zWMpIj`evx+SIPe&K-l%=%XBTfGn`EegONurT)zDF{rgaqT=5o#5id)yMFKv#T)1!& zoS8*Qo-hw^0oGKapbcbV`Dm@~RZAu5Jfyui*xA|H4xFuv+IOt(eVOzgad5mS&;t?@ zb^nx9y*}z^+)rM#38BbX!&~`lIHTcE}VDvr42Z}Jg}zP(m+^v z_}sMq(3s#qD;ilG`sGFsFR?thZ)l9iS}juXM+scQ8c=FT#9RQ_M=VMQ;uWf(0R*}R zwDz;7k9QYGViXZzf&D~PMP)5O1%-;58nTN@;NvhIxTikI9RModA?F>7+Jm_74UN(- zPxSKa8g%Y1dfgZ&Zu;UBwTp{OQE~ALm`;d2CulQQP-v(fW*E$1GDlZI1ivS|32v$i z4xvSGr=(K<-jrky?9+H(@-`$$91?hA{rP!RA~tcD|RUy=|$F_sH#YUQn&jAnmM~~2mh=`HC3VGsqC)Nv?qrUqw$nmvHir)M3n42z_ zHuY^si0lhWL%sd9?GIM%JUq7h3azQW$=*6P>K-$G3v{G-#ACm2E2D>*4l(=C-cz_I z7N=I^*v2#V>ldus-LEdvq1d?o)$bwM)QX7%&(2|hhWLZdwG9oy;JQVfIs|bj z;7Het0jdJ_&6}~nORm{2=Y5FSED>r0KXmfkIbGCcA)OENi8cyD0EuE#DnK(K`8|@3 zgQP+!YPz)}S&<4U4IJKBN>ta7p@0+id@JSK2oD7!YhJUK;aWu<&U zKYCxVby)V|G=13T0_(=@)diZ`;%igO%OmDafCA9R)DTM%rwy@VDIEh8cQ0K{aW$=iIz`^F?SbA{1RFR$5@W{YKOAa5kI4i+L)@-`iG*$}pS`WF_RCZ<*d;9`we8dC-jCHX z!70g|EM==9*a|U zB%}ni9_)Pr(}CoFQ8wU#upF{9{(JCvNk>P=NMn&OdNE#laLA=<`=P#3P@W|30MF%s z1DuXm?O#sIXM!!sMItyd7ih&i^B{Hcy5iPT%5-`mhxBcO=hxfE3U`gEMb3V{(+^>jBhPJ)FJIze z0*Z)=dIJN)iEk}AKz0`f>o!Ne1#P>C=+`1JTr46J*fQY0m?oSi{wM{ zerrWnu~_!{*^w9m($e-4GQGns$D%j_6v#B>?B>VEcnyv0Am>p(O6(bhC)XNwTR~Ig zf`rWAH5S?4RwWQ@z(d9mwo2vHmS(KUAWjZr+}yG}=+M0T^UHHiQ$-iPQm$FEhU|#v zzPy}7{nGlvMjdS1ThJ=&6ku10J?PAV0h(g>E(ZHSAjnj?kCLJ{*U_^*_xbC&hl|Ux z=anQJ_mZb~HfoC*Y{uuy`2N7*Wfp74td>~rS(@irckK+!5}rt0Tb2rII&av|obz|I z`P*tv>X37!tI&`9lMz?uTYO7c*Qcg(ino=XJI-xw9g%$$vx-kOn~!db%8UO_gZmd* z#O+#oA7fwI`oOgIOrR6?*!a8tfCgSJKg>^%7)C;%`E49$x>UV8+((^t3H{z z(53dXk>7wlm;O2?`F5SZauFd1@3}5J%XV1Q-ZhyHvF&mCu2(IUTHs_|$2eVR6+L)D zo73NersirbQ#zMZzW-gPZ~@^P!hxX%$DD0`S%;=Rvnjq~yFtH~9P|x8&aJ#Wacrn| z=nKNbu6JCbCi_cnZopER_?4$_TY{ZvEH+iuw=@527jU_M!A^luPw__J-AAi`)(`J0 zix2EJ`SD@G|AmcpJO6@oA75++Z+EFznFC(-RJMid<2LQ1K1*O6DZ!s~1U_j7j!BJwFc+9bE9!RBW&BT5m-Nz9&4Q2-Xzk5C<@zBcUs z%J=ohzm(~9b-ruv-|Ot55DL@TDY)~<5e=<~N+X)dX4{`9Kiwq&_HKN9{MutF$)%ff z)^BFA)%faDL7}T=L)&bvDp8*H?Z*1Y3tK`TWnOfp+olmtpl8%tGa#J?HBCwhE34{E z9WAY|POq|JH7xgpP(OJ4&SY3qjE;sYXxF%L6w>XCDOHgQSi1d(93%qu#{lStfqs z`R~;jBlrh;0!OUhRpQ8~GWrebc!Y)~1dsb?ZkJ&DJ*)bCSncE7ucx86IJ49l+$GPL zyt20wj*j4_-ru3EiAJeWMD*nsgu+_H@E=-MPpIqAuV3$xx)SQ4*Kb!*+hUrrskcc! zY&G9;#BZ5V*P3aVW z9~!JTFIO4R6w})5*v&lS;j+mpWnxzzbLpc?^x-wm;Fgc$FXX;mxdGezx!W<;LG)1oH{l7 z7eSYF?1cCoVtaviTIu|G;p;9lqv`i7mGqea6zdxsRZ?3}wNYKq%0eJ9o;S(6wQCs2 zX0onu4YWH!5(mV+5jhL2YK~RKc^Qr!I~s3`l-B_;JvJ{CM%gKx|4iU`&YRb-aRTzo zHDskmO=)*_9=PRT@h&Bq@DYcUV+JT(hcYPZ73?@lHhf#((U# zqBQAB!lsmzlfTTWlf=@oAPZ_y3a#1h`?RQN#nwLF=VSc`Jx<}AYjNw$*+K)MaXoiv z+4CVuWI)@8 zA0aJSP~U)1?pLlz!Yxn2xj)^azKfaF`|PLO05o_YF9erZgwy<1P!Q>cL4kf_G@@${ z0l$%dL2LpKtc=D>6o6skD{;}$)C%|t==4i++h*$meN^gZWES&Mxg>b*xhvnP5;3)Hn@IERzDGJ~Qjiv5erP ze7B#59&vhH-e^PO(DsNP=!XBoS!@-sGhu0#gM@kZu#(S#(yCyB><`)y=BtS zOolM@*H^Z;GmC~a6ql5+CoL~7vQlM3@IynQ!{C4F(O)FQ4g;OQ!9c*dDU>ESolKi( zYTHCC8$t0FyZ?xIAp$*?NMR^Ih+!epryMyy634@}q%MuoD4aRN53B+6+t**ebRl<< z=+BG7LXmdKtwymo)i=0}yA&q+DYIUzost-tv|;fxy}7G|Hc2=(Lz`s*dkrhi#NQMx zv8}Y6{;D7w>*|7pMI-FAxTU4zLPByA^1&txVy7Vi9^D3;Q>TJJsUOdENQ9H$(=;2Ea&ci1lor6#gT8@v7s&EgC-gYkY z^q^Etuhgdysbtyc*njMpb(R0rPwSe3bL{?sz3-J`lWcjw^4*S5c&9@$`6QJFxdl}) zdVAFkE)=_cANf*9UQkg{5hEL$ne`Ti?(!44^@q5#=buB6*Mi)PQoCHU7%f!@K>=q# z?OQ0Pni?AY*aX&Zbjlx3cx7xN7W_wX{dV7f+AhFoc$3J9D8Mn~8eN?+{sRAXK?q#X zdDcllUF19y#B7-FfXGx|;%Oa6#<~`NN)OI)JUEiTN4ZNJ;N9Kb4joTfPnuL484lO} z8Jf3@lz|-_HZ5YajC4iMB}~r+tYD74rH3JIr9g^f*fB$Eoz{|US`2p8d^aB{y=ZouMMO=X>Ha}yJuF#^2!M9wJ4U)l&?R4)9wwv{kow#0I&ht` z2namc6KOd(|MA!n)(nF)5^N*^-{hgA&-BXuhZ4GoEdUc;!6}09f$oCK|Lm=tP)6#t z)SL6IsYca9c8?|E^jWOuyF+UkZLdz<`U(rab*KRfCoZWfjeD+lM}A2er0Vr6@|XLt zN%)ipwkV>Yu~UNM2VN6y2!VJ~(-YTLznJuJ|p!vaMXXH7l5NAN{mx86(m7|?OY zFx_1zF8kcMQ|?fZXltKwbU{jpI=f@5x_Y13gf_mrUCKRElR^qsL97*Zplo4SdX3o` zTgv&&vUe#Jy=+oCM_J{4WFX5`;3a!|qpYO@TCN6vizh?6vE{8bqqw>>^OeLDv95t- zl&YN~syBkVlQh(Mg?kt1kYwjaHYy3<5z2-YQeMc6dbuxXL5ZaZW=!cnKR zfwjiKJ_Lmn+0fG^r&DO@X!r1mhF50trKF~4ynkQA#YJT$ARrOS_B!5KX~i*zjb6~? zq{+=RzAa~&IV0}Tc;&Ht&y!GaOFo>~7Gc^i6Ok<9`C3+-xFTb3qIOOP7EXwYVuJO- z0dgf2dlHtxsI*BSJ})fAHt3$j$f$7X(#!ou^JR$K)HgJUU5R2=ZRsC4_9t!UuB1gi ztwrx?^oui$bi5AJ&uLJn01N%2quPjD#vO7=(PW#(Dgts;72hH@TcAoCZ$2UC40hK4zI>RS=1)a9he_J$t#zCv<4vFb_?WG zE_}XFZEN6&`2oud%AeC!{u>C302)TNKYDWtBOCqw?}^pUKMmJ4J-F4^n(iRC-1z)M zW_W@BT2jp)eP+2hKf9T+UVFw~_Iuu$`%xK3!&dIe^XB%kX~vK-ucFV*>-PAmdEp(< zi^pL50Y*l*)q_M*fO&%WF;JtCiVSow%ui41op8bms>O{QGDQj{;1*7U9Hwp%7Z;}s zxsHi_8@3ZR35TO&ONq;xs7yaT7L9zf-7K3$PHx)eVzjeNK%EVYqt zG|S!OtL~QXkJYXFp74)M4$9n0Jkhc@A;!^P$xt6{RY0IJEwLVpx)buh8stW11M^FE zdH-Gm%$JJl^QlGg7FB&61Ams7sN^DBYCu2^bik`shc)U`X^XeT3BQr9{kM1%yTDBK z{eH7m`bXD(eP2ONm70te4c8Dam4SCxO8I_Pcrpt_JU%jW#rfYyq|kxCiy9A{MP`>2 zc3z8;OZ1|9ahgK=8ON^Y5BIAUm6Ukhpuh0UvP=u}>#ma>)D^SrmlDojAMypSxav~qA?98?eAIYxfP zm%vsStVX4Lv+B=c%(!Mizhb>FFN4AB)UmtBwU7wfd$wVm*M@RYfiXSitTUKM!LxH~(^~?FAht|Mg0R4f*50x!I0H zXg=gPv)?J-TQ+iI>J5O_My(FmG>L&7&5}UjeaBQ8#Ft}TFREkjn5VY0>FXr0GicOSN6v{`Vt>BX=4LJQ;M$?~+TZLSp@!)qfT&&Ih zd{$H9$6u?evCVZ*eln*E+8ZSLB;Y}3pYDx`n#04=N4Q3AC+3F5Fd99u-6<$7mI6?n z;(E8NKxge{&4_Y2>B#~1b$MImx131a<6z3LAs64?SkFc#J|>QZi%HiK8rV zGJjJw@7-g;ShvHlh#6;t$ix?X${U!eEzkZ4_L9>-ayD>s zbd+(Ouy5+6FZKD${2<}>wX!_%sFO)G>Vf}WRSE9wtx^eh;HVoIZa^*K&>;HD83zWP zc;)^Y5+P|807^a*x(FO4+hL@+h7^2ULP?tE+*m!*&TEv99s>VJ%w{Mr?Y|~&;B4F@ z^1ETWhNbzLRm*I}LX~LG`Tk0=3A5tx_rZ9VI(0!YqQM~{Z@zqChloI&gcTL?m`f1O zVm=*4WKv{gTJP)F9}kC!4qR4;<(4PLf_8+`l61l;zdD0&AWHE z5hVvFylY@GKVJgJVBUr_NzW#65}Y@~rH28G+$>CM*$*&1Fc|sa$j3nIyN0SCF_71v zjhLoqTXrx}mzLV*ox&vL0x?p_XgiDOCm4wMsEo9<=89{pVjEtPNk=3=R1VMc@&qn) zx3p}g5D*X`om)|7*OR7UFKpIBLb~&!mngy?KAeUW{HC^646p%0+8PLw>1ZHAfD~rn zG{jwElv^h^c(4U)kv(n|f@A*!XHR|n6VS6CPY|ad(64Y=?hFLW+Ry`V&dXP3hx^m1uu+YXZneE z)efvCXZQt>D=Q--gO+LOD3j{!)Rcjno16CX0UZ=5N2x#7)zz){Bq~CNl(aN^QsJ3) ztpu4Xt`9E)tz^!Pv{a`F9zJYJ{Sica_q+v~bp>a&I2b}FYX9&-kJ^xdfkBdo=TTQD zkpRzNu7x&X*MF?0qQYc$89Aw+P-}G>(9FXKuVR+m7`AIe1=$Pz*C#!oYSCt53;%Jo z&rh_Xb*1r^*4~51jYiv#87ZH+<;$R|ZzLk3T-I%2gjr>jeWGM!X=wKMjA1)HyWrJX z5Pk~(Seh_n$d*y5VeFHY6@jh*`ElaM9$#*y6PSVe<)j z=J+}PvCEqyG}ekJ`z#z{120cZGT&;e@QNeil3G@^AuFBo(q)&qA0 zPxVPOI-|h3$C!mq8>6N;keh*$= zfMkHywKbqezz51Nz(QO^JmR4MyjxjV)RW|{k_iSc`FEs?Mdu~~BM<)Q`!5VB;-bLs z|2#Z-cXe$=K=u#*v&tv6?F934eJ9GrZOx*7_+nQW-aDFHnd;A)p=I_g?M!EmE^ukm z)j8IO4kgfxh^pEiXQm4Hhbd z>yBmLzp_#+5bTTMAJL|@ClN=Jnd`FgMkktDsYUgYDYBG;8=6L!!2KS-PmN5tBeK*u=9L$-NA%tDW~Ergql|0UvCXAv=}Ov8P0tF+ zB)>3}x>&|xaYD%LJSZPuTNT(eM{j3j*durnoYFru6yVHi`^XG!0I+&fyZ z9wfhjorxp}U=ZN`X>;k)0c?+h@Bly;69-8I-cS#@ur-K|euWE|6t={zfl7M7fw>ZI zk;H`I*(Wk8x?Q@CG;`YQ`Y+39luQ0OAOL86>#hS9HDgzWoq)g`5GJK_pPgW+i& z`5d?>O{~zQ9}MKBbj(Qt9KZ_`@(HHPYOtNUpPPTUhprdm!3A>;M#m7=!4d zn$d>%odTNsqHSk2ihx5(m*hzcUVtQ+gMOpKn;Sk@`Ra<-pYgGht=qTPnLC%&z)D2+ zJ}hT8nANqNP7-XSyDoMF9eiez%)@eW3gtXS{`sE!pf8Bk7vXil89TBJa0Ld#&w6soP zX(N3}$KcAr$RV{`Rd=vf^4B4|E}G)!f`RD|`Eu<^eI~9M$f@HX!8Q<8)Bq2U8w%Uf zI+OvsGGKKY>f+*5i8ipH4860HQ*h&ybD91#4vS*S%UdRyvQFzZpZPjbF%fg+3ahW+ zVyh0snCP`;DGgb88(2j5%@yJLk4x9G&GYlqEH_UUN+FDT&H2Lcm;Uh;(VB^d*VvdW0`;Iy8AEoC_>Y(D>7>Y^j{pdx%Cqls> zXo^$bsp?zseOD3|s|tVW7p(w(bPcNUzyPm3D(&I(c`@^OynxO$E+VWgS!*TO=#dgY zFNHNnfo3V$8R$5*ju;t%zWOxAO78&HNJ(-3~Mpd2az992pu>T0+w&9%GgXri06vg%R^&hj0-nI5Tju_-H z+~~SX@W}X$p?cZpGR5m->_2!VXYu1YsTjH@ruA8S+#)t-tNUZ!OiWCS84pwi4AS;_ zXdc_`7pyq$_n*JVJ6}1~c#*+&?~}6{UGSj(bGxT`h=1&#dy9=b4P8G{sAmJ`xO!>} zn!l(QoDuudZt#EJ0`GkCw@6!*M(+P)NSv!yfm?UzE0=}QIcD4-UD9n>C((OK6OQm(FeVa=MmXQcXcPP% zMtlUYKxo}rT})af{SdePbQwB`-@q0wBhzidGoL(`o|YzhwoCLuLc(MH)OF`R=X0X9 ziid@f5!&nNfHEMpG}`xr+M$~>8AQr6vzerFAeb!nt^Tzl8Cp1AK+XhB7U^Y>h&0*2 z0V8k168{1{x5%ueKc*;8+LBSb)4 z6Pg-SviH)D4A>?@fD-yl)W;P+EhE{ufq{XT+4^BMtL*F~e2WWCBhbE_Z2&fe1ykx9 z@^GYMGC;!-^Rx&iLOpm)Qdn4z`Xd_e zRC}C7B0LKjGEW4MY(8PPX~zv`p`+-Qp6nU9#lfuw7#p?UT^SmBQ4plx*>Siv?I|{n zpYW|YJ>)PFg8t2)JpQ>r+sMf1eO=wrC&!=VrP(8q1&#j*Xf} zdl$?v)6C;W+NV$RT%YW_3fu!s$TOdYTs;_u!`~Q+@lm*h7h=(Acv%~_ zi&7jsco5v*JJf5TZ?|sUTI?~IQZI`G3cvvBjw@0l9hLbUZGj+)k{z9_l+lN$Wc`(HE%YAa;^0{;8LILeHPZaYG7a&?j zsx6$(VA_whFZVKPYB>C~Fv7cX?dWjHy@>ZfAEYf>UOwS-(8ywo!!6f?=zq_ox^K<} zRVyYE#s5LV5uGmd*S=tb{vBCa+suSFYI!mM(W}6g2UgDV#jhT(>~?9*?SmXl*=h5; zD^MDeQj7Fj2Ff_?s)K1LFvj+7R>%v@l7{gCpgPZ$UmQw|J>u$$xP&$74gk41YT=?Q zL!BsMU-3Ni!#r4TNQ30p-@mM<|$92^)T2l!^jaICXd>FbRoz6NUv2)YR3LT#5LENUK?P$DsUr>#Vf-lW;DsR+KHTzx67N>d=bN%%K6_uL}l$BJSZZir~7mPIT{hsXPr_77vrf)U~ zrMy;1YZ6~@cWStW2OhQ`;S9f>!H{ZUUD)pG$gGe3Y zuV23=F-?Plx_W!>fN?{Ekz4KU?Ivbs!4QM^?!BW=^mg_Hku8$3$!F!yVJx~^FiG{Z zjct5<X0H`4G5+=N=#OJ3b0N7S91oCHNgI?IN!JUMk*lzQw3H)7-HxX<|baT^bhL&z6z z{_^Du{R403<;jn)X{5W(!D4*-(W6JPadEehDyYF+B>UbZcIMBLSTgUx#u=NG6ow;7 zaI-Gp$QP!Dw5fQ%OFyi+_PL|O7=v5#^Or9JSg-a=NwMJ$E_Rk)T|Q7-Tbq)e&i(oG z=M)R!&Yf<$ausyhK|ugaZ}F5;O$5~*8wO*7N*T*Ug6PrM_jhiN3m+049m5ct;A5g~ z>FcwSKJ(zu$`48TgD?XQI-fgz($D2%`PD%|Al38UgXgl3W~a_$9@zP6mc7b zC@8Ks`fsD4P&lnbhoFo2Lr`4dam|$Y865}wq%BWAeo$7?)f02_geH~;_u literal 0 HcmV?d00001 diff --git a/paper-classification/data/graph/cora/DATA.md b/paper-classification/data/graph/cora/DATA.md new file mode 100644 index 0000000..f32bc50 --- /dev/null +++ b/paper-classification/data/graph/cora/DATA.md @@ -0,0 +1 @@ +Place the files `cora.content` and `cora.cites` here. See `README.md` for more information. diff --git a/paper-classification/gradle/wrapper/gradle-wrapper.jar b/paper-classification/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..9ab0a835890a5db3e8ae4f8159e0cee6a2f64f45 GIT binary patch literal 55627 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 VEYIJJ9ELZ#02_W5@V{@~{6FN8FfjlC literal 0 HcmV?d00001 diff --git a/paper-classification/gradle/wrapper/gradle-wrapper.properties b/paper-classification/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..663c448 --- /dev/null +++ b/paper-classification/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip diff --git a/paper-classification/gradlew b/paper-classification/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/paper-classification/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/paper-classification/gradlew.bat b/paper-classification/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/paper-classification/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/paper-classification/src/main/java/Apps/CoraApp.java b/paper-classification/src/main/java/Apps/CoraApp.java new file mode 100644 index 0000000..bedfe04 --- /dev/null +++ b/paper-classification/src/main/java/Apps/CoraApp.java @@ -0,0 +1,84 @@ +/* + ** Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + ** Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl. + */ +package Apps; + +import java.util.ArrayList; +import java.util.List; + +import oracle.pgx.api.Analyst; +import oracle.pgx.api.Pgx; +import oracle.pgx.api.PgxGraph; +import oracle.pgx.api.PgxSession; +import oracle.pgx.api.VertexSet; +import oracle.pgx.api.beta.frames.PgxFrame; +import oracle.pgx.api.beta.mllib.SupervisedGraphWiseModel; +import oracle.pgx.api.filter.ResultSetVertexFilter; +import oracle.pgx.common.types.PropertyType; +import oracle.pgx.config.FileGraphConfigBuilder; +import oracle.pgx.config.Format; +import oracle.pgx.config.GraphConfigBuilder; + +public class CoraApp { + public static void main(String[] args) throws Exception { + PgxSession session = Pgx.createSession("cora-session"); + Analyst analyst = session.createAnalyst(); + + System.out.println("Loading and preparing graph..."); + FileGraphConfigBuilder configBuilder = GraphConfigBuilder.forFileFormat(Format.CSV) + .addVertexUri("data/graph/cora/cora.content") + .addEdgeUri("data/graph/cora/cora.cites") + .setSeparator("\t") + .setVertexIdColumn(1) + .setEdgeSourceColumn(2) + .setEdgeDestinationColumn(1) + .hasHeader(false); + + List featureNames = new ArrayList<>(); + configBuilder.addVertexProperty("ID", PropertyType.INTEGER, 0, 1); + configBuilder.addVertexProperty("label", PropertyType.STRING, 0, 1435); + for (int i = 0; i < 1433; i++) { + featureNames.add("feature" + i); + configBuilder.addVertexProperty("feature" + i, PropertyType.DOUBLE, 0, i + 2); + } + + PgxGraph cora = session.readGraphWithProperties(configBuilder.build(), "cora"); + + // store the labels + PgxFrame labels = session.queryPgql("SELECT ID(v) as vertexId, v.label as label FROM cora MATCH (v)").toFrame(); + + // create a training graph + PgxGraph trainGraph = cora.filter( + new ResultSetVertexFilter(session.queryPgql("SELECT v FROM cora MATCH (v) WHERE ID(v) % 4 != 0"), "v")); + + // the test set - nodes not seen during training + VertexSet testSet = cora.getVertices( + new ResultSetVertexFilter(session.queryPgql("SELECT v FROM cora MATCH (v) WHERE ID(v) % 4 = 0"), "v")); + + System.out.println("Done loading!"); + + // fit the model + System.out.println("Fitting model..."); + SupervisedGraphWiseModel model = analyst.supervisedGraphWiseModelBuilder()// + .setVertexTargetPropertyName("label")// + .setVertexInputPropertyNames(featureNames)// + .build(); + + model.fit(trainGraph); + System.out.println("Done fitting!"); + + // evaluate the model on the unseen nodes + model.evaluateLabels(cora, testSet).print(); + + // infer and store embeddings for all nodes + PgxFrame embeddings = model.inferEmbeddings(cora, cora.getVertices()); + + labels.join(embeddings, "vertexId", "left", "right") + .select("leftvertexId", "rightembedding", "leftlabel") + .flattenAll() + .write() + .overwrite(true) + .csv("embeddings.csv"); + } +} diff --git a/paper-classification/src/main/resources/log4j2.xml b/paper-classification/src/main/resources/log4j2.xml new file mode 100644 index 0000000..47169f3 --- /dev/null +++ b/paper-classification/src/main/resources/log4j2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file