From bcf0f38eca04c2c08f1675b852a47fd7d5ae532f Mon Sep 17 00:00:00 2001 From: Manax <paul.ripault.etu@univ-lille.fr> Date: Mon, 8 Mar 2021 17:29:19 +0100 Subject: [PATCH] =?UTF-8?q?c'est=20presque=20=C3=A7a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webserver/Makefile | 125 ++++++++++++++++++++--------------------- webserver/client.c | 21 +++++-- webserver/client.o | Bin 12288 -> 12936 bytes webserver/http_parse.o | Bin 7344 -> 7328 bytes webserver/main.o | Bin 10832 -> 10816 bytes webserver/pawnee | Bin 30880 -> 30928 bytes webserver/socket.o | Bin 9976 -> 9960 bytes 7 files changed, 75 insertions(+), 71 deletions(-) diff --git a/webserver/Makefile b/webserver/Makefile index f33aa73..abfe81b 100644 --- a/webserver/Makefile +++ b/webserver/Makefile @@ -1,65 +1,60 @@ -# Ces variables servent à préciser le compilateur que l'on veut utiliser -# ainsi que les paramètres de compilation -WRAPPER=$(if $(shell which clang), clang, gcc) -CC=$(WRAPPER) -LD=$(WRAPPER) -CFLAGS=-Wall -W -Werror -g -I../../parselib -LDFLAGS=-lpthread -lrt -L../../parselib -lhttp_parse - -# Le nom de l'exécutable à fabriquer -EXE=pawnee - -# Les variables HEADERS, CFILES et OBJS vont contenir respectivement -# la listes des fichiers .h, .c et le nom des fichiers .o à fabriquer -# On utilise la directive particulière \$(wildcard ...) qui permet -# de construire automatiquement une liste de fichiers -HEADERS=$(wildcard *.h) -CFILES=$(wildcard *.c) -# Cette construction de variable veut dire: remplacer la chaine ".c" par -# ".o" dans la variable CFILES -# Ceci nous permet de construire la liste des fichiers .o à fabriquer -OBJS=$(CFILES:.c=.o) - -# Même utilisation que précédemment. On précise les règles qui -# ne fabrique pas de fichier du nom de leur cible -.PHONY: all clean mrproper - -# La règle par défaut déclenche la fabrication de l'exécutable -# par dépendance -all: alldeps $(EXE) - -.PHONY: alldeps -alldeps: - make -C ../../parselib - -# Cette règle permet de construire l'exécutable. Elle dépend des fichiers -# .o et effectue l'édition de lien. Rien de nouveau ici -$(EXE): $(OBJS) - $(LD) $^ $(LDFLAGS) -o $@ - -# Cette règle permet de construire automatiquement les règles -# de compilation pour chacun des fichiers .c -# l'option -MM de gcc analyse un fichier .c et -# affiche sur sa sortie standard une règle compatible -# make pour le compiler. -# Ceci permet d'ajouter automatiquement les fichiers .h aux dépendances -# des fichiers .o à construire. Ainsi, en modifiant un fichier .h -# tous les fichiers .c qui incluent ce fichier sont recompilés -# Après votre première compilation, regardez le contenu du fichier -# makefile.dep généré afin de comprendre exactement de quoi il retourne. -makefile.dep: $(CFILES) $(HEADERS) - $(CC) $(CFLAGS) -MM $(CFILES) > $@ - -# Cette règle efface le fichier de dépendances et les fichiers .o -clean: - $(RM) $(OBJS) makefile.dep - -# Cette règle effectue la précédente et efface en plus l'exécutable -mrproper: clean - $(RM) $(EXE) - -# On inclue le fichier de dépendance qui va contenir les règles -# de construction des fichiers .o -# S'il n'existe pas, make invoque automatiquement la règle -# qui l'a pour cible -include makefile.dep +# Ces variables servent à préciser le compilateur que l'on veut utiliser +# ainsi que les paramètres de compilation +CC=gcc +LD=gcc +CFLAGS=-Wall -W -Werror -g +LDFLAGS= -g -pthread + +# Le nom de l'exécutable à fabriquer +EXE=pawnee + +# Les variables HEADERS, CFILES et OBJS vont contenir respectivement +# la listes des fichiers .h, .c et le nom des fichiers .o à fabriquer +# On utilise la directive particulière \$(wildcard ...) qui permet +# de construire automatiquement une liste de fichiers +HEADERS=$(wildcard *.h) +CFILES=$(wildcard *.c) +# Cette construction de variable veut dire : remplacer la chaine ".c" par +# ".o" dans la variable CFILES +# Ceci nous permet de construire la liste des fichiers .o à fabriquer +OBJS=$(CFILES:.c=.o) + +# Même utilisation que précédemment. On précise les règles qui +# ne fabrique pas de fichier du nom de leur cible +.PHONY: all clean mrproper + +# La règle par défaut déclenche la fabrication de l'exécutable +# par dépendance +all: $(EXE) + +# Cette règle permet de construire l'exécutable. Elle dépend des fichiers +# .o et effectue l'édition de lien. Rien de nouveau ici +$(EXE): $(OBJS) + $(LD) $^ $(LDFLAGS) -o $@ + +# Cette règle permet de construire automatiquement les règles +# de compilation pour chacun des fichiers .c +# l'option -MM de gcc analyse un fichier .c et +# affiche sur sa sortie standard une règle compatible +# make pour le compiler. +# Ceci permet d'ajouter automatiquement les fichiers .h aux dépendances +# des fichiers .o à construire. Ainsi, en modifiant un fichier .h +# tous les fichiers .c qui incluent ce fichier sont recompilés +# Après votre première compilation, regardez le contenu du fichier +# makefile.dep généré afin de comprendre exactement de quoi il retourne. +makefile.dep: $(CFILES) $(HEADERS) + $(CC) -MM $(CFILES) > $@ + +# Cette règle efface le fichier de dépendances et les fichiers .o +clean: + $(RM) $(OBJS) makefile.dep + +# Cette règle effectue la précédente et efface en plus l'exécutable +mrproper: clean + $(RM) $(EXE) + +# On inclue le fichier de dépendance qui va contenir les règles +# de construction des fichiers .o +# S'il n'existe pas, make invoque automatiquement la règle +# qui l'a pour cible +include makefile.dep diff --git a/webserver/client.c b/webserver/client.c index 3003183..86a9585 100644 --- a/webserver/client.c +++ b/webserver/client.c @@ -11,7 +11,9 @@ char* rewrite_target(char *target){ char* ret = strchr(target, '?'); char* rep =""; - strncpy(rep,target,atoi(ret)-1); + if (ret!= NULL){ + strncpy(rep,target,atoi(ret)-1); + } return rep; } @@ -49,12 +51,14 @@ void send_status(FILE *client, int code, const char *reason_phrase){ } void send_response(FILE *client, int code, const char *reason_phrase, const char *message_body){ + fprintf(client, "entree dans send_response\n"); send_status(client,code,reason_phrase); //transmet la réponse complète (la suite) fprintf(client,"Content-Lenght: %u\r\n",(unsigned int)strlen(message_body)); fprintf(client,"\r\n"); fprintf(client,"%s\r\n",message_body); - fflush(client); + fprintf(client, "sortie de send_response\n"); + fflush(client); } @@ -70,9 +74,12 @@ int traitementClient(int socket_client){ perror("Error opening file"); exit(1); } + + //fprintf(fd,"pas d'erreurs d'ouverture\n"); fgets_or_exit(str,8000,fd); int parse_ret = parse_http_request(str,&request); skip_headers(fd); + fprintf(fd, "avant if parse_ret\n"); if (parse_ret == -1) { if (request.method == HTTP_UNSUPPORTED){ send_response(fd, 405, "Method Not Allowed", "Method Not Allowed"); @@ -81,14 +88,16 @@ int traitementClient(int socket_client){ } }else if (strcmp(request.target, "/") == 0){ send_response(fd, 200, "OK", motd); + fprintf(fd, "fin du else-if\n"); }else{ send_response(fd, 404, "Not Found", "Not Found"); } + fflush(fd); + fprintf(fd, "après if parse_ret\n"); //partie 7 - char* absolute_path = rewrite_target(request.target); - fprintf(fd,"test - - - - - - - - \n%s",absolute_path); - - + fprintf(fd, "avant rewrite\n"); + char* absolute_path = rewrite_target(request.target); + fprintf(fd,"test - - - - - - - - %s\n",absolute_path); fclose(fd); return 0; } diff --git a/webserver/client.o b/webserver/client.o index d124f3cc86bedbf2cde2f5b4f691d68f3f19bcd1..066d5262986b302f03094657c64a67905db02f24 100644 GIT binary patch delta 4371 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 delta 3827 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 diff --git a/webserver/http_parse.o b/webserver/http_parse.o index 201d5634e46c81fa7db63169a55f2cd59abb0c03..6d49f80407ace1f2b89d7c6a08a031e63df2bcf6 100644 GIT binary patch delta 1106 zcmdmBxxjLQ24liTO(V|9J)Gex`WgATsrtEzd5IPJ1x5Mk@x_(J`ne{C28PM{1&Kw) zsX3WRn;&tmV%j``M}e8~`Q(lK;*#o23}7G%CK(vG7$7)*@<V=i$pomV4U~q-icWSE z5SQ#_gb2q#D7fC0lM4mJCGDWHg=n(UlNSnzOKL)8>(OMxCSMc~m;4JA?S|4Yd+jDO z3W`gbK;66&O;%{Kp`f_rBB<zLC=JuwFga0BTyj5D^e&W!$+k?MC@3zO0Cm-OG}$SW z4+@G)dO$@5p{ihdS5E#YsL!~2vZ9c<WCGM}u4rnkCkG0NOKyXj5RWG7Hn~wqT=FVZ zZzY;++2oBv`iyLo9}0;}u7Rpqi>4-QvY@cIB+T8%(PYynI|_?SnnFb%LTQ-$*G(=I z7MI)!75xpRVX|i?FBBG+gqbJ`wI3#1H~FHlxMV(5j{%zO-N}q1;*vtl5O2Gn$$C#V z6cLv^2i04KCL1(4QAAv_04ll|O2h2so;*=ReDVho4#C}MGDedRiik^|go-|f(lC8D zCw~+Xms|j~^EaC8+sTTe;*tsw=Q2n_-3`<GW^$mYxa1?K9%D4wrIQ;)#U=kiW#iCf zCr#ccs?T_9@<UN^$qK0L^U%~Roh&FOE~yT+eGi(f?_@_YaYl*Fkz(r^882++l(1)H zteEU6xt}p$GN)8MW5eW5DR)NM$rq)}851URO4~El@=Ok77n__QtpSphwr89%`J}Wx b<BrLkGWLuOlRahZIX8$wY}+t7P(mI6`;e1o delta 1122 zcmZ2rxxsRR24lfSO(RYN{fzwFRQ>eCq|}lkeW%i*)WlN#fTH~L_~Odq_{1{(ToXeB z!({#P)TH9nqO#PY$x)mUo3C@OWZGQAqr%MidGbPjaY<t)1~3o>lMD=83=k|a`69o& z<V2{b4U~q-Do!>O5SN_E2oa8fP;k9lCnpMsOL{?N3(;iNCr=a*mo$aS)}zU`Pd+Fh zF3Aa%?M9RJn*32fT+#vR=9Or&a+4JW#U<B4MGr%1n45bh2MUTyo`#Cvh0-wD36mQI z#U*o~_I^i`T`+m0ptxiuR8$bE3Z{4K<cEU#jK?Pn3W-bRK;7nwrY2{yqma1dA*c!Q zXtF_*3x&ibA42t3qRBQ*UMQr`C^Y$^khtUysG7BCYLX^13X4lJLq(56X_yOVOg0o2 zmvn@RK7`UR*<F(pg~cV0LPdW=X_)Md$rFXeB`-roMWOb?WV<FG6c(4PhRPbC$-bQY zQCM73jv3-@7c|-M$%-Q4lDD9G%g|)wCI^a$OV&U|7ei^7z2cJ_MZ_gPLJVfujV7Bs zd83H9<W;EXV<-*N`*iX{5pl^iP<wx)$^M)yC@L-)2sK#}>UNmkACnzL#U<ZC^%$ec zZk${wDlW+d6^(<^Fun68FBH{hd^Y)_sJLVc)b@F3YBo-06cd+>fZDzXO*V3}p_n+M z=Vni_^^A-UHvbg2XJqV{Y$>^)F=6sg$$G{KlPjg%88s&#lrm?`nfz1Ao~e^(av;0d q<N#?6kfgLd<BG{UrR^C{O#Uft&p2VSrHno20WpYe8zwtS$O8a3;+xL^ diff --git a/webserver/main.o b/webserver/main.o index 069932ca1a8d105bc2eeebc17a2c1ee144b6ed54..43a7c9df27260246aae85e79fc077fbb8043f425 100644 GIT binary patch delta 2014 zcmcZ*av)@a1|!2pO*3B3_~Oj;w8YY!lFj|Rri`1<@%b{T>SyHVrt0S=<|S6>7Zl~E z#}`)?>*tyn8W<+)m!~Ebrxul^7HyUi<Ye5eA@qWkQE0NDgt)2$GXofif=LDjE(QqR z0~MD9iBAqx6P}zPp&?lZ;xRBV*g$ERYQM<~CB*AhnIOVG5DISAEk=kyFoc4O|A(rN zLKFW3RiB6^UIOLkLTQ-odm;SE=8}SvsZhNQ5HYx2K9dtA#U)=reKiA3wsi7DNpZ$m zlUGXWOHPNn>KvLH>&YJ_#U-~vMPEQ^m>W7KD@ut=`a$(FL0tipm7g3aB`!G`Dk=k| zVX`YGH%f_1rbFFkh9=84d83rLWIfd605sW<$q%K(B|kv*W}(TZPZpFGm;4NMYYUp} z^2v_U;*8ysBc=5vk3i*iKxvrU@+L2o7MC<(ff#WKP1bhuMQL%#2&m{AC=JuwI+;;M zoY8r*q>R4geyIBupfpU4z~n?3ammY2Q7b47lYKOKqKvp?0#q~<O2cIHCLfd$m)r(* zTPB*U(d3UZ;*!Ep+1Y5a>n1D8ic2y;Wlx~VE}a}GD=z5__0Iz|*|^D#vf`XcP`xsf z8Rf($?~oPnJO~wWgT@BToo}G}gVDr`q3Yw&#OF*FloOY%g~~Rf$tFy8loOZKg~~2P zlXah5C?_rnOP%}CWGyEzloOXsfQmkb(lB@GPQEB7E@=t%H9OP>m~6siMtOw2ifFPI zCmYI(OBz7+TBFIHn4Bmt?l~1I8V{vmCf|l6E`~BR@m)~Un$W}-O+F|u?#Tg_U5Y0A z85-J~(8OJ!wwy#0@1CrvATG%P)%6xlcFW{I1#!tLs9o%=5JO-tUo^Q<LELi^RIe7A z>?4R`1~WAAIH+lUXyS7wKU5HxG=%C(LzCS&Sx`}2QUj`Y2Ab@O$&QNRlCV6m2~D<n za-pJly*t#MXV7FXK+U{`CcXw57SGVc-$K>%utA&(3k_MQxCEMbFGSg7b|pc{TTnLy zqp6uZ*-%Mb@(ENn7fp8c<U}QL$$DsdU4kZCG<l+uxa1#*Eer?HWW6RIR1%lugPME> zO}2aTM<sp6Ws?<^^(9|G-7m}zF$(6d=*gMN?u<U0H!6Q;WIVBXrK&w6<BiEL)%G(U zn7mTGp6P?~WGxLh#xs)(HO!fQ2~J+6VaFscG<l(r*d$F2Mv2Lqn)ZwwlQT8#87E9$ YscFw>F!`mXJ!gOl#Fh<{KdQ<D007(GUH||9 delta 2028 zcmX>Qav@}b2BW}6O*38t{fzwFRQ>eCq|}lkeW%i*)WlN#fTH~L_~Odq_{1{(ToXeB z!({#P)TH9nqO#PY%^AF=jO@jk>1m0jIh$wk1u$(E5aeKFW?*30EGG1dmC<=JqlCC> zAxMCMfkBi30=O6$7(mz%!ex*I(UTq3geM0`Xh<#v@fa8wY@jqqB?#9~o+u$+AI1a` z_JL4fb3n4(Q1M_iaRaE`QE1}2Q1yvu;<KUrTqq4P8-$-g_><Ko1tohJA)E#X1$RUE z<UmPr$<I(5XQ0V0o7^ZV&UkS0Oi6vo6HwdFp{Yrl{7_O{@-9^L1(XKa55kit3rdMg z)<g9&L0tio0b#Alj#A>1N1&oIP#Poy!sjO!N{LI(fV#~LO;&L7LMd^{4N#K<&}8E$ zUz8G;{0-Hcg(llKnNeC?QVJ^C0;NHAg7A&WhSK7UdnS8I>q~xx%I$#CAbAj;KY60G zxTHM`#JiW!Wb-B;lopq)hl;*|(ja{xyk_!8X>mrs$(%C!k{_V%SAfzWc@Q?A94I3$ z$pUr16`JhZ$&E7Nk`tk#p->v64}>cxZ<G<2JP37LCYo&W<cBiil5$Yl*=Vx&Ckx7o zOL9YHVQ~&J6@)iTc9a#DgoWk<G`+2p3uVP6bD?@=pl%201L1#@7s`rTo`K4`p~=cZ z`N2>cqyvQOpz7l%Pm~p(%poTr*#Q-4L{m9&vZ0)~qy<!VDVl7><U~1fNq%Td>_?ML zm^@KVTyi2*^f8nM*$=`NlMl*?OC~_|vO{eE$$;?0$sdvIRYa5hF<DVwTrwQ0*BVXs z{p3J-anA)%(Re5gG8KejxupzE{590HCN%NOlQ+tXd+I}Fm!iq4Kz+3dO*|Wtgc(kv ziSL;#s30zB360~oXtGZyJ1U4vu7=vh&I&OE<Z2K;Ik`|l-19J0uNImtCsdains_Tz z+z(BB`Q(cV;*wLLvT10tk0vuJic9)KWoMwt-kfZxC@wh*>XJ=pvRfu6DvH-vKxNOM z$udI4Z=s2Ahla&7G;ukodLA~^&~SmeO#)4P3q;xE?}~zw+|bwwMpJWSvZ9i>q$pH2 z7ftrg<Ul2H$qi81C1|pXCpRjIODaQcKY%7%IC-OzxTHPQ&1cYL_e_4Mq|bPLvY@iQ zq$E_0FgwJ-pcn?>p2?BQ?u^Bo7b<^eWW2F?rm8(7<BQ2R)%G)9m^@Rxo{2$avXq7! z<Mqjj8s<!_LX&4{*fA*yO`a$uHu-~w2BXGgNlkl3iOG?g_KXWA&(ySMbeMco)1EUy M1!B#H$q!ZK0TWZ<1poj5 diff --git a/webserver/pawnee b/webserver/pawnee index c3585590cefcc0ba0ce2a1c494f02c734cccb5cc..31cf41fdf96cf65c5704e25bfb80e00d06621ed6 100755 GIT binary patch delta 8118 zcmZ4Rk@3Pu#t9ls0tFMbmT@L<Gk`(DWI;yZiEm`MWO=}R23elTLX3Kn3ak(=jAjsk z@EIphWR&OBV21DvCO0yQE4|Q#@Lt%W(jOQh{11$icQN`2DJVg>2zs&<Q=H-rsO}q3 z-7s2%38GwM@=T^^kv)DtFO|;bJ!>a7X=jefg310iv2v3+m>n2rPEKSNXKbFF$gDp( zA(>_J6lNX9>tL}9U~&hTtOb+rz~nbDDK%M<MVxUHm@PbcA*(*)R}g!0LJ7;{6lM`7 z3&zR(iK0vlg&<MJ)nM{3m^?k%kyU^44;G2Z9jp?JFTr9JVDi!Ai>&&L%fRd`Fv&96 zkgaO+QMRj-f8_8_p2_Y$`5wEJrVcb<7#SED5*Qd@Vare|mC4D#z{CKPzcE>nL!9x! zW=oFa?2`kSI5r6|F$r*SF)(=a@-F5CQMUS=n}viFm>8WW8;iK{H`o4PC{gw3cKzYe zdHe<I<VFz*#-7QuM092T{r>;oqto?=2UrOkNXcui{UCR|*gW~M$a227AY(g^?_gkH zV0aNXd4{Nb2*{L!yQCNx81{h_di2`v=VD-ZaUEn-cj$|5-!C9zI?sXZYWn~Gzel(0 z0}y-KumAr$4}s)7dQF!joBQV1<aeTC_0vJd)I*GU09Dt9tZwr!uxUR$IuGuWK(ap# zq|ptm5#+ezFIN5f|9`^C!=WCXPdysnG$=DLbnflB^Z&m`FKaN^K-VALtq=jzXf6hZ z&f_np|FQ%J#Rre(+7Aq+VjjJ=t{`JK{QCbN5+K*WwugT3=xtr_;Q#-94)P2PAb*|s zJ9)mCczq`$14F0l8;@?+4<J#6e_*$M0J&8d$*mtb85mx4{`&vFx%SQf(tz&P33vYg zZ~nnpssh&8%liZzgQ9mi85s6WWrSGa_wWDzmva~x7@%q{L)6>=shI##Q~yHi-~a!w zt37(bCVDg<;PL1+Jq%LVdHjXv&;S2h50u(@bcg-`o6&jEqgQk}NdF0tv7N_Xy#9-D zFh7!mTR{%K`Sbt(*YaSUy}ZpJLwiMQK)R<uY=5z~9<KfP3z?q?qePI53I!R}k0i;5 zB<Ty1ECNX)`JnUoi{GGl?R0(M(H#m(6dyc#O$|W~fF;WQA7IPaz@g4Od7HQz7Y{`K z#gy-ppNShXUHm>-QbLny+4spV5?)NVzD=GWp}}R!0SVe2-zFcD_+n+t&cFak<QCul z|9>sk?fR$lm`AUz8C+c9+yDQ&APL?yLXCl8|NsC0|G!xEZSn_66%mnd|Nnb5|M*|Z z<I!vTjg5ifMbo#*8dCC%jFUa2<b@2sg5nq=yBZ{GFu77n)1#ja;)cAh;MfuN=(TMD z$)5Z2|Njmx1_p-L3NK7RIjGmR5+uIu%m4rTC&)7}yfFO!|3BEdClB+>yG(v3B_<}I z#J~{h(W?uhgMBogdNjY`c%i&mN?MI&lEP%k)Vz|S)KrC(#JpmK;?%s9_@dO}g8aPV z)X5VS<i(5gi%K$66;e{s<kl$|3MZB&=9MU9rYRI878R$)7p0bPO}?jK7?GBlr;t*r zkeXARs+*a{#o(7;qTrTanwP?mSWt9$MKP)t28c05spUnPC8=BtC8@<F3c6qjCUh0R zlxi{8WMjqB`Y8+y41%CS=iUGR4;UC24!r;WpM#Ns;llg>|2Hr&Fl_zs|Gxqw1B1?| z|Nk8r85p`g{r{i9$iQ&^)Bpbsj0_B1pa1_~z{tQ5@cIA$1B?s|t)Kt@f56DV5c%c* ze+DK7hLmsr|0^&tFu4Et|KEX$fnm{)|Nj%17#Ng){{P>=#30Nt;phMV3z!%fKK%Uu z{{^_tnQW${#3(U2Qc0gtVsfXFy3~eu|NnD<+z7=o3=9l03=9mt?<b#9l2d&0;s5_Q zkdz~zKpT@YFB?-N4?70~14!8%1_lPD$(+jajP8>)mE{?eCVMK&Gj)8NoTV)1H235G z|5s2no`-9+VPs$k{Ph1nH^@magPGZwKng$x$1pN5*nF9MN?DHa|Kyj-@=R9WCUdFC zG0vW>sUpw#VzQ@-J1fKY|Nj{`FH||qG5Lh9!DJ3S2|*E%UIqpRNszS+3=B6W8|uk3 zKA0S+=g;Uqd7)ms;0>rx*`X>VCJXA@Gv1gSs4verVRE5<KjVwdj0VY!OcpGY9ht-? z*BA;gwMb0vGt^^BmzuoKP|G5giGhK~mWhGk6%zx)RUwEu<%|#-L^4@1FfcIP5VvGt zU|{B8Z)0R&U}j?9Ia$$Oq8{Wgwn&f!BS$buf`z>sL@~03GBPkQ@qpN>;;A47OsobV zb810sbr}Z`y9mVA6w3io9IUrMLK~SF7?`I?E(NidgV@uhL2PyoRt}Ig932b{3@q|Y z{5KgG7+5*jjxjJWa28IUZy{d41ten5;|>zp&dk8TY7J&{*)cLO++Z{0n8w7wz`cNt zfq~7K9i)hX`z9j;1DhEq$P5ndEg+6Lm?OX)!py+HW&!3%a32K8Sb{kU-0~of6_}&J zJ(G!nfz2AsG05Up18K4W^DMakg4Ef9IS$-&K{5_tjt92@h~o(61aK=eFfgz=fjJS} zlRz97vGq(03<=z4KxVs%Y-M6#$l%@w(&GVkb^*7|<oTA8nhYQde1$;a*ub3!lK0~; zW?*1w;+_GL@#omh#K6$Z{hnd+LraPJk01rn;@6lM7-n$a2N@kB`H+c$VF9-Uh!YF8 zX9f3ikPG5Ck1#MWY~aoUnG??iYVhsg_5&G^0CvFv?h7E9B#!4y3=BsYn4B0H7}(h* z`574)cp^XsX!G$dVgyCcDkc!g&&V*j!b*bo9Vk*bE;2DN@ZMpXJl9H6TY;H@fuoa; z87u*cAI`fVkuI<Z=Q#!j299nBTWaz{E9v^x%nS^i(oz=83=B+spwdJ_xC)d|>KPaq zxFkh-LF^I`TS{amI8CuPf)XGH>s3&(<;KLoz|I0nZ2S^zCzu%+geEdGFfa;z1!)rs z0VOt}L`DV%79mcMyM>;Byeu>uWS+1ZC|?^ha4?84uz;M!z~s)zz`!j7PRCrv%nS?y zJnK3BFf%Z4yD&2_@N8rSS-`;EIr)sKY^X8F&vHVE%nS@%;vgG%<vEO57#O(MGBPmm zD)RGy%w%AC2I7?qg)%cRhzjstWzA(_U=TaT%)r2VoeRu<%)r3FdxN_cB%U<c&djFX z5!4>#z09!#WEv<T^WNgL2b;z=mxY0WvlgWLu^dR6Qx|0X6EK_WBFM$OZ#l$S85p>C zgN%I-b@648TR-rFoX5m12Ga6TM1qBZfrYyQ#Q7o&(!#;O2g=jxlYg2i)Pp(>d~%FZ z=Bx}193L4O82IEN9Pw@@1_nlMR#0w3FIX7oNL&ZYii2dCCi+MwGcYhP^0Gm=Ig+5p z8KVf4n;`iM6jjoqS6LVsm?j2DdVv&cgJmbrFgJn}V#`<{g_sYhal^pCU;z#Y28PF= zqG+@bV_+LC#26UZ2DlJQpsWxR;J(Vb5>$49$_4K0Twpe+T;RUJy%Qv!G&#oFMi*Qz za9`&50xFR}<pTFD&T8;50NYJaAqpxNxF5@bq&ambAGKD<2IXQNIYuc(7HBT!k%w@E zjaXpiCa(%xJPQMZNGB*`i9BXuU|?hr<zeB~<D3U7f6Q4J7<dgt9YC_&b|8)+2PiwU zaNhuNjKCZY?!d_bHgfeotPBjiCd?r7#Ir#rIf2WGN-<EAgMk6ukOF1$Io_-c3=-h{ z?j!{^ZQ`FD^^y@FEiN1&uQ5%`kSZ=IVqkP-2dQPAIKfdekd=Xf(T#sSsNkB|u(Mt& zEro&6odZ<UFilL5JjWu!z`z&)E<czi#z@M5OiSjT%xEi>91CKbvMm*bI0W3{13P3p z$RU9srl}OfpbQBmHU<VpQ#Fvgm?ox3>;~(#@B`H-6C)%hfw{pDZUBQc$T^G#Yz33+ zY{lxqCK*Vem}H=WVv>OwL~8_tbPdQTRW>cCtK1-tV_=-)#KyoN0X9oj5@Z(h#1)Q` z^FgZBp~11ikwHcaB%lBe;rEczak8+TsJMb8#DWY4aXyd=QFc&(u9|FbCl(DhLsSMN zz%(&J;v`sJ1LD3ASx|V2nt&{1n&=@_lv={TC?)_=o53LG2~x}rHVjr6gPYu-z?&lx zIC+DeC8Wr<WMyDrXJue$0gW3lK#FRR*CIjXJW)k9q`}F~!3=GHLRy~8kk%$MYOAst z6fe+LC5R1eQ-WKFEQTEVObiU1pcWzvw1vnCY9X?iaV`Q?`JA8@B8xegQ!l^?Y9g{& zfO!&}pe7=VC77eY32Gv;Sb;ejoS-Hmi#3>IzzJ$0ve<w*7M!3KB8x4U<G=}OA+k7t zIUby#79xuym=nMWY9X>XfjJSJlR&Ls7cq}|P!o|8)I?-)6Y&Ez5jjCkL>6chk<*5m zfq}&n+*&K)1a%Eqytum<7#J!zLCr=MXtR+M)NEw&<1Ym@8#zJEMize#P&=rZ^F7F- zK>ida28Iq!(BLCWB=0l^28Icopq3;{eYAK!s42+_YD%)iNLGQGlANHXBugyVJu5hu zgG`9y%mFneIYCWH7HCtF6V#MsftJFYpr#~C5=R4~Dapz%xdPPY0yQOBwE4IpO-W}^ zlZ*o-!4t{AFxk{mI1tjF%mOv*?|@}XK|L8zFJS_x4Fl?~2s7}3+L&yed~?7mKrze* zYGbl>fkpU0ZA`Xq2wQ6MOh@ThQ1Q$zEd^?(3P4IeP)mnHg^iJ!fk6;l@(DspJ|P|! z4n0l>P;m+>`8W(jAAwqloS>4A16uNNf=WIPXvxPJI9bpMQu1+_FoVn!aRZf88sL11 zo&^}^+yXTOb-*fAAo<io6kM=rID({@COU`(f-;(s07N!J><@@*&IL-ZOcN8tz<JgR zT<kJUj1l_+l69TD&Pk>|78F!x*dXntbkLw70|SE#w9{wG#=wBB(+A0FEby$x#J&^M zXhz9#tSqdVc_j=?(5@Y*djiXZ9PA7X%o8L*LiJ40eqIGqjs&w;ure?(&yWO#Ia4l( zJxdxS&c<;N)Szc%19dprL2M3Kt_3AnSgr+WV}RvaP_vc;mTN&Ac&6PA>M+1_El3KU zYe5`%t_5-6xfaBM=UNa4o@+rIc&-I;;JFsWf#=#>M5YyU6DdZ{wIFvFaN10cb%Av3 zSbT*77#J8DU^z4#Ifqt)I(D4z879wnfpqLxqQ$2m=f?TSxe;U!JU4<$?+sXUBgh2@ zV7YNAN^U%ho*UUXGC-Y1j<XC5lg(Tq9XmFTen>`~9PJ9}*s*o;9Rw=_MG!30fka@L z4$PLCJl|DK44Ub_F)=U*G;pwTYJxJ=rpdQmW$W$P85lS?n1w*OkAsbYfrC?mJsZ@} z5nyLv;FMwqIa~-dV#g`X3GyBTlN3loPRte5#o^$xV44jw>=qjX1D6%wVo>G6$;i&Y zz-7$`N(C$o0s>t2OlLr9E`!uKa)C@_;Jn7lz`*6i#R1~6aI&&Zu6Gla0h{89Y>F4e z6p(@qZlaN31%b#4f}jfagUkyC8_vP`2gC^xUJvTMac%=~LctsfkZTf|b3k1;Rgfc- zdBJ|-JULm;U5wWq<iJ#R4;BUnA^pjY?xNBUL3*RX104*U2SC!X0-&0fgR^mRp}SbU zI!Gu_6qJP+IP*cAe25c37L_oGure@kE(ZyhLCp{YampcTI5&VyuMh_1SRMx90xo0L zI#vb-p)QabQ#LUB0!WDsTRA93_(9?>Y@qNKi7zT);PTOC0|l&*4#+EEY=1$D%0U`3 z+4?|!umfo*VA~I3f0=CPq3RDRdbrd$L4nS|*$9%>0CQM4<v|=RFo%P)6vQzAb9gud zL7Zw%kY5BCm`p)-)v)%lGB7YDOkV1t%KMU)fq_R!@F~dYvnOBo&^4XM%D^y#N1CIZ zje&vlEgJ&^j~Xiz8))EY2Z*C5U<n$A;G75I7=mr-;CwjQ(o+-M*X5RDlmbaffcm=J z@(>O)WRQWG13cs)xdl|zva^Ex!O6@5YK=26Fi6b=wH6h@qR!Hwl*qu40ihTe=P0o= zFi1y(Re(F!OcQgYYrtG-kQCFz1O_&K4p50A6A7vl1lbNrP5$7i%Gn9xak8aLZI<)0 z;$SS=92r!`$hVeNvXoV67b}|$D<?<P<U7IT^{gD}tV|rcSuHqxSebTlOyt<j%F3~p zV>c_~ZdMHkRt^pkR`w07EF7h*%%!_onHI4Mag?$$aja!!-OaI^l`ox@Esd2Wl9icB zMTC`y;|nV{#{^bpZ&pr@>#WQiH&|IYZtUjR!z#_Oo0W+pontL4&u&)6NG2u*M#dYU z9{A>6Av}ysEfSkggz_<gMjvm4PuM&&;yRP6enx(7s(x-_USfrQK~a8sd~s#5ey)k3 zfnl<Kd1_K|YEfBg(d7K-|Ga7GsU^kn`9<-m6`3WIb7O2-a`Q`4Cg01JoP0HAk_tY9 zz{BJ@nMsq=Vtv_*Gt<)&OLHb~h@H7PIL?o8@{;%|j1wjYCWta~Fx;3Nm>|w5F}X28 zl$nd+#^lC?awZX($-ffx7!@WvCW<l(G3=P^m?+M8V{&1lD6<H|gUN-7;*2jqyv_3x zvltm4Oy*41XS^}lGP$2gMs@P3WIf3T&<Rs$d^6kywS^f(8D2~lOc9rYO{2nOe}Wl; z3<^q<ol@K+1)$@=&<dKth>?Loh=Gq`)#QaK;)3XXra;hS>Es6~5sYz@EmQ584oOX} zO4Tzefc70s!DcfsuromnLGS5^LdDaiCf`bRV-k_stdus5Q3~2`V6cX24+iCC20n%j z(vvTxmr0^GU*<ujwI(NKxHCCRZ(fygjf2sBa$})B=LArb6x5oWytB}p^9Gc6WAe{J zb5059fVRYB%OZ15*zop^&6P#$j7*ALlbee5xM0KLA~KVA6}vIYO>QiapR7<Kz=bqf zZB=5%xdS?fy<>7^i8&`MjBiZdSz^u!i;oABf0mdF!6(B(qn!*43?CRbJC)ioG5(y~ qSZ>al2WpElFfe#cK3HzfxMT9qa(gC@tjSgtcAUraAi)9hm^=W|?VhFp delta 7831 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 LG(B(fszNmY!h|-1 diff --git a/webserver/socket.o b/webserver/socket.o index 0df2fc98e5debf3f76433bd18a7dccc2fec6200a..02a2d23ceca50a003abc28b9e641d79a42a5ea7a 100644 GIT binary patch delta 1789 zcmez2`@(mE2IGp2n$6ss?{bGStLkUu=celCCgvqp=ob{_r^gpp7VGDl7#bKR>zAh{ z6{i-Jr50^A<kw={oFJgUW_gi`0SpAeBm)B%0|c*uii@I&7cfHvBqtwK5TATOOvBR& zBEVn+rC}!ghnnDwCT<TkAqGvne6pjsxMw>fL^vNp!QJy3Dqe;rz6L5@jVA6ed7-$t zqy<#84@$$_Hf8cfadF8`sOSnP4U<)v%qSr)X%2PgPBdBF$%Yc*lJlXW51=$m@6ySM z68eVsp`t8M*TH1nSRfJtXyQea4@!tjHbEpAw9sTNCV!L=mlTGErwf|wt;vd#;*ttb z**G-W;K_lK;*#=Ezf_>fu9@5@DJ~fU)jJ7IR%h}?NpZ<(P`$8_hWSN%@<T~+$(2wy zA4Ag{G+9teT+$cn-v?;2hbB8p=`)&4E|e1Y`~o#!1nLTy`46Fb6w$<`pyGOH;@Oig zN{LG{Lv8dxldYM|C@n784i!y;(lEPDO*WJkmz)PRxdu)4%H%|8aY=os=yWIz(;GT@ zqO`bY0yG>}qsjh&nt2ILyb0>gyJ+G`lRrv}OD=<k2^WlJfaJ=;$%-=Kl0Tt#DWS<K zO%9Y1ueXAl?1d(K9jYq~O`I9(f+RHY8&H?Say-nx2chESXzCdt;*+1t2ukjPn%Re@ zMq#p`thl5mL?y#4G}#lA9c9HOr$S}nVF2}e#^gd-amfm(?>3?7-8Xq5NH5ghgJ`l- zCSQ~lm#l`Gd=*W0=VV4XamiCq(f3dq=3j})hH~PJiza)@=}YoJ%{PI%0;a}w@<cgt z$tb93D3pfD@=ZP{CocH{YVJHVS<lHI<-{dFLSttink>&`MR{?_M5xQJp~<FB4wM&{ zd<NC~0Zle?a-+Psq!&~#7b`>=%vC!kZ<H68^oRP$3r%*@<cIR&jDnMY%IiyRg{o;m zQ&T+IQ9)c%8e%NNA~e~)$%P8yj6s__6^=79PS_l%WY5UxF?pi$e#RM-16Ar7PfWh3 z;?B5evZSgxqw(ZGReQ#O$rHikMOAyo2a^TW>=`>I2dddK3QV4;X3zOU0b<dH$qNO9 JC+jHj003>p!JYsB delta 1783 zcmaFi`@?sF2IG#6n$6q>`WgATsru=ONvS18`c9=qsfnff0Y&-g@x_(J@rh;nxh94N zhROQnsY%7DMP;c)n^$v(F>hAq*JNa2U|?X_>@T3mX34}1VlyxZLMR3<1_m&`%LEY+ zg-~EIkeoD>FFARmg81YEVj7CYP!Ss_4N?Wd22hioCr=a;7mPuZT`}2ET-<X9BSbhK zLcwj3f!bb%CVm&Hz8X!uaPmZPamh@mXdjdYxdMcbPCh6uF1ZUTx&lgrWI#A@@<(xT z$qcA#ccRJ0O;(f;m%IQKeE_9F`at;F<Uk31LjkC(SfDgW2808_;mp7QlLv``@Z!lE zCB!8+L(S4c)0H{-p@g`k3p4~=&}5%Z7L*j141~(Yp~<#Pc9ayC41oHj0!?=N<U&bt z$zG`5Noca>lNU;gOD=@!U4teYGx?&Vxa2LUn~$N%Hcw`h5|@mC`u72v?AghNQu>Uk zlM|)HJ^w?^7lFD06doWf1m!D2X^<EQdqd6ALld7f`Jj}zBp=j94>Z}elRrv{OYVS* zCP8VCc_93IvZA!O<awycHE6Q;CkIN4OC~@?r$cFwJ`hfr+$b&XIT0ETtI=dNq5Mlw z8l(e+d!g=x<tmUE2v45;P+DAaBQ#97U^Fxj)=U<Z5toFe4<$6&;K`0M;`OdjlfBSn zIiS7^LlZZFx-1DzoD(WufF}M4YEC(txFJM*@^u+O$=6W5eQ0X5Co{^5OGZIdGR#7g z{W;lCR$LO6l9r*#&YYYmD=yg#_1z{k+4qwtg7iY|J%}bdfAT?DaY<MTzKSM$Wb#K@ zaY>lydo)?)$%=B~jF%@{%IQnmLd`dUx&jnqAY3-NQBHiagFJ^|D4LA@<c)ITlAobw z&O?)}n*2~sTv7=d9{bQ_#U~5Oi%Y_C<ux?fg2|5Z;*#P}y&uqIyCxUPi%V8RWw}@( z$rI#O5Pms%p}e?c1JpNOXtIwdUz8VTbejB9USIMVR80$-nkADB6~rZdAjUE*LX(|2 zIZ;8Jv3YZ)!f{5%1)Cj}>=_v&CO0bYXIwGaQKg>o#^i%4?u=_EbE=v%+D&#;wP%c; v+^A~Lm@xUEsy*X}$&70Dj58)Xs@XFtOm0-O=j2d?ShQjCL;>N+GD<uES>egi -- GitLab