From c83fa2cfd95f6f620c2040641c390299192ce9b1 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 11 Mar 2023 15:04:03 +0100 Subject: [PATCH] add routes, error & config --- src/server/admin/routes.js | 29 +++++++++ src/server/admin/ui/login.html | 19 ++++++ src/server/app.js | 41 +++++++++--- src/server/backend/db/dbhandler.js | 0 src/server/config.json | 3 + src/server/ui/assets/logo.png | Bin 0 -> 34209 bytes src/server/ui/css/errorstyle.css | 54 ++++++++++++++++ src/server/ui/html/de/index.html | 0 src/server/ui/html/en/errorResponses/404.html | 17 +++++ src/server/ui/html/en/index.html | 0 src/server/ui/html/index.html | 61 ++++++++++++++++++ 11 files changed, 216 insertions(+), 8 deletions(-) create mode 100644 src/server/admin/ui/login.html create mode 100644 src/server/backend/db/dbhandler.js create mode 100644 src/server/config.json create mode 100644 src/server/ui/assets/logo.png create mode 100644 src/server/ui/css/errorstyle.css create mode 100644 src/server/ui/html/de/index.html create mode 100644 src/server/ui/html/en/errorResponses/404.html create mode 100644 src/server/ui/html/en/index.html diff --git a/src/server/admin/routes.js b/src/server/admin/routes.js index e69de29..f16b802 100644 --- a/src/server/admin/routes.js +++ b/src/server/admin/routes.js @@ -0,0 +1,29 @@ +/* +* myevent - routes.js (admin) +* +* Created by Janis Hutz 03/11/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +const path = require( 'path' ); + +module.exports = ( app, settings ) => { + app.get( '/admin/login', ( request, response ) => { + response.sendFile( path.join( __dirname + '/ui/login.html' ) ); + } ); + + + app.get( '/admin', ( request, response ) => { + if ( request.session.loggedIn ) { + if ( settings[ 'init' ] ) { + response.sendFile( path.join( __dirname + '/ui/panel.html' ) ); + } else { + response.sendFile( path.join( __dirname + '/ui/setup.html' ) ); + } + } else { + response.redirect( '/admin/login' ); + } + } ); +}; \ No newline at end of file diff --git a/src/server/admin/ui/login.html b/src/server/admin/ui/login.html new file mode 100644 index 0000000..ad8ef4e --- /dev/null +++ b/src/server/admin/ui/login.html @@ -0,0 +1,19 @@ + + + + + + + login :: myevent - admin panel + + +
+ +
+

Welcome to myevent!

+

Thank you for installing and using myevent! Let's get started by setting it up! First plan of action is to log in to the admin panel where you can replace this page here with your own landing page!

+ To the admin panel +
+
+ + \ No newline at end of file diff --git a/src/server/app.js b/src/server/app.js index f97aa5c..b5eab37 100644 --- a/src/server/app.js +++ b/src/server/app.js @@ -17,10 +17,12 @@ const cookieParser = require( 'cookie-parser' ); const favicon = require( 'serve-favicon' ); const http = require( 'http' ); -const env = process.env.PROD || false; +// const env = process.env.PROD || false; const root = process.env.ROOT || '/order'; +const settings = fs.readFileSync( path.join( __dirname + '/config.json' ) ); + // initialise express with middlewares app.use( expressSession( { secret: 'gaoevgoawefgo083tq2rfvöfaf0p8', @@ -33,18 +35,41 @@ app.use( bodyParser.json() ); app.use( cookieParser() ); app.use( favicon( path.join( __dirname + '/ui/assets/logo.png' ) ) ); -// create 404 handler -app.use( ( request, response ) => { - response.sendFile( path.join( __dirname + '' ) ); -} ); +require( './admin/routes.js' )( app, settings ); // admin route - -if ( root !== '/' ) { +if ( settings[ 'init' ] ) { + if ( root !== '/' ) { + app.get( '/', ( request, response ) => { + let lang = request.query.lang || 'en'; + response.sendFile( path.join( __dirname + '/ui/html/' + lang + '/index.html' ) ); + } ); + } +} else { app.get( '/', ( request, response ) => { - + response.sendFile( path.join( __dirname + '/ui/html/index.html' ) ); } ); } +// Assets route for logo, etc +app.get( '/assets/:file', ( request, response ) => { + response.sendFile( path.join( __dirname + '/ui/assets/' + request.params.file ) ); +} ); + + + +// CSS route for all user-facing CSS files +app.get( '/css/:file', ( request, response ) => { + response.sendFile( path.join( __dirname + '/ui/css/' + request.params.file ) ); +} ); + + + +// create 404 handler +// eslint-disable-next-line no-unused-vars +app.use( ( request, response, next ) => { + response.sendFile( path.join( __dirname + '/ui/html/en/errorResponses/404.html' ) ); +} ); + const PORT = process.env.PORT || 8080; http.createServer( app ).listen( PORT ); \ No newline at end of file diff --git a/src/server/backend/db/dbhandler.js b/src/server/backend/db/dbhandler.js new file mode 100644 index 0000000..e69de29 diff --git a/src/server/config.json b/src/server/config.json new file mode 100644 index 0000000..baf095c --- /dev/null +++ b/src/server/config.json @@ -0,0 +1,3 @@ +{ + "init":false +} \ No newline at end of file diff --git a/src/server/ui/assets/logo.png b/src/server/ui/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a3da3a7589e9f534eb2df1f5f36ca60d0fef48 GIT binary patch literal 34209 zcmeFYcT`i`*EWiBlw$!zK~PE*M38zw=}iw!ML)BpiO50G|u&bjaJyWgL8jQid{?tRx7BqPb*Yp*rin)8_t5zlor886C5oywc@n$= z&(w;{0DsuItQ!*5sR4_BRvB+tH$|CDJ&!1g$d4@5Yy0G7ve43LQZa5q%p!freOF)I z=aa_w*qTM_vFiJ1d7W6?!966xjJ}O?H8dyy?N8f4bANPjG9`(~J4N z$rZ4Wyra1{!Wyamn;hMCkNNWaS*Wv{`xZ1qna*TG$cLVb>nw!7$CBXh=kDiD&2l6V z=&iqd=A;BFVF9(Ax7N~B1KxpgqKbe4Zx>!aHu0jP6XT=(o$>#w;tPDq;Qd5fodHXK zj)_xFOT+dz@YM}(bz^T;cUM$`tKVhC963mV9WWtF78wt?*j#t(0Rc?PS`koz;F#tb-J1^;<^(n}+w%$ma7+<}jO z|C2!dKdpou3!&-@YmL?MCFb1Pob2lQE0GS8liSgy- z5Q_yjr5{{GFvmWw+rb;Aesq{^d5~5w5?3f1#fR{DWP_W~tar02hzwIN4YnzeXN-QQ z)0&@y0&bI&e6g;htTSCPomNrh(|cN6SsGqpHjY}=F0%&Yp=YLlW6U7k8kZ!cR}~U) zuvQo3jhk2Lk@t(!v9-u|CQyd*v2H_kW*9;Iuy7CJAa-Cy$>sSVm|Lf?>bA6Dc{DIt z*SM%NWa(pKl}CGIammz8gG9C}+mQ`HLBZ&^h`6Y2rSlrem96>ZUU6$L$3+4Cu|rRp zVyXv}Rjv%)W(K6L(ax!>X*UJtLu~!QbrMfh)mTce#C zAAJS?$-t%QMceY#)e4N@fw&@juz^xq;FoIV`q%240j0h z!k#ym6&i*hSvpncujv`Lc>QQ`a(y7uD0<+(n9a$RQdmoGuT81l*0xty2B!{fq{SjnE5^w@{z#<@9^THsEu-e8k^`W8}q43}@!d2OiH zQOBkXt69G~v}!T;Ih5BxS?qn}ayGM_XIF>a@Q}0yl+3EiseI`%yL2 zQ7>z1iGAm`>RmM}t7hmQ@E%49{GovL7^j!@*2V`3LSm5VR;!l$VPrg{Py=&@&wB9p zu7uO(s32~(RUK1fHaUyUPZrjpR1P63Rvv&e?4tb(cGrVMLbCf z{_Z#g`mC(F2DCSCOnEAjLG*rE4rb9}?~guoUfq0w8VC&oT|qGNfM_l>6x1eg z%FM-G^2IFd!rCAg1BZcg{%XVspJY_JZ2*;J5Ds#jPy9_^Eq_qNSp---s){XALAZZrP*br3BJOI;^JCgB(=iY z_r8jEju~+!$}HUz+ThA=TAt^4;19oULOHF|TEt=$?v)A~Vf*D_8<+gLimUVwjTkoJ ze$@_?=;JYFU5EM={tIi2hjkLf&Y;C{oCynFXIr|QG7Oi~_nOMIwtIjXGcL`{rRX((#lnZz0i(j$M|_yWD5@KQh(1-1S-eVLbR`tA3@}QjLEo(%Gyih zQ1*N}&pkRi{<2FKE-Qw&`*6z01G0K^();%|M37<|5nUY^nK&KT0|I(hrw!m;U5vu%&?W;j znPm&vxNrxT@>m~db{w2(9E>lhtS>cbKS5BYdh8&S41py93>0kHf8Gd)%@_;v+eYG% zaDKCsz9m$7%0<7=e@~n#3-e>~9D4fCv+@s64X*l^3MgI0(A~6O<)_UrgmnNTN1;_>mRu-4!G?V@=Z2)(gv2dK(FbqK+y4F`}C!TnHOYeTr(TmoN z5=PeRmd$6B$|u&!;rZlvP)s5Xi1G(%7w2x2akUn9ny# zV8h_7e6}-0@o){aIGvr5W|ZtrDno5k9Z4IS__)YJ;XS)&K6M6&*}Byk2nDA*Nn3Y2 z(>N4uXJILn9@9MG9@)16s_zF8n(gzqJInaeC}cNysy6j9*7d=)ggI89`zq{HX-Nue z;%l?@6Xjn`PssYV(CJF|=ICDuzpLdbzDq_+ADz+bS1_6~WJ-buE(RRipKe%pV%&o` z>Y3RZy(*)Fn{Be6uXHEy&;$O3gZsUhF44LSI?TEbjXOO}You0!x-w;8a(I=RF=245 z3gxtAvUaz>g+up=W5B_>%D|6(1rDk0=bTpT3vYXBiw}Mi)Ru&><*dh z?>ipGylVqR{tO|iTb;ZKU)+2A^&+nsf?qOGINxK+HNGM($=^epGlct4m?>g0SF`01 zW8j?U+a=JTkWnPh&GLahHty#DhFX>T@dN(Z_=@y+ts!=! zts#&v+r+8sCnA@EqQj-rIiDn|Tg5F@oF;vk`>0kBsAgkEW&NIK8B`yDuLP1y(z*=0 zT4(b~e|=v!Ll$?tCeM}3-XJw#TVIlrG(Db}u(Bts%UfKHi8<6WGU7h;naQiK7us+t z%WHOmh@?@UwH(Zf_Dg=m7GbVj!fMBPiM5FNf+TabRjslqOM81a4|tT)sqxQNECM@= zJv6Z^Qftst<_R!&IdZ;#2nCa_bj=-^Z7^_;MYxf56jjI{xu@Bg(^GOuh7*5v*I zbQH0;sH10`68keR4@j6If7#`i+`9&3wX_A9$-rZz%C2|JPVmHZ?(@v#O2ADegefG1 zE()dW<~P7!@(s; zJkMdS;0D6J12LP!KQqb^BW$lm#$jR{{P}nHw3t(QJ}8;3zNv8=5FKh;vM$JI z?hdw_lA*X{rR$9FjJal&%a=({zvxi<5Zj!h_tN{jW{p4*xR8)89nqo!eYot-AT#RI z0#OY^;mfm!&*c}?28SgZ0f{N6Obd(igh=$)OZHtgy7P@AeyYmU8dy}-Qk+8#zROn2 zt`iOKgWK`YCHPrI_%N)`vYQIp1;KH^kq$+FK% z*|o2K8}XXe2&GBSrO1x5>mENUVBqGc;zr-@A2-n0DhH{Le8k*!-muILuMQQ%R1zL5 zrxZGv69ONIG)tvP>o^}_5me&QO|}nYotT60g#2%)Z}lhdqQko))%B2TM-HYiO|_A| z>w)<^dV^cXg40XUj|tfvdV|seGPX5S{@d&6i{mO#yRc*l-=Di4J652W1-_yO#LVy1 zvHFevD*qqR{(JEl{7#>qT1P6DBng;bv~-a4>&{cQ-NinI#Sb?c>ZV*yzyC;pAVZa} z1mV4cqf|m1aY?{Q{sFPnwBE4!Jluf^dKwqi&5&_D;YfiWNWKe^@~>g7IC;03t7S$5 z5v3JudL~V`(eHqC{wfhNTs73x5+F`> za4C-B2aE+nAti1pt1b=Zi$^A?_&cU!=2|Q3DSi1-6CF+K|kac*zvBgGyhQe6X$-b}87nevlflpLz49%y@afXBB zcD-u6QGSjKs#2lfZX_5d5xJ89G2v9 z6o8C@GRwC16TUU*s8j}^VA+)8!-%u(Q&_UJMqDp6(^ZH~@5OLaf0pgsbMQ4EpRxGm zHjC6}P;=r)4P>j-5BBrNd#G;Q2)b>tLi{t89*WgdBn^URqX46Rtc z-QRO6F(&ujrYmh{z30y9na|$4yXj?~9>T=WpP65x()OFfQYI8^Zwry72h5fK^Mbgzh;h9U6rk7-^mK`mm$+I!CUJg^+%7Lf{do+NbVG zep}oE(BEbfHpk129tv)1{#eoEE_HBog*tk0vJLtdw{2$7=68bQHfT{k(I-mGB8Xv` z)6b&_@_v6WA>VsL+*d4vs=NJ6vs)P){dkL%869;VDlET6ILW+-rQWa18x~9@)rG&@ zR*_FlY^dww+nzs!JID`1#Gk#KZd|T*D4m*IIBNg+p$V?^ERpBt`Xh$ru|{m$>El^a zn6B%D^XUPIJ)1=0_Si7NxYq3KfFK((iUXu$-No4`%GFH7<;ltkOKMqMM_vGW`H(W! zKn<5&+qvX9-k%EfD>tV+4O=gBk>*4zrz)^A@q|3Q%-yCt9|MNf#Zjj9p8Py{^XS@A z83rmwlW!U2wc+#U96OgivM(TDeD@_eUDN(!^_p$QTQe~^|1je#hg{_(0DL9!=BTk{#K(|4A)bGRkr1K(i zQ416DfC+}d*5m46%}4Jh8y8|)=Fvwg%jIf5_p?Y^WlH-^Un|UN1nrce(1B*YxK`Q7 zVg3LqU-DSnX&HYshnIf_HI*~povJkLaydvl7@QF_)E|MvpW=-6SBIQ$<){W-!tyhy zufJ7^e5a$72Ax{B!fQV;BiF}_5#I@BdV8o@HJ|G`Y*X{mcD*u~pYvBF%JNfjt;f0y zAEF|!eKV@t4$T~uH+O_imoPGL3s0wfgZiydk3YzC>7gvRY%>wqLo5ySkzF{@TI}Rcct-do*IETu~Xoe43=@4a%2($`Yt4Ow6-L9ydV?h0qV8D(w z9vTsG@Kx!My^`H3T}ol6ds~V~0a8ZUn}WYOA)c~d5c=%OpjFUFK%8LeUcTVktmFhU zoA(CGxmNTP#mYyX_vu~O?Yv@JJI{;qgou|7_q`Ynru$v@s#p)RSxYMMXp5A&>xWv~ zTUQX)`omNEK1j03{)cD`V`6^v~%juC}OsjnP7KYtKm65}{RA3l>c>T19+$4h{DL?yr9E z%8o1oofzaz(}amdp7?J{tmYgA0mbm4s>oSe(^EZc6@R{QO?rnR_CbwvpjT0kSjzJGz}*Hcujobxx(#xe`teI6>#; zu92Q*1JaMeJ5CU-^;b$A%mYjYnh#QRHA`=0vO_9M%frpwj$hjwKlFt+!h4l4XJPmR~O5WUX-rpy}i)CXKk47S#zyT#>Wz|LiWucXRp5xrGQ@=dt zhPHtFZh&tPo$VPp9!Lx*6E<2}75w4zp-Z*QP;tGj9ya)Sz$vyf>t`79Z8jN9vHed! zXG@yY5*zaUpX1EI8BhOG&32uf_65Bty)_K^Y{B!%#Mk730o=WT2&tah&*xQojcmEG zA1y%TN*BH^P^yIeiD_8xk4YN=prQ`BY#m>jrE^|9kyAC>12aB1S4TS4pQDyUJk4I>ak>R{kJG)6&gWy_N}0)2*qw61$fB!CLn=YV27L zj*Yi}Zq^rrXO)>pucEW!$lg)2f4$bEp+tl^50kv<1aza2Moi{(Zrk5SX~*-js|7Z? z4vpkOEo-yG!WQ$m&%=8_qH9xA>jj3E&p~y7T4Q&xRRwM0_bZ-V1K-xZXE%FV2056B zl_!kA!j;J%SIDwKNApT|bxvLlG*4KD+^Vi1|1x~|un77j4%uvy<&*Vt_`5|lx`8)Q zZ2t^-2L5NsS};E%}5drylq&Kl33%` z^8?gZ=7EF9j(}%yOYHL;p<&ui0@?aPN2#BQj#mIBYHDkLUAl2)a3PcJ=w@Q}(uVSA z*uHe+X>=@rJqlbxL{Wz-$3^v<3ZiE(CpT!-nGB?kOqnCDBma46#&meP=Va6qVrv zW!Mu_A=91`N7Fwupj zQd@TYH?Q+I9<}UO={@)hW{1YMQvCCpuVJYDYtyaZu=)Ezhdf+GSy0=7=8ANqj-QH5 z4Np`b1qIp+r@OcCz+1l%r?C3WDl!)@UOY&qIO&IR1z2$fAEWpZpVpOm_&xOx3pm65 zhj&isy$vbJi>G%GOWvRLyY?ULP3`Nh^pnqS;OaZu3FetKl|gWpD(t-G)>Y!_duVJF z;K-iiN`wRO{*inifDm`aqo5M@bCLY$uHjDc+9>qOi9IE$#%^ba-g+&Zbh4`j^Xa2J zU0hpIxu&k(x#c#S+4EV6slMdi(!=w>0{FT$)OOcuu8r9ln%_+A84Ez_#5}1~!UqQz zFl;8sKtdoVo0H7}>I1aR#{f{7Px7RULNXy*f8ZBX72X7&y~a5%+Bn60=Tww#kam(fFBQSHIEzluW=N_AV(6%8FHZ6N zh4LD2rR>$Vz$$k)O$f_OAr|L5{_EI7ZNZs@ZLa}dy*V7InH?{Z18)J)?Y7hg+|VbR zqZZQpmNX^zVt7Om55;w$nUG291d?9N*Q4I*fw`skBgm{8x2^Jw3#>oS*Itooz!gqm<%-9IJ zL=RvOI*13&zPKXf0XrbCZ#5SYOp!n5+Omr4tsaGZ2rsC?c0$nTvZ?*>@Wftlw@D5D zEk5q0(*!Bux$&1+dS>$Lfo8T|JM3ZLWsn^Id8PrV{eIXsCB$Vq1)LmD!*Ej-(m@*WIso&A%||PYOkRmo+DXswVE|FO*GAk^ zD8pbnZqs;ey4u2bV)Xg1cl>y37KbzH7%#a+{Uj?-tU}yMO%ohiIw1qSh^hTFpf4Aq zy{-Scx2IX%z_wEi0Z#JSPOY&Un$^t9&6S3ObRRfv<_yGPu$p^e8L56VX0R<&@;SiLxnJz^2xw}*`<`w>4*lh#EDG3${cPRbBUys)0Z;0v{U#W9HTNtBR#suyvY?ywXGl%M)VrtT0cme`cQ@ zz6*IKAC$$jAJLMb1c1}U@R}Ma?2(JWTNmII2Nrrj0jonG(DY~z{mvf$gZbGwLxqjT zsC+?-ynhXL@N=Xl7km6hyn-N{Y+@r_N4f8r(4UokW4&!@-!7UeZA3IOIJW{PFnUB}bC%s{XK0R3n#uW*{-oRxp5rRB46L!D1d`=yx*6<#4< zzwGCxBH(V1=HtD1F}NRJ`ql*iRX!DOmuSL3K$8o&!gVZt5d`anp6~Z43K0b=zcKLX zC7`$Oz_`AEQY$!JW$MFKM)Y-cR`}&K3KG1~mzp!#)S-kP{1z@=y}wi`^PR%$!O2PN zn;OsYR(V`34Nx%kaoM+o@!sV0!sNK2FKDgInI{e!hs;%fvKm!R~&_+X^Ga=;k5}=G6 zsjp!mZoN-L6Rb84#umeN$t+kg!VZmq$wr=Tr&4FeFJr`90T-08?pu(=y_F6XIK34z}7h><*Vw@ zBNz6WI_2;gc*{Tt!DC zkM=@E<&&_5n9ntK=m>#Mw@?CLKYy;#x!zM+-U-i}Wmwf_n^3oFC)vTMr=1solXbUB zaN~aEoXf~dAvOr12g?7^epO1)Vsd9^)IIE9^(O>1uhHZ z<>WkvouO%e{fAq#$S|bsi^wyXeUU)@vFTqTRJ&~uOIL91TwfM-JN%qronL~%{fIAIZeT{sY@6d-$_^=TGi*)#CQbIdZ@>OoKl=wDi zC(JVjbyg<>LNErR-(pGv?d&C|$yNDNqV1q~Ik<90O`%uv8K4LJl6(#bOP_Qj8MwJh zK8Jda+se#ciNRqv4~S#pZ3+ZthE`=3b*M%|@0Q7UQ_!<%YIKGV?PvgcUJdlVuK=7v zPH!$BXa!5gF!t|d)k!6KpfT_s6TjIKa15a11KN5YTHX_iI7mU?6#^`Qtka)|lnSE6 z%&OdsraZ1iP3^;O$}ALTNcFPo#<6LEtEoP(pv1WFP$uLp`?=5ObUXI=#ie_L#4-rp zFO4eQlAtgDRhzm7$opZzQ|4aoZ!%Q5n-i_|?f3*B70Dr-#BVD#Tezbaf}TBjDYMkA zf=D%BXrSJ<=PwP~s8Ugro~hNxk4+kb;${g^89sQ070#iGAQ(*;ZrA8e1PzS2)~ne0 z0mCJr!nyyv3N+}i_GcAo!epn3w|(L)L#=ymgU}{2&RyD7zK3TOUNO`I=SJ6YchPEj zI+^6UyUMBHccHtwv&Opfv%S~2_AKEJ`5YjLPv~L#A~m22Y6?9{O3(M$Izs17h(DDK z3VBoz6ti(<#w(kw`{X5IxDT-z%zeTPdt~)YX>nGq?tT%b8rWUGbmsvI4wN;&t+1Lv zZvhZ5ki%FCKhq5C`_TRKh=i+mzD}-~+Mo5S72Bq(!BQXCOct!o3;SIOT-(N@ID5fW zfOu6kH#t=`xH4+C*EK`ffcC;vF2T6Y)2%OrQlH@ifX9WDvp_I&U>>Fy&@3gr&+wTN zg++a=>t+rF4g#tX>*38Qt9o0Y=aljKlt03W8Zsi2S8rFw{Vh~TNGO&MDB$v@le4qy zRq?w&qh}X_fg-3Q=f@IYy})vb$4NqwKvhjM2O>hPW-Y=VjmqHW-tyI1>H?)YB)Oj~ zuJ4ZW!CtGDF}Wwlkd^rD@W5A;l!KuXg0sywRc#@VzGk&Q_|al`dRX5u@BVJ`#$IYy5h0f z4SxEPIK9cx;5-Fy^L8IddmAc%`lfU=0)AMd_0>}|rjgh?k7AL>_0& zf}^40u|Ko;woGjxdByP`%9=qUqU#wZ@~b!s>PNX1a=66YMIH%Z)nZq|#M9^}9{q%Qc3ou>f(bFN6vPWbO4R^Hs^leRRd_D$|Xy=;qw7CO!J>c)ep5|zh_9%s@`;A%Z4f-fcqK?v2{X} zlZtDt=IdCrW2pNWAQAu`5GM~wp2`5)u3cdRh`S!-79)HV(%etaWv;ri-8BjbVzJJ! zqufU9QG<%qNu^oa_1@%`Nh`t!Amdchn}Y!C2FcWq4de!Z5|ib>)*zSc(f1@-4T#o2 zc{^=;8Z|yqgUwO%0n8B`W{mlGnpQm9d^>G^g+~$4ooHS$dh+q%DS*|u94ZYp298rn ze&oeJ{M_(_Cc#Y!m*nZJ(DQL|aUmP09fy}z6}x;u+3Lxy{_d>baxjC;s;1Rf>_DB+Hxkab+|<-(gA9L zAViUYs-$ZUAORh4BS)q~X^c5lKdMNZ=R!{7!G8WywK$#=tpu&nC!F(sGyWxVQ39m> z(nN(Y5%22sOgTvTG!(IXJ@XrScX$38GOaP>uqSyb4bRQVJhxv{JXQbIqH-T-%k6IJ z%XF@Qv$zNp@=SzfjrICw?2N&G>PPbAVSK+dd4}3+S0e$0d2I03nXoKQ=xGc<7jsVD z5TEV>NMz4m`ptmF9Q|4ifzBsd`7pV0gHwO0O+lQB`Q8?wPU}HQY>oH!6<%7Ss}PuT ze#v@3fde7Wm04}6lpP2n>`cdhv-*OXohi2k1;hE`5VD0lhwEE`b7a2|nGkZq{h6_n z5;JLdMCu6jrb^?%PUE32yCwwUvpBIW?T=<^1#K$Z{2hG*<}%QnoQ2>wtjHj`Q{4e_ z)-LIQ)05$##9mVQw1efhWl|6dIQ5?_u zuq5>eR>uhg zI1-b>YR&F3y%DxNlQLPSXJEimlnu50;?UejbzED`X@sVdVS5P?j zqlaPU-KF=c4-Mj>>FJkk(>FYkEq3}3*pf&yR4q1ET4yUS=UcyFSxF%;uR#iU$*DY| z(3N`9>r`5N=f(N}%U1C9vTxXM!8O8^gDG(v=AZC>9{>;{e{QS#o*apY-HS??r}qDP zAl=bd1jkfPD8HUy+x>1~)Il>HeI~j402|`=#Y-cu6A9X>0IASX#Nr_M8I1JNxXEQz zM-)F=6LN)~A!cib_c%ks&;XOf-r&uUP8%PTLPvdb{Gy7=-VSx2I=J9hK9Ay=>2|9Pq z)i2MZzrF%s3I{V?u zP~^ozV&j7YF=YOc_#)AKo3bG!D3mkRrlS~O$I;>Ynf62`9b33`v?Rm2h~lmJOMLa z;sY)BDWn-)mkH;i>_8o^z|nvq03kEHut8(fShq(S*EogHz;Q*wD9A4`)jo@eOYt16 z3~=W@!#yvxAg$3~gNZ3*oT#7IvG9EOr44&3D7ZC#bcPH@jcxS_DjWx~sPnsm2C3=` z+sPX11-cq)#0)(+l!A&kA?I_0sc*p%!%(UjoPvR>jBucpp0(Kt;EYQdzGzzZ45U#t#RW%RRK$-K-a@jBuz%i(tj1*-^Q&&-O*kAUILo_Y8T>M z?;0bF40%pVq3dl!4iaF|5yZ@bssp3+!wG=72oTkj3Oj!~T@BJvyr&#Y5zi|q@ap}r ze>zR0CUixi=VzU8V`ccY#_7wsvZ9%c9vn#L%Ah0Pp%zcX z#|h=x4ZNA`Z!NuM40c~AM^mjplPnpD%1AOgqr{tMgAB@Z_^!O=3F>tT;B(4Oscwgh zL(zSLoAn4gD8s&GkO;+lOCbF)$9J@mikgRpp`deqZ7|*TR~LI;4RY#*|NYJHX~AQ? zxg?RPDsDpK9UYHAPlB6ty5c=QzXZ|lO83u*sYwrfe3T7aS=5)wAo>fRZ$(%#+~;`p zS4s$##9Gi9Nrs?JiDW)bL+QlhsyVF4asd;m$(#mmS#-%Wc2x0oR8PwB$-mDail;m zpmfZNCWh2HwGMW1qmbO0t^JluAC*A+wTO|ZJQALI;$ezzmB8Clw6aMcm!RMKjtI)z z2H1CI-syOwhn8(#VUslw#ZknQ>woImCqM?;GMbDv5<}4=tpzjt1w4nL-xVH#LHg@ zl+jr%2QGzCvW(HN?65S8@TJ{+zZUPHdV24C-2KUIqWdMWhcXisrSX+)VHmfHfjjdUY8YaCGzbq(6lQY0PY6QnK)JK9jzQly@g9UG%aqy;sV-A}NE71Xb) zb0#_wuc&#I_N%ANm~p(x2JA_U_j&VePvxU2k;ZS-%W0~KAKFvSGegZHJrMdEEgI>2>GHyoLQQsuHi8Tn5|qCl^eE~ z&9t+uNzHhd=frmOehio0xa6$3_g3Zhgh6TFOJdr@QDUOSw^w@*vQqZ5nUDVGL*Ghq zW~U|NZR?smY*s{%PmPVud)-Mt{O-Z0y^U(&2As-$?o^wN<1>T zwQh5-HEc35pm;Jdo1y(DuAq0^P(bb1D`nZ9dqz9 z+61v4+OjvBY!8K`H@$d1+d&^kmW~nL27lw^>~A3b6slJtAvQx+KyJjF&N9&FH%gAA z@at6yp7=&FbP}60k2dZwxnfpM9J4>fOd86QTjxc7O9L!|S#IZu*?%>RYBf{`-<*Bw zt9)wqpmOqwm51p0(06-?nE6M^wU;dX->yx8GZ9ZS2?3jC6l+6Yt?Yik!G2p!gIG8JMpTDN-*%r|}nDiV*{Q_)KLFl(X|t-kJ}(EUS6#RgLe7mIw- zPmUwq)#7Y;VQv~Xm67{*hK3R924x%W28T@sW3VSH;1fK@<@2@$fFWOsW!!Itlh4@4 zswlWSPM%DH_Kw3ScPbF$0#`5iB99ERPJU$fO%bLW5AO#b>%&wvKDrLo)nrwAwd{;g z<>80ccV|B^(!73j)U~j&mM2PG(@^Lkd(%in*JGI>Vfa;$+ihi%bjJXCzEk^_w^h@#4@? zt0s^Sd5<@~fV8rRl=L3>g9{(d9(ZSc{Td(xSE3?^17D8xpZ!=tfF+eqGqNU*E_fz8 zzuxArM3Qi)H=&r9N@`rbB8WkJvtR z)?MUK+tS+7T8@oj&|KSgDTHHrlf^c(4#q&qsCk2)3H2*Zc=al!N&@sY z{?1o2un+`TwG z_lK_rDKwga938`W|N71XXd9A)m&~V}iPYl!H6Z$P`&Xx3@70e8|r7B-w$$0&G&7*cAO$SEvTKLyflo$MSc88$_x0zzs+Mcw_Ek{u8EY(7Nqs4(9!+Zh_;>UavvuXkpGm`vuX>)xM*=tediUy> z2oJp4bDkx&WTz7w@qju#H*{td%0pCwox2-#(U7+C)y(-v?D03Eh=}d9-(0sO4t#zl zTfX=~n}DWD6Lae}EkBIkP1%BXY&01F@~>{Z)747*PO0dBefLZLviO$z3e6mQ!+Eb^K=Zz)g`v0>pEy_~AcZve0Mb1Kjn`_(dAI z>PMRi7&KG)XV6UJ-vM~Xzk}vK{|uUm{5xnS_s^gi{l5bcz`x^vrlQH={}Zy31oid2 zYf1!Mzca66N#e3!py+oSNr+~5Jy$z=xfG5s-}UO^wh+F01542i3H?~Ob#d6e>V6c;`p#94t9R)B;)v#mxf`vK zAo&vRok0O7OmLjb|(E_>JJuFYG5S&pn41MQsnn+SFPOFY& zTV^*%h_^C(&HXL>mo+D@a{kZGSKl2TKpvEW+4K}FMZn5BcNCM-;CTPFs7sRgYZ0=! z&Wn)@JVaLm^K)ySMV@nY%gfg>xb>f@nY!9@c6+lcJsd1`5WV@R zvj-ns_s8Rg8m$F@e;bG}3%Q#0ec`pE$S zZ;~nVhVnBy!!tfip+g-#b#V)Qp2ACNYHq564>VAT*ER$8)63_MS#8<0dsu}4AXVO;Y>?xQUV)AqZkNz$`r=^$R-2L4AP*ZElw zuEczNa_2xSDSW!B&v)K_y4twy)N12q!`WAU%Yr!8oZd`HK>g8$%Sbl+qRz>+D;Amd zvKZ3Esiws8shvAxS~Ax4#%I16OO{wR$2&Yw^TV3R!?`-{4{8LgJl%{nx6PqN9}(HR z3FpG@Glz}%NL4>C6nvQ6`Fn%qa)cTe{rTv-z1lJ-kMCT)vna6`;qM8FRI9Gw{Oi?U zcm3p%nT(^uK69ymp4SAb$uq@f^^C~~5jNo8u4HS@B_rOYHTQcrfPUa{d=Hf61_MkfMdA$&GZM<3tkk?}Y8DKp#nfrGB4s_qHxue$@%*R}jCvf<77zU5VZ^>=U?RzFsT ztZ%Ba=4egd71%ZYVyqZ>hW>8Cjr{J6*}CB3^j>!6Vc&JZ$`(mOIP4wiXDKIBCFBf< z9-6$i?O>NfmHZ(Ak`7`L^OO6aUdNg&^(oQfO}9;!N4xffkGt*gm6-Q*zxw)~x|RF2 zBR<(lN=lyL0D<^#G8RFfM{2YmL!m&WpWi@KwA2;IeNKmHSIH-sRVPk9vBY_{g2@WDQZ(YY}6XP)U(;bi^i#-aUL_m{dyToPCM zH=KFnZ(V0x+CLf`@k!c_wIj8YZB|%6C4--sbb9VxDzoz`BA2cF=G@3_K%C2N;Di?? z0I0)&i;S4jjqP_mqlC2XKU}1HkEZYIFuw8lXrIw#&0<|8NT-p%-i-7pf@%QTyvl>Z zZsj7DF1IRScLST>{2|xW$$DM72V95$Vh1FESc= z@ezEtp46@2=-+>sV$xq1cyvcHs}#2DAN}}_+8s$9-uT9?{rB!k^ZtrD4#Dq#P=vkf zvkMy#A6`2|lYTl0l^W`qwp|A7HT1`0V3SvwB$w9<^0)p_%EWST-?(#sF*@^Lm?d%4F=g(g`)6t|5X;Zqgy#24xSC0_3EurDK`X#pbGK!$yn`($2NH{-1<>vrJ;E~LcL4EM6zni3n;+v z36|P*rfHTq&ptKuU8v z1ZKj>a7%iEW)=#!e&;WFH9^)!G55%)N!5YmYd{s7l_F@KEn|_{zZtNUemOvXvVPy| zfe7Z2$jyb}5A<9L2bZBr>^BaXuUtGw_u6g+QiC0A3}z^sP1NY-{YFUS|kAG#uH zKW{^D2J=lA{H$kC*0udV+WX3=DBJH{6a{%D6qN=8=?>{I36T(#?(T-6Q4tU&q@_g! zL=fo?$)OR3hM_}p=#I0;_x#s6XRY($tpB&O*6*X^%x$nKNeO=d{yPrymadUQm zDrJUx>FHch|B}pVQLQEVNF)F7s&-*sg2kPyNWs3&ay~n#b!=|pNpBk-H2e8Hd?2Z+ zB@kC)ofD_f#u~3)eM;~>#~q)>agk zhO8apG83_+wA>cw8zZ0N25+39mGU8LjhylI3s!;>Pkan+q|wu9cCAdeyiVcfAF5OT zCCB_naW1Jd<_WssXvhsC&BCGQifT3Dr^?7&reO*dleTL2frz~^Y8Whb%I;Ul;7Aw= z;K1g729prMM6t|D#l+QZUC{@7a1&0`H$rcE#9TeYIh~R)40p&WvF=Lt2>BA>Q8Kni z0JTR>5A$TV=70khzV+yVFjee?VgUF!ErgQPKKS1L1-SyXYYTy=Hy(GWQcsEXWTS`Z0TaD znnJ60>r?+&7}rNt*LFav7}z>;JKFhqEhNCfv^+nyPyQL<`Tc;3jqTFO9p_2frRj0n z+J`1P@d`)sxW`jDL+SP@k;LMUOfw>nzgYhB-ijb34A33# z@4+?z1=TtW+zEW@<-6X9D%9!6%t#~r6l`FchrZ#PDeyo-EgPH5a-^W%$!JT>%=VX- zT$k<>L2+b6IE(=oU=PlG{B%Plg9>h^Eor{fVXEICehPq9-Tk5bq zsfeZJC}`K3;#7hw^$D8Ni5i)bbHYLidj~24>rUkeiCpcwcNJA?jOU0_S~%X;7?$+v z7cNZNSE!ivl93H6KQH!>I(G=+;A7I8gFo`k&V$0t_4MncS6ykt<2Uv~GG?Q)&lu&F z0_2(hAo+d=Ff=r;D>3yXrBtFtEhBrW|G8*h>zG(==kwuo{DZNnX?V1bjE})R`qOh& z$;4jCssUoO@apqoXIy|qZYShtZ-)~fgl503pPn7!7MV84J0q1)WW%i{w-?eGVoEk1 zH*ZoNO;20#m}AqfaeJloTTww*cI^&#?NUo=r;_n||(_0=cIJvwsadK~W^-!QZ*KjG;25Fr? zO}#V^Q{h7s0bMY#FDo6N*uR;DPnV% zg?4_Vwi*irR*CsO!i*0|a*{}YBZM>qmdwoJ$0lPqec*BZ(#1iw4pXXU zjC`C3%4N*KUFlu#ut;e=eMk$;@nsKOw_YkefHj&WtA#GGDbr5>@SQfELlvHd`)rV; zv9a;Tff#S?nsqY&^bmf28)USalo%ZpLS8n(mz;^734mSH+3Wo>FCj0#N{Qpga= zGefCnLPZNlaGTf$AXBmGnSSFVCpp>CVoEFASF+iNYIQYY%U* z#^l^VzVtvl&ZVYuYQ`fR4u`sNU`Kv>xqLITz>+95M+|PHN9GduhkQcQD|B7&}SP+Q?##n**8#GUdwS-bDbksE%e%HC`z7C zgoOveqhnOTQ_c39kxrh0SY7fzZ(X)$lrwRB`=9rgDCKbg_0Y(!jGpK`d_YpZrb*{< zhUqCD$$M{(NAwsq~DMq zE8V(`CBCimYa$oi)8PZkFEqQUxlZ_Oes~V;&8sp0)RxW7rl@SVmuVtQw(jUQfuaa8 zb(PpRybGrR$Z$2#Qf0fn+ohF)}M-|^*P%FY}iChhs++Q z8HkK37A|z!WiZZ)-aO&3To%xaw7Wa;fJ@^ktgD}5dnO~AdwFL+Fv``=^qh!;uU=Z0 zyql~uZ!=}Sd;k3&&G4Q$+!Ki)RuV%L0A`VK&jb5GggWg2H%iQYUz2%P+}Rb0!;w>-JF;`V2d<%jvxYPPs= z86}lkN~Zu9!`46Df0iYl=n3X%pWR;boK(|Lt|lvFpx-%R%^rvdH=w5>F4zn4z0KX* z@aJ8i%w3^HQ=296QSfIJ zBt6~@^}9RY`?ZUa{>q5H(0jWIOgiq8PUV%+;~gnxP#nZ?R|$9Zpdf7qpHb3M zKC`*BVLM(Y0C81PdeLwsxs8GJtP=H-ok=v4xjfk9%X8^FGuy5yMtf{$mwq+dq!@Pw zFtM=8)`T5*5qGrGk~=wm(5P85SR3Am3wp42NsW`Peql9kdk^J;7B$E>F8Jy}J9_iD zcow}iFX(=n>DykYcy^B|Of2vos&ybK#b^{aC9}$LE?D58jMnE2C&?!BkFDhSUjs+J z{)ZVy%7~DkYnqna6g+Vqv*m2SAlxol*=NTwQL3^$)_Pwu&z1+2F%@@kj z4Vy6@Q;X&c6My96HEFA^nFjHaS=0>|7gbj8SV#RW62` zN`7c%7!pH)A^bGMWFt!UE=^*Ic$aF*r`+w(P{QBCJ`p7Y;yA4v8K$(V*|=#AoA(L} zE<;9W&iGLqJTaL3wEcfAzpmLSEs;$h&Q0^0c}I^ooE8p~t2gb}wi7;a@J$%glM)wf zg-;j`x8d8mAs3e_)3OJuQyBWK>?-ayNscLk0*aF(AV?%X%EFvmz8LB5S9c$3<@Y6* zzCO%k?}1K{uF(CN_erxlTe&Zxjm!i_sEt)E&$1y<*nJRlBaDU*LrF;3IJQP@-gbyEfTyYq>LR2rm>K^4{Vh?TJ~2^oU)4N|JA5~hWI z=KS}83lJkK|KSJ(P-E_J`ow%oQc=MyIwy`8YUmb->onXSBeldFknU^k0<@+hW^UrN ziDHN6ak2${-cI-8@!Dvp6bX|*VZh$+=j<7N@Kn5oC0YVqp7Yl_bN*?^*nC@5;85vu zHh+p&G|1Yr)rE()sTd8LWUsPLLdH4<%P1~>goBoYYBIBXlw0U zoy2KP!gIF|tHiafhw<;vwC#aNDrizW=NMZE8$C3K^gO+|(+C~;(|@b1-u#^~vKfkk zkBbC{Vq5N-7FOs-%jJTm$BIYkCy&3RCfMel&zl-ogb*5zFhs|4(Vf>{ZO+8@v%H@x zN6dBB3i^`fKA7pzbBpj>;C{zePX*j~HwGMgzT zg!1PR+Ul%4?KKM-2$&x|kj?-XTe!Z(@4gEPCZxXjq&Nqi=tb(jF-CVjEt$nPv%sS> zDhcz_{on?>P1!=yp-`VZ_n(xl0&8stNhmT!?gp)S&!3-kk!Fu_TutkFHy1DaKyT0e z_|#{5V_&{TWs^V_^*s=B#jUw$HbxGe#P$OD*u_IEZ6jevf?M5*(>GvK7p*3+>Z0SG zZauQ=K96#+ zXmkaZcce851h5->ypiaJ@3x(B`C$rn$-Xl7;hbLGpr=fYe(CN$PbzU z<-UG&$Ruw+QLR@OGCLn#V2i@P9ggF7F0ChVK;n<;QJ`~r-C7F+Bvx$%2Q)n5IvhYo zHJf(VoJy@WhP&Xj4~o5E`{||7TXtn+Dk*O?)929DrFH%#vGjOUO3HpZOIQf+v#qm8 zLC2rtee%f`D~onBy^r+;R0>~`Ey`djk1Dm*T7#3tOh*b@+qqI=cZDWgq*v9AFkW%( zVw%=QAUu|59ntNdXB(_0sT4;v?|meF)oPx+NqapLC2qn^NsLcN|iFE0RG)VCZB>E|2Dj$2Q$jstVv^zpES?gIJDxNSAqDXactm$Ev;j7O`r$fR4&GZFJIJ73dbLdQ|U1FH8}6tvL{ z4FZcfqZ%yga?Mfayx6I3lTs?491mEXfhC43BiUA-cE6dj#xyblm}GV``DGWoK!Da* zmM)viD^A@wQGU<+JywH(O~6>_-?mgdR(XN~;_;ejr7wO0N5WD?$fsvycc%0=y|ypg zg(s+aAVu4dhCQ`&S7}ZL6C(C34Mo`l-h#r* z+*-VL_Rd{nQ8t?Reinzp=KRmhy{^A%iznjKOyx20RL6lFhr;GK3wOuXW#Ek-B@;LM z(MKkGh3w=1S$kF^kmq<3Xiu&xPern}>*|IyohmCCCF*FH;_-T<1I`(JaE#!3|JV;a z3X*DgOm9%1ic>dv2{g7y2EO9KhK|FzVU7>O&+M=<^)XY)oXuTrj@xlj852w1k}x1% z4jsvF9zWoXbuVH@Ub*;(H#S&mD+<>XdR&iADOxD3kv_>mv!U^)LFev<4=j&w8s8;L z&)j17M0h8_ikv@^=$^Mp`J7|u&icEn!x^MUe_9gna5LX+@s2Oj>@c zIDqLCD?Ye+Ui+%fx?empR=Ta}Hyp*YNbJE*RlX?oNHzN;W(_BybD(dtF+YE*&t;*2 z{pXst=-}pN`*79jHQ@ancKfV=MF%Fq$l3T~&6)}huV^_=tIEK zWWtDhTy%DpqzF}p8JbW*wEVUyY0!m(i*k(e1JERB@raE{gHTDhEfATc)wXiXLzBpXdhkW17z-PEJbGd?x*hq^ ztnWHu-J_47oQsTri0Yl3|0)bb)!T~r;z`IwO!<9)p(W@u;h4T$Ir;1J->vN!y6wzR z{0&j=J6%W7Q=s%}xb@~;SyF=)zRYR@Xcl7L1rG~Vv}Ewl`|sy2g&t6>)V}FPy{FH9 z`(-*^C~@s#oT8&k0d;2f2_bfc@iFP%xxPKanUk9LHMD+O^XXG+hw^rNp)GsUau7x? zU8n*fy|9w8S}jcO%`DzKKA3tSx=!Yp^07uZZe#;3v76!KrTfQ85qt-QlW0T%bu307 z%*2sN;~e8I0u&)xbs{>0)h|Ijz{AhQ$unFvf(3+jzTeK3V>lO&q}biHhgN>Lba^zG zkmOm_%tblN(g;0uZ|Q`7oz4WSiB5t*Kfdvg;0sG1C&G_d&>uIp82i&Q+30D*ca4}K zR{Y_ndQLX&!9$kzZN=+^pPrfW+6-Se5n*BfZgQ|B4RT?fXx|e%wab9-;)TwRNa0YM zciL(|etUr@ZK258OoAnBd=nM7xcrl0C)C4k&%M4>2}v5{_Py<{pdK&#yTg0r7A zH^kUvPBD?i`jd06Jt#*r0@WXTt@z`ZsspYPghk3UW_ml4g#<9|xNP;%VM>Gtr-^$p zHTj5|<^_N5z3Y%Js4v=;D2&LklYKD!#XVD5AQ*3-xm8ih3c^VXDlYMsVqx~zI{mL8 z94-s`e!8v51O)u#{*;-@nJ|VHZ{fT8&&4ulA1)j)zGa1arAC>ER24dH%x+T>GIGar8vt`NZ9o59wI(s+ zC5hwI7?w`^iRH#RV{4x2%m~18i%j_3`Fwc%>B&u!&<@LF4PNUZCRd*wcTIvoB=G5| z7%P4%MsATP&Ge~`wuUu(j=!PJ)1)oiVpCVHjE3&+TKkxwVW%^ekOig@2a5a+VL>6$ zU0d7058-BcNom&X73&QvmV#<>tF0v(9Vgr+J&emzHYQt$!iXvd-ub=)j()DMhrG2&7|XMM z_E^lg_`G(Wl}NapfuA2Ot+h-C{3n(QgsvM{ncLU5fnxH*O7sJHTm4W6;Gem@Obi@C!ss?%BmpJs2Y5qWq&`-?<~bvq!Gghc~>& z*M!U0exP}ZA|ka2fmrvabO``z5{xrIai+?i!H<_-3qv0?-)4-A%UL;ZxrD&6-~4kK zu0C#8=c|m6j4$R1@#=xVM{O#EjhQDsty*X|^BHJzz;>n_4nqf1L^=MDx!w6vD3R0Q zzTEL7wQt8>?WweLaZ0kp{bG|T=Xv>fejRkDb8g!JY9eAJ(So(1Mt6ksW&#=q9Rpt3 ztENtlaYvv$ZxFjE9C^|=0F7t=5mv4`yFkYvd$HD~9VMWSni)zU7yNnuriROojvume(UNhVJUhkFPeDLY+whX%RTv95vv6L!@-`?*-OCkw9Ju_w0&UfpJ0xzCDO9sVp1)3OIM!VL_Stwy$rlq_fg z6_~=y0i^`&2trO`2W>J>`oGKK9zXo1=M;`7C&lQ#=18ShL-MMtL?u!D1kX&N>cV{o z4f^3>|E+kbxVp!K)^!mEDN)EC8Mih839|LxVb}K{q&Tak4@RqXE$xKi{`Q&{KJ?(s zaHXidno=4FUv&A4__&QzZj&)jNHrfdIeGJbmC}4N*cDA*H^fO>H1Wo8dR}=|s(U8V z$)wkWS!N*npis3HHD<$GZtN8W8tCxReCazWT;l~*ti_(5%}xP)2L%OVQBeXJKI3}> zh;sWioAYUp8dWUbT?<17HQfOlfw0G9X4USrB(GSXtn2|5Fg->BqM&$;Vrd$%&tUe& z>vIy%x3Q@yE7#z?61Ve-+%lUm?34VYP3K}W-uMN|6n~0G5?HozWo*|~ln35jzVtSeNt+Px(2PLxo3?8ZI%*y-|xF_BjJ<#y>;cKfUb;D_yl3S~43ihCO zonvOU{gPvN@HIXEa;i_~ODae0Cg^L=PY%_kIJjYIuTm@;G*qWFC+P{#J%9P3nihH> z4Gn*OOr1Z&waS^K-C>^tibu(z)Fn-B?C<|}FnWfVT)T8#dMetDj$yp#i_h#_ZLdc6 zTRD(3ss+#tpBcgKPNA@yjy!zx{Or~bjw7KW%%a87*GiWTu;h7xa9`W49o&tG-`k3l zcJ$mPKJ@%lr~kREC|q7kQcBT`4=Xp;?1ydd6)R5^CDnhS0`tX}9&TvbevlK}Z?-rU z>5YWJtU=x087Ht0KSv380THDufZYaq7~rn0Rz`PTR*Z(N_ZIp}`*vTnT*lPRaU!i- zZwbw3f?EO15wrE>)xpGj$|}BGS_mIvzq*!jor&qOEb`%<%`*jCf!IYEj-*;z#z=o? z2F40cP-15&tTwFce%kJaH}cJ{BCP88X@@D>l+r6`rV>R@@R-7C?(>pw(lC>IiE@`bsH1wg4>KJccIJf?w^hBH*O>hyvOq%Kk4 zx@Z#-==(q`8s43Zbvr6P3%lHD2P%D@X+z|T{#+)uN*uX>5Ow}wn2iEAn8VT#R#B_7 zcFi+r=bGZw=4CRmDp8O0v+8FAgWYUnsu_2}kDTHCyC!q;#_FqgWw?38e!-N4gMBv% z$Q4GYfiON8u|OeBF>XxYa)eHF#cKuOHbZ{a(o|SU5ZJ6@C4nN^2#d0$Owg>$DbhBpt>>E+r! z9Pl|1lCV>AG-66)abF2*EnpU`XzOBm8p4JoKE7aON*2EJ0GwvZ-ct4*icosGl70NP zIxBhN_?TIBWcBt~-~j+!U;&zE%GrQF9u-fr`1B`035~gbO2pUQlYI}*rg{&m!EHKV z>-GNo$PP>#v<96jk#lrbViN$!q2T*Vk13}HpDJeL+nOz{Q(q|g#E@v(E!L2kE$jIc zulaCr9ggZ3nyG+UHB5X5Gjy_~wn1FtV0;z^wonpi$0B>4iD4~gWhT27 zNA2ud8^7cQ73BcyJOOfJz}Dma{a@|T9|9@<*qEMar9t+fwaUPa>`5Fk7y%QjrAwY6 zdd9jO1CQ1AQ<)#N$>9|m6 zhK2pr+2bHO&~n$L+Jd?UoP4{gL`$=$P_H0?HxteM_)byvfw6o z7my^99~c^3QJ7+ASg~#_SB0L$Xd4F$aV^Xld-qA1-!B;wc#|A-STqXc0-g%I%yb*v zOE(+ilDcDTQf@U^nnBj+_NXbp%&Jj*>Ht{}Nh02!zEw%FyW@ELyD;k-4!||A27<_H zZycTHaKfZ9QWm{Jy`o%mWoc0RYn^r1uQ^V${s0muP;*|-et!eq)e7<88<`pF0^=cN z!DH<9^jQO=@-};q`6n#50;Z=Y<-mF@h-!P|V9M_fRV>E1PqGF4 za_tZw%H3VSCLdWxH#V-GPt*NwIaugAqq2W;5_x``diAbvX{fLz@`K$DfmBKrWA9#WdilWjjuEl$YB z{9mGy<^K6-;4;bi4XgfKxDp~oae1GD%G$_$lDF=2ikp~}X@=kT^n@}5(oDU0*Sl=Y zL}k1hR-;*)Ie&Ph)-!NmKqvS1;S7v-0u$qgKe~Q|e<|=hED5kt7Xl$V>^PD6?VGlL zlVKACJ8rId%K2K*$1h+#j z9+ByD5ttkfo3S=;l2cZqb_{Z=qtak}9|Q)WBZ2WcHhzBbUz_*BlxmC_z;rhI&7X1@xJy+scZC*X&e1lOpIzs}XIL3YgC5?g1JCjanuGA@kYdA=n}YB~f6hz|zE3pp zaF6M4;~kB1YgoS+wEc{w9QA!Fy`>x%bOaCl`-KwAAK&4*Gj&VCPSDSre8WQoB!5V> zv*ZIg`7URe~#Jn0^bj5K_NzsXcY`4jje zcIpN1vr{2OhopSF-90K53M@}lu3zsTbG+#xy13(Bx$chN!lf;ewlRQFEa}f#iJm+ghf0O5}*y7TRUce)ed8Nku$8##=PCk`-+f+ zZIsEG_$40tPGHd%kdCCUdv1dc2U?*6`3q&u@waS02@4sVlowKD?!Iff17i`nF&{U` zwp_ngfK8fmcc&NZ%235zmzVB>8xfhVk#d4c?vFSgXcsh(QM4@xlN|saXmPqaB@-Q&OPu_ zPxRBj?$J-&WuKt*&UB0Fxk>_f4{Ty#W}icP!s}+Qbyx9%)d}lMWX+-%&9s;Db;4Sq zt)%K_2#Je&`W@m^U%PsZ(}7P6EN4;Cg3ke&(zl1S8Z**`0rdwwf#8bST2=Qua4hkF zJvn=Z&>Ow5L9z$`2`$o>ys{X8IJ4yJb@6d7DB1ppOF%jXSRMJ|!b;_dXGhI<8rlT5 z66JO|F4mtr^yDH9dTTGTrCzzn!kRq@bL}XJt|r6qzR+$yN;|VnbZ$li)``7E2>WxL zumt{UILs41w-5)Y2JB8tOCESefrEk;F$3T&yeopO1hO-h+8HV6)%+`#EbqA4N4-9k z1FjV8TpC|`u9W90W9`;8cimrDfaGyaIvIZO>R1QI=Y%9V!=b6`qShelIcQ$w-9w(M z$95H7Nvj(Ns+*^W&YBtQk;7eS{@k%DuQ)M5)R(}7{a8%l&4s&gmhl}6ZVKCqyEZk@ zLijykB?{UX^-Y--m1sqH1aGA*s0rREj~7UDkaBlQ!$Hq+D%$i$mbo@W1bGQ6cww}v zh508;;&Kne+cL8!f<(`B3!j$=Rv6KSA@vQfWwZ|RbsugLqrs^!cm!@Imt2VO=m7`^k{rKXI9=`jmNQ(hQhOW=;Bh~h=6_G8QYx=+QXyYnS`WF%qPQWt&?wPE?ui>6EML@xZ z*-`~s&#SKr-ZK^yY(|IwI}ZtiL<-Pn!v>%P7zKtv7|4ZxQ>a{r!j_zim3nX!$OIiSSJB!5<)JsnN=r;gFsfOlv-1BsI%=dU)lx3c=N@ zvZ5atB1aB6;Oe>(-TXgrcoKk(gLdOe&|B`fj!&JG>U^}=VRcknAPloaCyq@EOWHjA zJ9Bw_wu-KMdj2_%|J00jd*7S3uVl)G3AZlY9@#rzeMVjM{(Xz8a52SbC3n!`k-qL^ z{jX!fvBH<0Cw|&G6J{cno%<`i=%nOF=O)!wck$x1$Bey1+K<<6b9INg`+Bw^r|+dZ z^NmS%^_WNWw7TOpJn}^1SmpThI~Df8+U|7qRjD?+4^Q_E6P-KYjrYQN{Ti&;Pvm@A0tz-GKbN z%m2m`wmutc{#zUzTv^%24_?4Awb+3FpKtiji~p|y5rt!h|C0j#`@8-Bnmzx&+U@r* bd*OP&8Bf>y{*nOJ0*>qxg~z!M_22vt=xT;y literal 0 HcmV?d00001 diff --git a/src/server/ui/css/errorstyle.css b/src/server/ui/css/errorstyle.css new file mode 100644 index 0000000..12e0f45 --- /dev/null +++ b/src/server/ui/css/errorstyle.css @@ -0,0 +1,54 @@ +/* +* myevent - errorstyle.css +* +* Created by Janis Hutz 03/11/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +html { + height: 98%; +} + +body { + background-color: lightgray; + font-family: monospace; + height: 100%; +} + +.content { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + height: 100%; + width: 100%; +} + +.code { + font-size: 20vw; + margin: 0; + padding: 0; +} + +.message { + font-size: 1.5vw; +} + +.button { + text-decoration: none; + background-color: gray; + font-style: italic; + font-size: 1vw; + color: white; + padding: 20px; + border-radius: 30px; + transition: 1s; +} + +.button:hover { + transition: ease-in-out 0.2s; + background-color: black; + border-radius: 5px; +} diff --git a/src/server/ui/html/de/index.html b/src/server/ui/html/de/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/server/ui/html/en/errorResponses/404.html b/src/server/ui/html/en/errorResponses/404.html new file mode 100644 index 0000000..b264312 --- /dev/null +++ b/src/server/ui/html/en/errorResponses/404.html @@ -0,0 +1,17 @@ + + + + + + + 404 - Not found + + + +
+

404

+

The page you are looking for was not found on the server!

+ Back to the homepage +
+ + \ No newline at end of file diff --git a/src/server/ui/html/en/index.html b/src/server/ui/html/en/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/server/ui/html/index.html b/src/server/ui/html/index.html index e69de29..4560cfd 100644 --- a/src/server/ui/html/index.html +++ b/src/server/ui/html/index.html @@ -0,0 +1,61 @@ + + + + + + + myevent + + + + +
+ +
+

Welcome to myevent!

+

Thank you for installing and using myevent! Let's get started by setting it up! First plan of action is to log in to the admin panel where you can replace this page here with your own landing page!

+ To the admin panel +
+
+ + \ No newline at end of file