From 026509b7315d3819c517b379e8292cc38f5380f7 Mon Sep 17 00:00:00 2001 From: Matthew Nguyen Date: Fri, 12 Apr 2024 22:40:54 +0000 Subject: [PATCH] Created github action workflow for deployment on cse3310 VPS --- .github/workflows/static.yml | 109 +++++++++++------- src/main/java/com/cse3310/App.java | 29 +++-- target/classes/com/cse3310/App.class | Bin 4265 -> 4380 bytes target/classes/com/cse3310/Coordinate.class | Bin 506 -> 506 bytes target/classes/com/cse3310/Game.class | Bin 1459 -> 1459 bytes target/classes/com/cse3310/HttpServer$1.class | Bin 1692 -> 1652 bytes target/classes/com/cse3310/HttpServer.class | Bin 2460 -> 2389 bytes target/classes/com/cse3310/Locations.class | Bin 825 -> 825 bytes target/classes/com/cse3310/ServerEvent.class | Bin 341 -> 341 bytes target/classes/com/cse3310/User.class | Bin 632 -> 632 bytes target/classes/com/cse3310/UserEvent.class | Bin 337 -> 337 bytes target/test-classes/com/cse3310/AppTest.class | Bin 469 -> 469 bytes 12 files changed, 87 insertions(+), 51 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 8786913..665cb1e 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -1,43 +1,74 @@ -# Simple workflow for deploying static content to GitHub Pages -name: Deploy static content to Pages - -on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - +# Derived from an example provided by https://blog.benoitblanchon.fr/github-action-run-ssh-commands/ +# https://github.blog/2015-06-16-read-only-deploy-keys/ +# +# +# +# +# +name: Deploy +on: [push] jobs: - # Single deploy job since we're just deploying deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} + name: "Deploy to server" runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Pages - uses: actions/configure-pages@v4 - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - # Upload entire repository - path: '.' - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + - name: configure SSH + run: | + # These are very useful for debugging + echo "Repository = ${{ github.repository }}" + echo "github url = ${{ github.server_url }}" + echo "Owner = ${{ github.repository_owner }}" + echo "Repository name = ${{ github.event.repository.name }}" + echo "Service name = ${{ vars.service_name }}" + echo "http port = ${{ vars.http_port }}" + echo "websocket port = ${{ vars.websocket_port }}" + echo "version = $${ github.sha }}" + # On to the work at hand. + mkdir -p ~/.ssh/ + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/production.key + chmod 600 ~/.ssh/production.key + cat >>~/.ssh/config <> .config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "Description=${{ vars.service_name }}" >> .config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "[Service]" >> .config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "Type=simple" >> .config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "Restart=always" >> .config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "RestartSec=5" >> .config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "Environment=VERSION=\"${{ github.sha }}\"" >>.config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "Environment=WEBSOCKET_PORT=${{ vars.websocket_port }}" >>.config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "Environment=HTTP_PORT=${{ vars.http_port }}" >>.config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "ExecStart=mvn exec:java -Dexec.mainClass=uta.cse3310.App" >> .config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "WorkingDirectory=$PWD/${{ github.event.repository.name }}" >> .config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "[Install]" >>.config/systemd/user/${{ vars.service_name }}.service' + ssh production 'echo "WantedBy=default.target" >>.config/systemd/user/${{ vars.service_name }}.service' + - name: systemd reload + run: | + ssh production "systemctl --user daemon-reload" + + - name: restart daemon + run: | + ssh production "systemctl --user enable ${{ vars.service_name }}" + ssh production "systemctl --user restart ${{ vars.service_name }}" + ssh production "systemctl --user status ${{ vars.service_name }}" + \ No newline at end of file diff --git a/src/main/java/com/cse3310/App.java b/src/main/java/com/cse3310/App.java index 20af118..7b40e02 100644 --- a/src/main/java/com/cse3310/App.java +++ b/src/main/java/com/cse3310/App.java @@ -92,17 +92,22 @@ public void onStart() { public static void main(String[] args) { // Set up the http server - String envPort = System.getenv("HTTP_PORT"); - int httpPort = Integer.parseInt(envPort); - HttpServer H = new HttpServer(httpPort, "./html"); - H.start(); - System.out.println("http Server started on port:" + httpPort); - - // create and start the websocket server - envPort = System.getenv("WEBSOCKET_PORT"); - int socketPort = Integer.parseInt("envPort"); - App A = new App(socketPort); - A.start(); - System.out.println("websocket Server started on port: " + socketPort); + try{ + String envPort = System.getenv("HTTP_PORT"); + int httpPort = Integer.parseInt(envPort); + HttpServer H = new HttpServer(httpPort, "./html"); + H.start(); + System.out.println("http Server started on port:" + httpPort); + + // create and start the websocket server + envPort = System.getenv("WEBSOCKET_PORT"); + int socketPort = Integer.parseInt("envPort"); + App A = new App(socketPort); + A.start(); + System.out.println("websocket Server started on port: " + socketPort); + } + catch (NullPointerException e){ // Checks for environment variable + e.printStackTrace(); + } } } diff --git a/target/classes/com/cse3310/App.class b/target/classes/com/cse3310/App.class index 64188576053c8ce264fb4d5431e3e23c1fd5aad7..fa7af53312718aae3a2fa5fd4a8b178f0e67177a 100644 GIT binary patch literal 4380 zcma)9>3L9$5^F1qKX;2%6vxP$*zp8)%GiY=f~Kyih|LGLi;)j5MRpj7`!d z-S>Up_a)t1QX-Q$P3W37E#3G2A^p~0&wDeHWm}MZ&`9siyZ7C5&b{|Nz3{)Mp9OFT z|IttkoedIE`IX_lJvt$b?A%=nJmBhWBzv^t`0%^={Z58 zdiiVUlzYoW)n z2Akxs%>s9|1rgLV>1m(Ruti|wN)&N4VVm^OEU>1neX0QhJ9I=*PYQ=E+Z>rIq)m6i zNaqPMG3;cF{FLEZavV-Z{27Z3H7*%@|kARA1gQZGW&lR+7J5pjFYM@J`y^Tv1A5X1SqjNTT{5$(Tj?BZk8QJ11?c zP|TYJdNQ-gg6YpV*<@=FU~3!)(It5~O4h519QR$)%pECt#<2-ySFKo=kg#?tfeRd{ zwYc(r6)+~0WB279j~RL7MJO8z6jJcRC@-{6#qcVIcss1hb*qAsX?PAXg*~9! zmwH=pd@d6g2+Fa~vOtX-$A?}dvekjf>Knvq4QvcSp$1z$>iK3t#~BQ>Mx8lkaZ_My zIjJ!c?-Q756nZp_2y9)FJHUH#&dO&^H;%K|CLa&zIEQftZWNhxS%Ll4N-i&nDyX5G zo){(t>bjHC)p_aa)hj%db72*}vIl8-LB~ZrC=m0VV70dHip%$a_# z?;DvJS^p~~37u+q6VtPr5qY4+@fhBs9(Bz>}mb3>$n14FTHbAy0@bA zv-rG*&y{OMrBG#ojxWeFeuJu&acX>J!Zk8X{W|lJN<&$0!U!1@*SaM4tF#TSMoCZ3 znAzP@hp+4S26PsXXZn5Y{K4rv?0Ei!RWMbviWCe>lGk=|wUn|If14@}PE3ql8XG+~ z5oZVdu8!~F`^*cbqiN6cB(2ViFbQfliyz{eh9B`RveX2Jc#!2xmd_LTF{`m?xSq+m z6$MjvI;7!AhFY!Fpzjw0;4v&Pr~|1PzmSjPI-Zh8;nNaXjZ;S6P_E+{9Y2w@M-^u= zJjX(up~K{IDwB?#l;?7{?2TRW@iW<4f6mps7p|hMoR~5EQegf0{*&XQeP{Y76oD~3 zPuWP@82w3w8s+1e7=A0T=W6-Zd%OMF)^Euq`aO@wB@RdC^7%1`J(iuXd|hBs7;cXD zzD+e`CD9V441wuC$n;p2{!5g~A_(r`;o4rVXHq7sFxT3hcI#9UpEZi%H8ei%%()r! zeoJ0dW4wPJkN~io=-2RnK^;H5)pDe%QH;+9#MP6Redv6%j-v@g)Y@$wi&#IsV*wi% zkl^p8=>=?k65FpS>lQxOE5AEw*^I5&g`J$+64-Kd7e~N0B)JDMafi*}4rgg6qiO8u zytC`w47eE^v8T#)W5snNq3sD>zbtf}X7CbhOC|VyH*og?I_?1A9`4YL9oVaONe1?n zU0Ol_^ojjAz`%JW#=YTwgIq25i!b8fbmGtgjy%Uv9oIrp4Rls{jaR(J@d~_>K4^(< z^eC^#a6I(-AbmzFUQg8UdQf>i9IUG8^*(x*B*)Qu=W03XDMh_RD4AI3+BUV8l~ zK1Sw7_y_6Z_yl!&h-vysT4-eDQ}}eK!T`UewowxCnWd}`XdR=g$tr21l`x`}FrxS( zzNDo6G7~JQuKU!OwL?l0Uy+ooDdB5N-h-N&CbSEz#*1nPS(&ohf|_c;H}QDjP3&S6 z^?X-IeCr0jGu(LtKRCXK>(ecX(gJQsy%s}Z6VEQ-W=jb_4HQlMLatBziUwVgMTqI9 z$O3-d9hI{Erfl*8O`0MVo5v9wW^(-QnhGb&3*;^GBQw35!2u656oWdZ*#t7!jx4Jr zhc3)eON*!4EW7#@&gMB=;H=GGMFntBwWI?6fIrfY)Z=-oAzQ{Y{-pAF3)T8F{=)r^ qqZNPUT!bE5@He)ZD1Alncl?7E|D=5b>i&zIhFdb#|HX+q{QLjs(ooL; literal 4265 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 diff --git a/target/classes/com/cse3310/Coordinate.class b/target/classes/com/cse3310/Coordinate.class index f984aefebf34cecbf11a482918f9aae7f48049d7..0c216b84c1a114aa5b383f227de129f15dcdab0c 100644 GIT binary patch delta 250 zcmeyx{ENB%)W2Q(7#J9g8D!WQm>3zvlJj%*lZ#W0jSUU-o%8dHQZn-rOH$bxSQr@u zvJ%S@^>Y&Q()In5vQm>v7#SEVfY=j=D;XKsY%=pQOY9gKST#I7HNzMgSe)}yQn?tI z8F+XYI2d>t8JIOR!#Eij8Tfe^SQ*$rEJ0Qt26hIvi7k_Cfzm*CFaZUDazGX%NCGOt z!2nXs1>{8nRe;p-Yi(!X){@@Jz^5g%l|f)~Fr$eiNFO6e4y+Sok{E+HNZ;fIj3OL- P{*f$NTYyUUFxmkCz8fbK delta 228 zcmXX=I|{;35S%q%^{Ej=5z`7LjZI2TBM7N1gh0ypK@6gei1uC}dI1k%5JWtHN3sz2 ziN&xxJ2SicR^H0+^|?O*c(4n|K{22TXwV5(67S;fDqb(Tqe(KKZV7sCxn6F4g3@uq zJWS*b6aRf;!mD=IQa&H~A14B$M2c^!_IrEap{a tk$i`1#l3;tRtCehGnCF_@|rS7Qu`(4raBrjcfL@~G)9r?UfKE}{|k{%ATvmkIz8)~3y0_mpec#a+hQlJ!7v)!1a zY7ts(hyF`2X}v8V>H>BrP;|8R_bEthD^KYi3X7#Zx_j=oWd;_mWif-R0=b6r+74c~RTdrqJ@9wlvks7QBVik?Y{e8xSL?(v=sw4xscmWolzYxUAcfz8Of z$XA*A+(34zbF$r#TAS7-y3*_DLxK5eou~ajT0=cAl+*D&){`^(-uQv~3muXbCKwb1#rGs2`L^ZvKm60Bm;q@1_~g$mwG#`%Tw3PDeJS zHW~mkKusMeuS3m#8d)3Jz=;1-C<}n*a1b)vyUINl$Ta<7;L2Bu{ZF&4TRfjwqf(3J z+(Ha-Bq&N!6hn$mX=Laua0OY~IYaYAYmTBS?Zkt4`5W?I=@3JK)(q{u+EjX-PT8;s zvzViZ9K`}vgcOSg=sjgwK+OJ3t7TAF29P%htKsbkfq9mUOg=3ez8h2<^6(wY6u5Z- zp4m(AtXzO+@e(|@aGPGmjekNP_gI`YJ#5#Cfu9dA$L$hWH69Dx!QKBstepdK59_9@ z_wj(>L-&eCO`YvH=a<7UQYf Jq|z9+egilE?>7Jd literal 1459 zcmb_cT~8B16g{)MEiIy8Bor&tU&IW7ln8SFJ=tQ7+VW{PPER;s0s zr0dEKdn21QskN;*+mT^Qw*@9o^Bx`i;a*9_OD))PB>B8hek%%1KBG3jH&LuUMWHq~ z*{y@7uUYGC@l-*kZ7&aHs4JxgTec-Ib;i3u&Z2%$Aw~Na#R7On)W4f%rJUkilKLF2 zo9EyezW||C!#GA@WJtPEt>+rc~A6#ree(NU|wR78A%f^_3i9=?Y!5ZrJGvWXfKld@f)q`MvM9ctpAsKb!%~TlUJpNR)z_|rM2dB-jt3TSR14jgj!aiQdx=&%y>fbH?m-h zn#+BLR=ME>{bS^@bhyhr$xJ!Ik#`u*nEw;Xt}rBLyc%xjE z+Dne$kDK*X?pN$pmosEaUe$J2Y~NA$h?!I&G4%Y$SN}MLlnOIrcx9I2WWCI{nmmyC zn8HEB69La>iwyegn<{TehZq`8GaL^~?|4>m@%JAcXK+r#**_Xnej7+$H*g*o7&@y> z-{(SBoH}1{Tvz2sHJR7Zhf5kRG7QH{V=poT{TQIw*10TjyT*MoXPMbp*+mNZGzJ-r z5Dr3)RNgjt8d;kzoU)uqZpbR$~}6OZ!kQOWzUe`F}at zl{Cf~(gSj?cVJ3ZbQ*)J8m=%L+t)66V%@+sTxZa>ZMVr6*QgujeD;7nC6m{26L}4{ z{_IBR+rSiV6Q0*Rzivy0n}>w=@_@a);mRL$5hbA-ch|r@+$Y=zTu`oEX7PY(B&T4X z@c9kTi)Gt%Cj=4`{0q&# z`V)NdK|~XIHa_?V^vU1gGx6@K7&h5^@64PzbMCpn_?yP|ucx0*0E}QGh7c4DDn}TR zdSgd@ueYcpikJqSqXC@3*s=HQT-kQEbH(R7VpB3i@+GGv#~Bnev#z5F%^D1j7R1lN zR}Wk%cD*00v!M+aG$c6ManU47wEiGFL6zB}YdW zu4+hfbfd>(;eKsi*ju9Jdf!4rRxd*|EoYPIyj;`KhkgwvM+O!{(|^TA4y zvKp>&Ypnix) m!Da!Eu|$p8x*AOGSmhmJK!#d?>V7~$C$d8%; diff --git a/target/classes/com/cse3310/HttpServer.class b/target/classes/com/cse3310/HttpServer.class index 586c59a30b4f70f66502d1949763e49cef350c81..2b6716bdda5295c6492ae749f72d73d9f5dd86b0 100644 GIT binary patch delta 1271 zcmY*ZOKcle6g|&lXU5LtXD3c#7vlU#;v}8^DAX;5&^8}%+N3EaPAOrM49TSS*f^7r z@^hhlH%Qf6QL#s20ZK(}35&94!>SS+Bo=I0ut$_LPEcVM_kHfW=iYPPee-4HLAdp& zzrVi^;5a^0;S-3;-vZH`3co<>rnzGpIn!A;F0E`@tFC~5`pRrtAe?^WT5wCYvwm8j z>0H6ta!tq0n7M6BLr|dMu(9FhbBrq%N(>h>0_vJwa?HF%?-|>%-LvxZKq3`_f;JsZ z2n#5~Bbgus+I8q?2qKCu6`lX9XW_<{YvpxxBX;}ig#VC0r(6znDjFWY{YQ@$N5aGE zl|PHFt`Oqr*D-)WrZkI1%UKgRG(01(1!5u3IizD4Bl4ygXc)z~iZS`Eh<58Zj9!*o zBt19hcm*BN5kjN-9twL_wwdPEBBZLVgR7?x>%Qm$?9>Nq}@F=}V zEr(}DGTz3lj*GY?ANZ~Y=dqyTvVg(U1FadmB5$);|gAqd8M!MWy)`;$O@eF z4$1pUd(R@SdZ4cev<>fH=>dV$BN-L1%0HD3Z62@bFtH+={Z51gf`(bN4cE?FDqa`p z^7=&|I2wY54G+wgd;Ub@6t3%d3SkX-`MbY=$h*aYjv``|z$%qAl&A_Pg;I)2#lcDk zuq~$oN4izKDG+(oVHb8+t)goe9NF0LtD@o~*{n{M*@d3eY&zH4b*D{dEoTw4@jv9z z%S%((+zJ~dfCjEqu6)pFd6Ts8T8!35UlW>XTex}`{(9VKvWnJZSi6VFU3AnC&xRkX zq9 z(GR1Fnb|Q>LHgpjzk<2(aHfXE>}VBB$`80!!SZ-`wFWCoj_U_IV-;-vOEgEK9t^qe zQ~e6D^j$c072c@!qK65$_Fa3dRYMscV29j14N_>9zi8v-GGEax82Ey_9`_SuLoNs0 z+i@McxWVY-NaHQMP41^KiFbGd3ge=9kEjAS854!_7lu@%9%2bXtpU) e9Q&x1#nJmd#8f*z<_~0%kL42tG0*W+1pfg9@c5np literal 2460 zcmb7FYj+bx7=ETH-83u|LR+Av7@$ZR+AgIPEkO_}&}dpJt~hYvAO zTCcyrFY?XLa3np)9`(Dw$)i5ANuiby^^j?8_O53UucEqLnYp;o+fU*0@roX&Ky> zK@>6G9<&xz(QSnR)5JDx7cdG=;Mqkf5YIkUKdl1Cn@_i52X-2Wo7jc+2K&=@%Ssk$ z*00cuj+&_BTT_%%l$LfeZJ<+N_p?gRRUEeO%_SD-ZK52yn<)8# zO6W`7CibC+zT2ge^a=t4$@Px*t=p=bNoy6)X%z{9eaXy!Up#2y5PAio%C8|H(4Jf` zLZ#2+h=HVuKBNS8g)ufpPh?9P3)dq&8+n}5S?D)0fI)#~9j<`LL~)Gw9WTV9unI<5 z*?}@}T)vwUN@R6DD57OSGG}z01-jQmlz922Kj}td*Md)dj!e70xf_ zWl1@{r-e_Mcv(l@HZRrLxw7w8l$^5FLJXrAG4P7OAx|pnMj&NHIc}MCq)N3^S>rP^ zQ?(+C;SA1chsGEZ!OrQ8^Cm9fqQG{l&N+dq*zUMrX0+!wf+f2NGreonFc%rTX5e)b zSxg96|5Kg~Q)bAn>)*L3JsH?a7BXHzF6s!b^yQ+s#JpGr-Vivk8QnTDW4@>4q8hio zf~!k?3ey^u8G)Vkm{~0PVp=zCuCcSi*3(hFZDJNz1Y&lfP}eAMZ3ECYg;}Fd>8tBH zhQ35`O`z4XOOBv&IxWeapCvm0NdQe6Xi69vs+Tf$0?;)X!t zY1t&4a>8{;D4u2k->WshfrZu93MubNy=qpvY2ucqq=*biZ6qRt3qLp+QiiYlz4Q!I z)EG0pzMEH>f(aj=naB!kBUJR$Q#sqMkQh6YnT^2W{V~75^R}$x$;nD_P6jjfoEuW9 zpSRtd9XR^CzS*o6oHFtJH>5OUkOioSE3)!r$jT9}*gG``R;z|=SnEB3!<$Kdn!YZC zJvX$O>ka+I>SsiChHp#+)ozw<7ld%S009X zDjd7e!f_Xxu@f=0^L^<+5}mZU8@G9qsA4(u0EhY+8ee`%^NXE&zgDm zfIh@6nq0xqZ0cuhUB+P!jF8Q zG*%;wz8xMu#7ERWj7#_!pAex@lI6WHQ%lV5XOz|WJ*Z>)IoF+t{Hb5;p}$F5!eA|M mnBPm;FL>HSOG}&&659;f>MK^o6z8uwf5Z8^mR5>|zkdJ*On>@2MFnj!VbCs1hzY@HQguf}Im zLpEJZ*9Z?)V$yRimh7<^2v+`Sb+s@1%=ESGSe0O=w_9^fITB~I{ioHPot)fj{4l7q*B)&Iue;whdvSmR_j2j$^8UI;4ed7U1!s&i_A zaPP&jrg`d&mj3;yCvZFQFbVW~lg2l9mC9DS9M-sYk$((9>F%r!PX)|mD!&1hSt@?! z0H!v7!TXU}=2+7U6fw{0X&kS6||kh=9%Zl zf}sr^=y+3*u2he+7)I7Y&c+CA!IT@GJ8s8YU;n!1)I(RrIt)635x=)TP(K9|^@Q4u zweRey&MBR>97Zu_VcbRmML}U8g7w-S%YUvsX7_2TRR>)bCIvGm^?pIyVHmY^pkj~Z zN|?6r*2WBG1*Mn61bNncP7`D*)suZewxQePbR$o&HF%qiK0S>%(m}iSs*=qbsoPIb3COmk2F_49eNhHbCL*p zmTw@JNys}|^V@_i(wbzmFJp-#5Vr6x}d)sthh z$;`_vv14Rl*3b-NWMFa5Pf6usU}oUuVc=xon%I$R43q*I#l*nKz{8JZ8CZB2SQ*$D83eKt%M$f-67$ma{gbj%lS>#G z*laTMGE3|j8JIOR!`K-(Ch|&6wAE#0an4Uko!F6U%nmex0f-qHI2pKrECvQ{1|A^E b2!ud0fg~@Grw`^cFtBQEXJDMH!Ke!WYMB+^ diff --git a/target/classes/com/cse3310/User.class b/target/classes/com/cse3310/User.class index 906400f2cd47fbc8e65a41cb932514d7704dd62a..d376a46bd45cfbdb2e5f0ecfa0a236b632b073c5 100644 GIT binary patch delta 317 zcmX|*y-veG5QJyXj{i8oKuCdzutWhEkpo$xLTRWF1r>jyGRBG$5nD?tlM$d;*9N*boFi$@?l9rct!Ft4@dMz=p|gFTRh} zZJc$~$#pMHit;j8C%6y!;N~#D%L)P=5$sOfPtWs=U>$U`ZqY8E*IFJ7%t?5dCm5Ss zXD$c}5;a&_ElJpLv|5&M;gnxbSDfRE38JZ8CZB2SQ*$D83eKt%M$f-67$ma{gbj%lS>#G z*laTMGE3|j8JIOR!#Ei@7&zG(xOf=28F+xolk;=+lZ#W0jSUU-LyJ?3CYmYefzR@2tp1hM$T>)e&&$c8JZ8CZB2SQ*$D83eKt%M$f-67$ma{gbj%lS>#G z*laTMGE3|j8JIOR!`K-(Ch|&5v{q+jan4Uko!F3R%?>nyfq@x_IT^TsBm)CCl;&aJ d1@ahy5NI}#EQ`gdiL3s68!0a9+TejrX$(922(_FtMywS@K?pLQKU delta 282 zcmcc0e3e=J)W2Q(7#J8#7$mtEm>8JZ8CZB2SQ*$RswstVF>o+&vNLe;FmN;QFfs__ z7p3cGmF8uZ=sOk{rxukkGH@k=86icbsf-LP8c~{I>|kI=Xa;$U0jQh>r~z((9MDpT38Fwr PkojU@)5L)!6N3Z*cu^v*