From 2e8ddbb67c169781011cda55c9cd751ed0487d8e Mon Sep 17 00:00:00 2001 From: hocine <ferhat.hocine.etu@univ-lille.fr> Date: Sun, 7 Mar 2021 15:47:34 +0100 Subject: [PATCH] =?UTF-8?q?rendu=20interm=C3=A9diaire=20ajout=20de=20comma?= =?UTF-8?q?ndes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- serveurFTP/.gitigniore | 109 ++++++++++++++++++ .../.settings/org.eclipse.m2e.core.prefs | 4 + serveurFTP/bin/.project | 23 ++++ .../org.eclipse.core.resources.prefs | 2 + serveurFTP/bin/pom.xml | 75 ++++++++++++ .../bin/src/main/java/sr/projet2/App.class | Bin 0 -> 1070 bytes .../src/test/java/sr/projet2/AppTest.class | Bin 0 -> 1047 bytes serveurFTP/pom.xml | 11 ++ .../main/java/sr/projet2/Request/FEAT.java | 28 +++++ .../main/java/sr/projet2/Request/LIST.java | 27 +++++ .../main/java/sr/projet2/Request/PASS.java | 14 ++- .../main/java/sr/projet2/Request/PASV.java | 35 ++++++ .../src/main/java/sr/projet2/Request/PWD.java | 28 +++++ .../main/java/sr/projet2/Request/SYST.java | 27 +++++ .../main/java/sr/projet2/Request/TYPE.java | 47 ++++++++ .../main/java/sr/projet2/Request/USER.java | 16 ++- .../sr/projet2/Server/ConnectionServer.java | 15 ++- .../java/sr/projet2/Server/FtpConnexion.java | 77 ++++++++++--- .../target/classes/sr/projet2/Main.class | Bin 589 -> 589 bytes .../classes/sr/projet2/Request/AUTH_SSL.class | Bin 1038 -> 1038 bytes .../classes/sr/projet2/Request/AUTH_TLS.class | Bin 1038 -> 1038 bytes .../classes/sr/projet2/Request/FEAT.class | Bin 0 -> 1035 bytes .../classes/sr/projet2/Request/LIST.class | Bin 0 -> 1026 bytes .../classes/sr/projet2/Request/PASS.class | Bin 1007 -> 1284 bytes .../classes/sr/projet2/Request/PASV.class | Bin 0 -> 1919 bytes .../classes/sr/projet2/Request/PWD.class | Bin 0 -> 1220 bytes .../classes/sr/projet2/Request/SYST.class | Bin 0 -> 1008 bytes .../classes/sr/projet2/Request/TYPE.class | Bin 0 -> 1699 bytes .../classes/sr/projet2/Request/USER.class | Bin 984 -> 1262 bytes .../sr/projet2/Server/ConnectionServer.class | Bin 1763 -> 1525 bytes .../sr/projet2/Server/FtpConnexion.class | Bin 2372 -> 4080 bytes .../compile/default-compile/inputFiles.lst | 8 +- serveurFTP/target/serveurFTP-1.0-SNAPSHOT.jar | Bin 8651 -> 15332 bytes .../TEST-sr.projet2.AppTest.xml | 10 +- .../surefire-reports/sr.projet2.AppTest.txt | 2 +- .../test-classes/sr/projet2/AppTest.class | Bin 467 -> 467 bytes 36 files changed, 527 insertions(+), 31 deletions(-) create mode 100644 serveurFTP/.gitigniore create mode 100644 serveurFTP/.settings/org.eclipse.m2e.core.prefs create mode 100644 serveurFTP/bin/.project create mode 100644 serveurFTP/bin/.settings/org.eclipse.core.resources.prefs create mode 100644 serveurFTP/bin/pom.xml create mode 100644 serveurFTP/bin/src/main/java/sr/projet2/App.class create mode 100644 serveurFTP/bin/src/test/java/sr/projet2/AppTest.class create mode 100644 serveurFTP/src/main/java/sr/projet2/Request/FEAT.java create mode 100644 serveurFTP/src/main/java/sr/projet2/Request/LIST.java create mode 100644 serveurFTP/src/main/java/sr/projet2/Request/PASV.java create mode 100644 serveurFTP/src/main/java/sr/projet2/Request/PWD.java create mode 100644 serveurFTP/src/main/java/sr/projet2/Request/SYST.java create mode 100644 serveurFTP/src/main/java/sr/projet2/Request/TYPE.java create mode 100644 serveurFTP/target/classes/sr/projet2/Request/FEAT.class create mode 100644 serveurFTP/target/classes/sr/projet2/Request/LIST.class create mode 100644 serveurFTP/target/classes/sr/projet2/Request/PASV.class create mode 100644 serveurFTP/target/classes/sr/projet2/Request/PWD.class create mode 100644 serveurFTP/target/classes/sr/projet2/Request/SYST.class create mode 100644 serveurFTP/target/classes/sr/projet2/Request/TYPE.class diff --git a/serveurFTP/.gitigniore b/serveurFTP/.gitigniore new file mode 100644 index 0000000..2143456 --- /dev/null +++ b/serveurFTP/.gitigniore @@ -0,0 +1,109 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/maven,java,eclipse +# Edit at https://www.toptal.com/developers/gitignore?templates=maven,java,eclipse + +### Eclipse ### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +### Eclipse Patch ### +# Spring Boot Tooling +.sts4-cache/ + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +# End of https://www.toptal.com/developers/gitignore/api/maven,java,eclipse diff --git a/serveurFTP/.settings/org.eclipse.m2e.core.prefs b/serveurFTP/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/serveurFTP/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/serveurFTP/bin/.project b/serveurFTP/bin/.project new file mode 100644 index 0000000..51988d6 --- /dev/null +++ b/serveurFTP/bin/.project @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>serveurFTP</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.m2e.core.maven2Builder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.m2e.core.maven2Nature</nature> + </natures> +</projectDescription> diff --git a/serveurFTP/bin/.settings/org.eclipse.core.resources.prefs b/serveurFTP/bin/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/serveurFTP/bin/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/<project>=UTF-8 diff --git a/serveurFTP/bin/pom.xml b/serveurFTP/bin/pom.xml new file mode 100644 index 0000000..714a36b --- /dev/null +++ b/serveurFTP/bin/pom.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>sr.projet2</groupId> + <artifactId>serveurFTP</artifactId> + <version>1.0-SNAPSHOT</version> + + <name>serveurFTP</name> + <!-- FIXME change it to the project's website --> + <url>http://www.example.com</url> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.7</maven.compiler.source> + <maven.compiler.target>1.7</maven.compiler.target> + </properties> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> + <plugins> + <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> + <plugin> + <artifactId>maven-clean-plugin</artifactId> + <version>3.1.0</version> + </plugin> + <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <version>3.0.2</version> + </plugin> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.8.0</version> + </plugin> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.22.1</version> + </plugin> + <plugin> + <artifactId>maven-jar-plugin</artifactId> + <version>3.0.2</version> + </plugin> + <plugin> + <artifactId>maven-install-plugin</artifactId> + <version>2.5.2</version> + </plugin> + <plugin> + <artifactId>maven-deploy-plugin</artifactId> + <version>2.8.2</version> + </plugin> + <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> + <plugin> + <artifactId>maven-site-plugin</artifactId> + <version>3.7.1</version> + </plugin> + <plugin> + <artifactId>maven-project-info-reports-plugin</artifactId> + <version>3.0.0</version> + </plugin> + </plugins> + </pluginManagement> + </build> +</project> diff --git a/serveurFTP/bin/src/main/java/sr/projet2/App.class b/serveurFTP/bin/src/main/java/sr/projet2/App.class new file mode 100644 index 0000000000000000000000000000000000000000..a6b2b3df52065e1a3f915bf7ca1d5dca340503a1 GIT binary patch literal 1070 zcmX^0Z`VEs1_pBm8FmIHMh2PUqGbKt#LPVXti-ZJ{o*41f};Ga)Dk0o$ASWO1{OvJ z0kA|)VqUtwe^ORzatR{?n@wh3W{Djm1G9!^7$XCVbAC!HI|C;p13yBoYf({t5eEY| zBjf+jyrR_N{G77X6ousc+=9%U#FEVXJcWXy{G^=J++r&QF3ymQRE3htf>Z^N0eT?I z^dOcgBq!$O<(DWVr7FM-(Npj&QOGP-$jnR0EJ{r-$*EK*N=-{GO3h17O;JcI%Fk6O zN-ZqSEJ{sL&`ZuqEG||^%gjkF#%fD&Nl|8AI@N7SNlng41UaA}F*!RiJyk)exJVBg zvPudm`KiSUAYbJsmLz8=lw_nTq*fH9CYPk9C?IJ_)&oV19ymylv~zKK<`(2+CTEr? z6qgpH7AYj>=M|R}l_r<u7b!qOO+ynDK&5#pscD&cpg_qlQb<WnODxSPK~}A&;9FW; z0+PwhOI1kB1GxfXFp`m6oH)Zsp(I}+5gcz^oWYgFC8@bs0+Nf1frEjUhk=!WkC8!C z!w2LYeNYVRL(H`XB_V#F%)C^;(%hufqL9R-oK!{zA)ox@#GJ6iqD&AUD#%ijky*^h zAm@WG)mk$$uz&)Nk%31e+6Qh42ZI<RLlO~b5uyW&Pl)p_BLi1(erZv1s#_+=9~_Pa z1>h)TXOLoKV1pRW$iU;9SzMf%mmX4CkXp>3$iT?J%m4yR42%q{3~UUH4D1XH3?>ZB z42%p63|zYzI3k6(wlnbTXJBApV&G?B0IOkOU}O+rU|`^ZsA3Rg5Mp3p;A9YH5P_PY eg<^sz785wZCNP1`6$g_N4AKk?3@i+c43Yp7QaHN+ literal 0 HcmV?d00001 diff --git a/serveurFTP/bin/src/test/java/sr/projet2/AppTest.class b/serveurFTP/bin/src/test/java/sr/projet2/AppTest.class new file mode 100644 index 0000000000000000000000000000000000000000..42cbb8c5bb3c3397380a80012fa7379b76e7b71a GIT binary patch literal 1047 zcmX^0Z`VEs1_pBmDRu@XMh1oAqGbJ&)Z!BTti-ZJ{o*41f};Ga)Dk0o$AW^8)Z!9$ z1{OvJ0kC9FVqUtwe^ORzatR{?n@wh3W{Djm1G9!^7$XCVbAC!HI|C;p13yBoYf({t z5eEY|Bjdc#yrR_N{G77X6ousc+=9%U#FEVXJcWXy{G^=J++r&QF3ymQRE3n(<ebE! z)D(q+#N_P6^i&0<;vzk$i<A^n@>7cy^72a*auZ9EGZacPQWa7w3R06xP&Fj$fjp!K za)%z0c8Cp`xdr(}B?|dP=?ck-c_71*QWaosBT9*9Zb43Fa%PD_acMznkwS8QUU5lL zX>v(^kpd)eG&B`5ixo=qQc}}0^HNh3((;QGQc}|rOLIz)RqHAEmKK+QWHR$o6%zA6 zet{T_WF!|SC=#$ZRiPwbAyJ{EvLF@W=-kwjjQkXZ#Ny)AqLPrJ(o~J4{QR8M#5^pH z0R<dLrvfyNxwsfO7<hRYSQ+>j8ALUFKq03Oj_u%*qRhN>YfudH`();&`jzG;r51%G zCgr3uG6?zPCnx5FB^G6Z_)tNXl8nq^Mg}DxLJ7;7kwK(5Bfm5!#WAnAJhdo1vm^uL zZbk;_pwhgO%-mGZyt2&V%%q%DM^HS06HGB91Dg*hM65XFddiAh$e#U->3KSl<w z;QZ2}<W#pzP{8m&!xfwa859{98JHPBfQf;Tft7)cfsuiofq}t<fti7kfq{W*Hv>nc z5Z87Fp8X6A3``9C3=Cj33=E760t^fcJP=h3f($|oATePEHU=gJ5vVFr1_msqiD5B~ LAFF8+U^^uNK~OK~ literal 0 HcmV?d00001 diff --git a/serveurFTP/pom.xml b/serveurFTP/pom.xml index 714a36b..43351d6 100644 --- a/serveurFTP/pom.xml +++ b/serveurFTP/pom.xml @@ -35,6 +35,16 @@ <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>3.0.0</version> + <configuration> + <reportOutputDirectory>${project.build.directory}/docs</reportOutputDirectory> + <destDir>docs</destDir> + <nohelp>true</nohelp> + </configuration> + </plugin> <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> @@ -51,6 +61,7 @@ <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> + <configuration><archive><manifest><mainClass>sr.projet2.Main</mainClass></manifest></archive></configuration> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> diff --git a/serveurFTP/src/main/java/sr/projet2/Request/FEAT.java b/serveurFTP/src/main/java/sr/projet2/Request/FEAT.java new file mode 100644 index 0000000..035ed15 --- /dev/null +++ b/serveurFTP/src/main/java/sr/projet2/Request/FEAT.java @@ -0,0 +1,28 @@ +package sr.projet2.Request; + +import java.io.IOException; + +import sr.projet2.Server.FtpConnexion; + +public class FEAT implements request { + private FtpConnexion ftp; + public FEAT(FtpConnexion ftp) { + this.ftp =ftp; + } + + @Override + public void send() throws IOException{ + if (this.ftp.getSocket() == null ) { + throw new IOException("Ftp server error"); + } + try { + this.ftp.getBufferedWriter().write("211-Features.\r\n"); + this.ftp.getBufferedWriter().write("211 End.\r\n"); + this.ftp.getBufferedWriter().flush(); + } + catch(IOException e){ + throw new IOException("Connexion failed"); + } + } + +} diff --git a/serveurFTP/src/main/java/sr/projet2/Request/LIST.java b/serveurFTP/src/main/java/sr/projet2/Request/LIST.java new file mode 100644 index 0000000..6a1d2f1 --- /dev/null +++ b/serveurFTP/src/main/java/sr/projet2/Request/LIST.java @@ -0,0 +1,27 @@ +package sr.projet2.Request; + +import java.io.IOException; + +import sr.projet2.Server.FtpConnexion; + +public class LIST implements request { + private FtpConnexion ftp; + public LIST(FtpConnexion ftp) { + this.ftp =ftp; + } + + @Override + public void send() throws IOException{ + if (this.ftp.getSocket() == null ) { + throw new IOException("Ftp server error"); + } + try { + this.ftp.getBufferedWriter().write("530 please login with USER AND PASS.\r\n"); + this.ftp.getBufferedWriter().flush(); + } + catch(IOException e){ + throw new IOException("Connexion failed"); + } + } + +} diff --git a/serveurFTP/src/main/java/sr/projet2/Request/PASS.java b/serveurFTP/src/main/java/sr/projet2/Request/PASS.java index 5ff9d13..90e22a9 100644 --- a/serveurFTP/src/main/java/sr/projet2/Request/PASS.java +++ b/serveurFTP/src/main/java/sr/projet2/Request/PASS.java @@ -6,8 +6,10 @@ import sr.projet2.Server.FtpConnexion; public class PASS implements request { private FtpConnexion ftp; - public PASS(FtpConnexion ftp) { + private String pass; + public PASS(FtpConnexion ftp, String pass) { this.ftp =ftp; + this.pass=pass; } @Override @@ -17,8 +19,14 @@ public class PASS implements request { } try { - this.ftp.getBufferedWriter().write("Login successful.\r\n"); - this.ftp.getBufferedWriter().flush(); + if (this.pass.equals("anonymous")){ + this.ftp.getBufferedWriter().write("230 Login successful.\r\n"); + this.ftp.getBufferedWriter().flush(); + this.ftp.connect(); + }else{ + this.ftp.getBufferedWriter().write("530 unknown Password\r\n"); + this.ftp.getBufferedWriter().flush(); + } } catch(IOException e){ throw new IOException("Connexion failed"); diff --git a/serveurFTP/src/main/java/sr/projet2/Request/PASV.java b/serveurFTP/src/main/java/sr/projet2/Request/PASV.java new file mode 100644 index 0000000..4b63fc6 --- /dev/null +++ b/serveurFTP/src/main/java/sr/projet2/Request/PASV.java @@ -0,0 +1,35 @@ +package sr.projet2.Request; + +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; + +import sr.projet2.Server.FtpConnexion; + +public class PASV implements request { + private FtpConnexion ftp; + public PASV(FtpConnexion ftp) { + this.ftp =ftp; + } + + @Override + public void send() throws IOException{ + if (this.ftp.getSocket() == null ) { + throw new IOException("Ftp server error"); + } + try { + ServerSocket socket= new ServerSocket(0); + int newPort = socket.getLocalPort(); + int port1 = newPort / 256; + int port2 = newPort % 256; + String ips[] = this.ftp.getSocket().getLocalAddress().getHostAddress().split("\\."); + String ip = ips[0] + "," + ips[1] + "," + ips[2] + "," + ips[3] + "," + port1 + "," + port2; + this.ftp.getBufferedWriter().write("227 Entering Passive Mode ("+ip+").\r\n"); + this.ftp.getBufferedWriter().flush(); + } + catch(IOException e){ + throw new IOException("Connexion failed"); + } + } + +} diff --git a/serveurFTP/src/main/java/sr/projet2/Request/PWD.java b/serveurFTP/src/main/java/sr/projet2/Request/PWD.java new file mode 100644 index 0000000..f3c1263 --- /dev/null +++ b/serveurFTP/src/main/java/sr/projet2/Request/PWD.java @@ -0,0 +1,28 @@ +package sr.projet2.Request; + +import java.io.IOException; + +import sr.projet2.Server.FtpConnexion; + +public class PWD implements request { + private FtpConnexion ftp; + public PWD(FtpConnexion ftp) { + this.ftp =ftp; + } + + @Override + public void send() throws IOException{ + if (this.ftp.getSocket() == null ) { + throw new IOException("Ftp server error"); + } + try { + + this.ftp.getBufferedWriter().write("257 \""+this.ftp.getDirectory()+"\" is the current directory.\r\n"); + this.ftp.getBufferedWriter().flush(); + } + catch(IOException e){ + throw new IOException("Connexion failed"); + } + } + +} diff --git a/serveurFTP/src/main/java/sr/projet2/Request/SYST.java b/serveurFTP/src/main/java/sr/projet2/Request/SYST.java new file mode 100644 index 0000000..f5d3d80 --- /dev/null +++ b/serveurFTP/src/main/java/sr/projet2/Request/SYST.java @@ -0,0 +1,27 @@ +package sr.projet2.Request; + +import java.io.IOException; + +import sr.projet2.Server.FtpConnexion; + +public class SYST implements request { + private FtpConnexion ftp; + public SYST(FtpConnexion ftp) { + this.ftp =ftp; + } + + @Override + public void send() throws IOException{ + if (this.ftp.getSocket() == null ) { + throw new IOException("Ftp server error"); + } + try { + this.ftp.getBufferedWriter().write("215 UNIX Type: L8.\r\n"); + this.ftp.getBufferedWriter().flush(); + } + catch(IOException e){ + throw new IOException("Connexion failed"); + } + } + +} diff --git a/serveurFTP/src/main/java/sr/projet2/Request/TYPE.java b/serveurFTP/src/main/java/sr/projet2/Request/TYPE.java new file mode 100644 index 0000000..35190e9 --- /dev/null +++ b/serveurFTP/src/main/java/sr/projet2/Request/TYPE.java @@ -0,0 +1,47 @@ +package sr.projet2.Request; + +import java.io.IOException; + +import sr.projet2.Server.FtpConnexion; + +public class TYPE implements request { + private FtpConnexion ftp; + private String type; + public TYPE(FtpConnexion ftp,String type) { + this.ftp =ftp; + this.type=type; + } + + @Override + public void send() throws IOException{ + if (this.ftp.getSocket() == null ) { + throw new IOException("Ftp server error"); + } + try { + switch(this.type) { + case "A" : + this.type = "ASCII"; + break; + case "E" : + this.type = "EBCDIC"; + break; + case "I" : + this.type = "Switching to Binary mode"; + break; + case "L" : + this.type = "local"; + break; + default: + this.ftp.getBufferedWriter().write("400 incorrect type.\r\n"); + this.ftp.getBufferedWriter().flush(); + return; + } + this.ftp.getBufferedWriter().write("200 Type "+this.type+".\r\n"); + this.ftp.getBufferedWriter().flush(); + } + catch(IOException e){ + throw new IOException("Connexion failed"); + } + } + +} diff --git a/serveurFTP/src/main/java/sr/projet2/Request/USER.java b/serveurFTP/src/main/java/sr/projet2/Request/USER.java index 8844b2e..a522291 100644 --- a/serveurFTP/src/main/java/sr/projet2/Request/USER.java +++ b/serveurFTP/src/main/java/sr/projet2/Request/USER.java @@ -6,18 +6,26 @@ import sr.projet2.Server.FtpConnexion; public class USER implements request { private FtpConnexion ftp; - public USER(FtpConnexion ftp) { + private String user; + public USER(FtpConnexion ftp,String user) { this.ftp =ftp; + this.user=user; } @Override public void send() throws IOException{ if (this.ftp.getSocket() == null ) { - + throw new IOException("Ftp server error"); } try { - this.ftp.getBufferedWriter().write("331 PLEASE SPECIFY THE PASSWORD."); - this.ftp.getBufferedWriter().flush(); + if (this.user.equals("anonymous")){ + this.ftp.getBufferedWriter().write("331 PLEASE SPECIFY THE PASSWORD\r\n"); + this.ftp.getBufferedWriter().flush(); + } + else{ + this.ftp.getBufferedWriter().write("530 unknown User\r\n"); + this.ftp.getBufferedWriter().flush(); + } } catch(IOException e){ throw new IOException("Connexion failed"); diff --git a/serveurFTP/src/main/java/sr/projet2/Server/ConnectionServer.java b/serveurFTP/src/main/java/sr/projet2/Server/ConnectionServer.java index 23f09fe..680d39a 100644 --- a/serveurFTP/src/main/java/sr/projet2/Server/ConnectionServer.java +++ b/serveurFTP/src/main/java/sr/projet2/Server/ConnectionServer.java @@ -7,13 +7,21 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; +import java.util.Random; public class ConnectionServer { private int PORT; private ServerSocket srvSckt; public ConnectionServer (int PORT) throws IOException { + if(PORT>1024 && PORT<8080){ this.PORT=PORT; + } + else { + Random rand = new Random(); + int nombreAleatoire = rand.nextInt(8079 - 1025) + 1024; + this.PORT=nombreAleatoire; + } server(); } @@ -22,6 +30,7 @@ public class ConnectionServer { public void server() throws IOException { try { this.srvSckt=new ServerSocket(this.PORT); + System.out.println("server started"); } catch (IOException e) { throw new IOException("Connexion failed"); @@ -31,10 +40,8 @@ public class ConnectionServer { public void serverConnect() throws IOException { try { Socket socket=this.srvSckt.accept(); - BufferedReader bfR =new BufferedReader(new InputStreamReader(socket.getInputStream())); - BufferedWriter bfW = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); - FtpConnexion ftp= new FtpConnexion(socket, bfR, bfW); - ftp.start(); + FtpConnexion ftp= new FtpConnexion(socket); + ftp.run(); } catch(IOException e){ e.printStackTrace(); diff --git a/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java b/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java index 9439c51..e4df8cc 100644 --- a/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java +++ b/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java @@ -3,22 +3,32 @@ package sr.projet2.Server; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; import java.net.Socket; import sr.projet2.Request.AUTH_SSL; import sr.projet2.Request.AUTH_TLS; +import sr.projet2.Request.FEAT; import sr.projet2.Request.PASS; +import sr.projet2.Request.PASV; +import sr.projet2.Request.PWD; +import sr.projet2.Request.SYST; +import sr.projet2.Request.TYPE; import sr.projet2.Request.USER; public class FtpConnexion extends Thread { private Socket socket; private BufferedReader bfR; private BufferedWriter bfW; - public FtpConnexion(Socket socket,BufferedReader bfR,BufferedWriter bfW) { + private boolean Connected; + private String directory; + public FtpConnexion(Socket socket) throws IOException { this.socket=socket; - this.bfR=bfR; - this.bfW=bfW; - + this.bfR =new BufferedReader(new InputStreamReader(this.socket.getInputStream())); + this.bfW = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream())); + this.Connected=false; + this.directory="/"; } public void auth() throws IOException{ @@ -47,23 +57,54 @@ public class FtpConnexion extends Thread { } - public void read(String s) throws IOException { - if(s.startsWith("AUTH TLS")) { + public void read(String readLine) throws IOException { + if(readLine.startsWith("AUTH TLS")) { AUTH_TLS request= new AUTH_TLS(this); request.send(); } - else if (s.startsWith("AUTH SSL")){ + else if (readLine.startsWith("AUTH SSL")){ AUTH_SSL request= new AUTH_SSL(this); request.send(); } - else if (s.startsWith("USER")){ - USER request= new USER(this); + else if (readLine.startsWith("USER")){ + String[] mystring=readLine.split(" "); + USER request= new USER(this,mystring[1].trim()); request.send(); } - else if (s.startsWith("PASS")){ - PASS request= new PASS(this); + else if (readLine.startsWith("PASS")){ + String[] mystring=readLine.split(" "); + PASS request= new PASS(this,mystring[1].trim()); request.send(); } + else { + if(this.Connected) { + if(readLine.startsWith("PWD")) { + PWD request= new PWD(this); + request.send(); + } + else if(readLine.startsWith("SYST")) { + SYST request= new SYST(this); + request.send(); + } + else if(readLine.startsWith("FEAT")) { + FEAT request= new FEAT(this); + request.send(); + } + else if (readLine.startsWith("TYPE")){ + String[] mystring=readLine.split(" "); + TYPE request= new TYPE(this,mystring[1].trim()); + request.send(); + } + else if (readLine.startsWith("PASV")){ + PASV request= new PASV(this); + request.send(); + } + } + else { + this.bfW.write("530 server is not connected\r\n"); + this.bfW.flush(); + } + } } @@ -76,6 +117,16 @@ public class FtpConnexion extends Thread { public BufferedReader getBufferedReader() { return this.bfR; } - - + public boolean getConnectedState(){ + return this.Connected; + } + public void connect() { + this.Connected=true; + } + public void disconnect(){ + this.Connected=false; + } + public String getDirectory(){ + return this.directory; + } } diff --git a/serveurFTP/target/classes/sr/projet2/Main.class b/serveurFTP/target/classes/sr/projet2/Main.class index 618307915fd53b30c751562e01ea1a07763f9023..c831be5bfff64cca7e6e16300ada5fe339697cc6 100644 GIT binary patch delta 300 zcmX@ha+by7)W2Q(7#J9g85Fq~*cc?(86>$Fm>8r$gfu&Y3_F7?BLkaFW?p8A9U}v? zhGrNe1B-KhO6tVWl*vYne!Q*~$*Bb;nfZCe><n^~YZ)b3c^KFkI3_+&tp_pWc^DKJ zI2alDi;MINit@8kON{h=6EpJ|83eKt%M$f-67$ma{gbj%lS>#Gguz0Y`TCyzaAO%6 zSTsCAw(=II7L}zIIp^o)r6!j!C^E1zurYuD69Xg2Mg~R(P6h@BeFjDbMg|53RxRf3 z42+ZaFzU#Fgnby88JHLt7zB1RFhvToKiST}?4!Mnfn_oulbW&sgCGL~12+RJgAju- a10#b70|NsK10#bd10#bN0|NsSgE#<&={IBm delta 318 zcmX@ha+W3Z)W2Q(7#J9g85G$Wm>3!Oi;MINit@8kON{h=6EpMJ8CVz@1hNv#67_Qu z^V0SGld@8iOBfm0Y%=pQOY9gKm^C!R7#Ucc^HWl}7?>G2c^Ft3*d|(}sB^hiB&QaX zWaj4;voi=WG6;hW$;{XH^oPr^Gl)zUWmMJXVi0B!1L+iJWMI+o)C>a&Nb)d9F|aW* z@D`^Qm8BLr=jY|6CYMZ{6<`ybUs{x$>Xw<4%E-V8a-|-~Yz9RJMh0dE5MW|p1UZ9& zk%66ofkB^vk%5tcfq_+PI|Ik$J&ZbP0t^fcEDVecf?#<c24)5(1_lO!-3-E!g6vPW nGl=?VZ)1>{%)+E5Da|0mz`(%Gz{()YAO|)`o`HdZi9rDXfH6Hd diff --git a/serveurFTP/target/classes/sr/projet2/Request/AUTH_SSL.class b/serveurFTP/target/classes/sr/projet2/Request/AUTH_SSL.class index 3ab14ed8e9707b02b2a2ebeb7527ffa74facdaf8..c56d8c69a147cb02dd4af7a905d7c778fb049a0e 100644 GIT binary patch delta 630 zcmeC<=;LrY^>5cc1_lOW21_mmUIqnD1|9}QE(RqAWp)M?4hB^&1{MZ25MP~xL4%7y zlR*naXmc>=uruhgGw881=ub?HpLi>rg;_&0Z1OB7eM{Gh<kW(a%>2A!Mh33n{L-T2 zRJY8WR7M6~$IuXu_~2k4y{yEtL>>k~21y<Ueg*+{1_K@jLk6SC_Kae(j0^&9B?St_ zsYPX}MGC1!MfpV_mBu^_CJd&NrI|Dp*cr@t7|a=rc^E7hBpDe5ob&VYQY$j^^Ayq& zGjmc?Ci2P|Ffs^$?9k6i%uCnzPs&P7E@5PlDlXD5D9X=DEiuv$N-Zo+EiTb7g3yy= z85JitGb%|iGKgyUAhZUT6lLb6TWf|*e$Hsf%*Y@%nUP7Xo{@pIyeP9Im63rpEvK|N zgF%sjhk=)Yk%5nak%0;1B?bltCI&_ZK?WfPMh0O91_n0<CI%)31_myz?F@`s+FKcz zHiFfNFfcIiF)%YQFmN)kFmN$&GH^49GB7ZRK~yt{F^DsO02kO)Mg~R(35I$}1}3nf z^BI`I$}F|EFfeUnU_Q>kyPJU}Qiyds1KWOx7`qV1HU>^8dm97Sat1yhuo`ZVnvD#M z3?d9#47v;~49pB5w<s}iFfcIiGjK5oFo-Y+Gbn)NB^Y!W#2EA##6dyMU<-4g9s?JH q6oWJaBLf42CDf@h3=9k$49p@C><lbi46+Oi3@i+cU@Qmrusi_8>t^!+ delta 635 zcmeC<=;Po$^>5cc1_lOW21|AZrpXT&<s{h|SQr@uvJ%S@^>Y&Q()In5vQm>v*csR+ z3o^-bFsGFiFfu6kOg3bao0w%T#l^tPz{|tH$-u|Rz^tJe#>v3QAi%@G&cHEoVYm*L zYejNuK}lwQUNJj^1S5km*x1Z`eNTV53>SkGgA6-^^kh9IMOGdLSq8bu{!B^=91IGK z3<7Q?1q#KfMP;c)3aLd!`9)j|;tWb4>y#%KGD&cO^s4eOs4=Kd?qo7#=3vmAJe^T9 zjEg~=L6@CDhmk=HW}#DQT3TvRYD#!fW=U!h4}%_qG9v?PIfw^RZNS4|2=W4JT25(k z1_y&NBZGi*eqLT`MP`1ULRw;GPHM`;Kl=5-`K3k4scxA$sf-M~j-eqQ@xj49dLT;} z6d4#9m>C!uSQ!`@m_Px*z`(%7z{tSKz{SAGz|FwG;Ksnjz{J47z@@dFfk#VwD+B*V zuo^)I1_nL`W(EcZP6ieRE(T5pZU!L+1_m*RY6f8j5e5+8VyI_l;9y{6U}O+w;A3E7 z5My9qU}0cn5C<DSpMe>y!BT4r1OGM#$>R*XyBWkIh2*z0DDH=dsR(IoW6*-Kw=w81 zXW;Vzt1$wp*~q}iAi|)<pvxf6z{~)0l@bF70|Ns;0~dn;g9w8#gS!G)fhdD6gBXJz sgE)f)gCvquEul`;W8h*iVK8N2WH4i3VBlb27KvbI5C;W=IoQJ%0BjOywg3PC diff --git a/serveurFTP/target/classes/sr/projet2/Request/AUTH_TLS.class b/serveurFTP/target/classes/sr/projet2/Request/AUTH_TLS.class index 2ec0165857e1d599560f02fd0329e1ea028e1d4a..15c72760490642f10345209ad68b69fd38c4178a 100644 GIT binary patch delta 630 zcmeC<=;LrY^>5cc1_lOW21_mmUIqnD1|9}QE(RqAWp)M?4hB^&1{MZ25MP~xL4%7y zlR*naXmc>=uruhgGw881=ub?HpLi>rg;_&0Z1OB7eM{Gh<kW(a%>2A!Mh33n{L-T2 zRJY8WR7M6~$IuXu_z<69y{yEtL>>k~21y<Ueg*+{1_K@jLk6SC_Kae(j0^&9B?St_ zsYPX}MGC1!MfpV_mBu^_CJd&NrI|Dp*cr@t7|a=rc^E7hBpDe5ob&VYQY$j^^Ayq& zGjmc?Ci2P|Ffs^$?9k6i%uCnzPs&P7E@5PlDlXD5D9X=DEiuv$N-Zo+EiTb7g3yy= z85JitGb%|iGKgyUAhZUT6lLb6TWf|*e$Hsf%*Y@%nUP7Xo{@pIyeP9Im63rpEvK|N zgF%sjhk=)Yk%5nak%0;1B?bltCI&_ZK?WfPMh0O91_n0<CI%)31_myz?F@`s+FKcz zHiFfNFfcIiF)%YQFmN)kFmN$&GH^49GB7ZRK~yt{F^DsO02kO)Mg~R(35I$}1}3nf z^BI`I$}F|EFfeUnU_Q>kyPJU}Qiyds1KWOx7`qV1HU>^8dm97Sat1yhuo`ZVnvD#M z3?d9#47v;~49pB5w<s}iFfcIiGjK5oFo-aSFeosHGH5YKGUzghGw3l$Fjz21G1$T! vsK>y?AjKffz{tSBU<q}q3<CoL2LrQ61Umx@7lSMV0|N^KBN)qpJuD9Z$)INX delta 635 zcmeC<=;Po$^>5cc1_lOW21|AZrpXT&<s{h|SQr@uvJ%S@^>Y&Q()In5vQm>v*csR+ z3o^-bFsGFiFfu6kOg3bao0w%T#l^tPz{|tH$-u|Rz^tJe#>v3QAi%@G&cHEoVYm*L zYejNuK}lwQUNJj^1S5km*x1Z`eNTV53>SkGgA6-^^kh9IMOGdLSq8bu{!B^=91IGK z3<7Q?1q#KfMP;c)3aLd!`9)j|;tWb4>y#%KGD&cO^s4eOs4=Kd?qo7#=3vmAJe^T9 zjEg~=L6@CDhmk=HW}#DQT3TvRYD#!fW=U!h4}%_qG9v?PIfw^RZNS4|2=W4JT25(k z1_y&NBZGi*eqLT`MP`1ULRw;GPHM`;Kl=5-`K3k4scxA$sf-M~j-eqQ@gY9JdLT;} z6d4#9m>C!uSQ!`@m_Px*z`(%7z{tSKz{SAGz|FwG;Ksnjz{J47z@@dFfk#VwD+B*V zuo^)I1_nL`W(EcZP6ieRE(T5pZU!L+1_m*RY6f8j5e5+8VyI_l;9y{6U}O+w;A3E7 z5My9qU}0cn5C<DSpMe>y!BT4r1OGM#$>R*XyBWkIh2*z0DDH=dsR(IoW6*-Kw=w81 zXW;Vzt1$wp*~q}iAi|)<pvxf6z{~)0l@bF70|Ns;0~dn;g9w8NgS!HQD1#P*7+8rO sg9L*GgA|feEul`;W8h*iVK8N2WH4i3VBlb27KvbI5C;W=IoQJ%0B*Zzy#N3J diff --git a/serveurFTP/target/classes/sr/projet2/Request/FEAT.class b/serveurFTP/target/classes/sr/projet2/Request/FEAT.class new file mode 100644 index 0000000000000000000000000000000000000000..e7210017bdad9ae8f827a6119c7981447694a7b3 GIT binary patch literal 1035 zcmX^0Z`VEs1_omWYjy@EMh5ZXBK?A*{H)XxBmJP%!qU{@5`8yU#}IY~7Dfhvti-ZJ z{hY+SbbbG%tkmQZb_O;^1}Q9BiXd7U8JN>b3K$s_e2~-xrxul^7U{c{6gcPS<)v0+ z=I2>6GO*cX=4F=HF)}D?5K^oe#>l|poS%})#lXzK%frCQz{kkItf3jk$-u}Uz{9}K zz`@AC?~|FA>Q|bZlv)&$n3R*s$ROmCpPZNzmROVt;zI>lN-{Ew85tyz?L_vsH6sH{ zacW))BLkOfMRICENoIatF*}0<BZDwFFf#M?J^kS_TnthSGVBb}j0|%4J<P)(%OJ<d zz?q&}5}co$om#@kAgrP312!@*wL~8xXwAW(z{nurR#Ko)3=TAf)S{yNA}$7T1|^WU zl^GdCH6WV6krG@|l$n=qtr-S#hbj+)8iP6`gJ61UiBoA>T53^hN_bIbNoo-zgA~lJ z%zS-RIcp9EO-2TOBSS-7x75Uv(xTL2Jzg#@25kmib_N|r1~IS`F|_e8=rJfWGO(6| zEZ|@;U}WGjGBi|h%}asmHsWD021OHVT25(k1_y&FBZB}u`W4a=Gjmc?7#SE-85u+& z9zqRRYeoj%;F84TY~REJXv}d1=a&{Gr@Cc=;+7MXM)g2$V^CyZWMF1sWME}rWMBfN z1qKENCI&_ZP6jRpMh0#M1_n0<CI%)31_myz?F>9x+FKd;H-gm&GB7akF)%YQFmN)k zFmN$&GH^2pF)%QQK~yscGl(#N02kO)Mg~R(Q3gH+CI&GE1_l-eMh0=P>FXJo!RlSL zwlMH-V~{+~z`L74JW@!0JA>kWh?t6y#x@2m7+W8~-o{|KoPo~=tlk8qej@`Tg9w8e zgC&DF12Y52focq#3=9nX3|tHX3?dA|3<?Y)3_1*=3}y^sU{zKO5)3X3Qb-PWg*x1d gfs4V6!JL7S!GeK-frEirB!!(p926*)VDDQ20M*CjAOHXW literal 0 HcmV?d00001 diff --git a/serveurFTP/target/classes/sr/projet2/Request/LIST.class b/serveurFTP/target/classes/sr/projet2/Request/LIST.class new file mode 100644 index 0000000000000000000000000000000000000000..89172d9ac6f3ae59b2fd580bd965f5feeb564407 GIT binary patch literal 1026 zcmX^0Z`VEs1_omWOD+ap1_e$A9tK4&1|<e%b_Nv=230Nw76vsCU!8+NgNs3vK?_7^ zb1>+zGw8B2=&>{CGcquzl@u^CDEJf?=@%5`XQh@H=?AA4m8BNxyOk6;=jY|6R%GVq zSu--Q*<|Krme?^eC~FW>tQp40z~Y>rlFG=y?~|FA>Q|bZlv)&$n3R*s$ROmCpPZNz zmROVt;zI>lN-{Ew85tyzO%6&eEKMyg(f9ET4zXrrU@1<`OJQVS)&QB#n99f?>XVgN zmZ+bZukY#aT9KSuPy%r%Z*WOsa<*?`0n}_RxMVRS16Oc<X;E^jTPDaUoFJq1K&J38 z2r@|WFz_=7urnC&Fc>lzF)|2)B+!g!WDsyGDNrZ|hmb;QQBi&oNUJdqg9(EvBZHc$ zv4KKCPHJLtszOeFdS;$Nd1gt5LTIpSkb<M1i$Z{7aIhXP7dwL)4}&>_F%N?UgCrw^ z06dr#(h@UsQd1Zi#F3%{IUE=n1i-G!Nz6;v_fN`7O)g<%kiw$42oiXV401@4SR$5@ zfipd|Bsf1gJGF$7L0Cf*5~z8pCHfFSYeoi94TvDv(%_P!%)E4KP$USZr<ORCrlqA8 zrKW@zWtOBCF)~QOOvudFN0qZ?WDo<p9YcnZfwdf@osoexEvK|NgF%sjhk=)Yk%5na zk%0*mDGUq@Obm<+f($|oj10mI3=D1zObkp63=CXa+Zh<Ow6`)aZ3L?kVPIh3V_;@r zVBln6Vc=rmWZ-5HWnf?sgQ#W@V-RNm0WPqqj0}tn5)6_IOkgwTGcbcyS!!)zVA{sO ze4K%IHv>zg5bJgZw*3$>b|H>!44hE*HU_Tc417LdHQXRI8yOfGL>ROfbQxF}m>ED$ zQDWd=U|`^9;9?M95MdBzPyowIFz7OfG3YUfgQ6eqJUs?31}O$<21W)321}?zWf&M3 bI2f2kBG?&NxEN#^7#LU>7{OQ$>|J>PFX`nX literal 0 HcmV?d00001 diff --git a/serveurFTP/target/classes/sr/projet2/Request/PASS.class b/serveurFTP/target/classes/sr/projet2/Request/PASS.class index 3bb9f9b777f834b478e3cf6f903fabc15a02f8fb..dfad436850b26687c3096b4bad42989ff56fe3a3 100644 GIT binary patch delta 882 zcmaFQ-oh1r>ff$?3=9m$3|?FeLJaDh41x?AAVQOiL5o3~ok53#L6?hxl|he#L7$7k zfWZ(XZp6W0%*9~BU<xA4KqBTG3>F*=mh22x><rfI3^o&EwKZ4@5{ru&8H9YY63Y_x za}x8?^@B@_GV{`{85!7YGV?M^>=+qLHGC#VFv>AnPd>;f!p_LR;+&t7I`LXC3$uo1 z*yMU9eJ<CE<kW(a%>2CK$*Y+p>v<R?7!-IIL>NSQ7{nOF*%@qk80;AA85xAZ)@0`E zd-}t*Ffs_Zl@urxrxul^7Ad3_73CL!^gA#za3<#E=T+wBmlm@#IPx$!F*x%uxG=af zGKd=)8z}hXr)TCV6qhC^rxq8dmFDR2a<MbG@i4eEm^<(=cz_(>$)Lc<AZBW8pir8Z zotIyprx1`>TwI=Cl)}r!$ROaHpO=?fk(r;Tkd~O4lbSM-S4x<XK>+MVa8URsWu+#U zOmvW+9L^{|xtdXF@?J&>6BH$o&|+j@OD!x-%qeDM5Y<2mONas1no*PQGa61dWRk3B zWMC~X$}CA`WMECpDJ{-mWMEGQIU~7*L6Jd_L5P8oL70Jwfe93N3=9lRpzs6Jj0_SC zk_?OtQVa|Xkqk@>%nS?+{94-?7`3#wGB9cBY-M2H2v#V~z`!8Hz{0@5z{SAAz|FwP zz{9}Dz{?=Rz`&qT57EaU%OJ-90{mcm7(r%%ZDL|zWRPc2U|<5<bC-dcfr){EAysP& z1JgDJmg5Y(yBSy`h1j+;u<zH}!oV!Vv5kRqCWA6Wo=b>(8v_rNy^Vnv!s1)bAPHe{ z3GvsXC|J(G=L0rS0A%1s21W)EhA@Um237`U29P(57<d>M7z7zW$zFs(j6s1xoI!^{ zg29YIlEHyNn!$%bh9QhWks*>no*{}sfgy!K3G7WV1}26m1}+9g1|<fN-%_FeRc25G gg$k>Pwx|<311lGU3IhWJ3j-qqD+42gDme7i0Kh4rx&QzG delta 648 zcmZqSde81~>ff$?3=9m$43_K+OpFZT#YOrBMfq8&B}V!|sfDGf#U=Uyj={m~3@nTc z0$GV=iTXK-dFlH8Nm;4MCF~4rlM9&SCq`;=v)N?kWtP}6GAL_IOi)nP3}a+qan4Uk z<zirF;N@Z9WZ+|DVAjwK<78lD5a3~8XW*FlBv_xzwIVsSpd>Rtub7=df{{TOY(r+g zzNbH2hKoUpL57_{nvp?nVxk-?4}&a&+~jpkN(vkd3XBW_ZY2c@#i>PQsYME@MMe2V zTnyq2N+1iBCtqNa-~#DZ<zY}`P@gQrY^cb=pvlM}?316KnWs=(nw*?kT%1;#qsPm| z#h}fg%g&%P*_T;TiHAXtL79<(wY(^^Bo!oMz{6k&@&RjFPHAxl2ZQls118bQwv4*< z!TF^{$*FFcIjM{coS=}>19^c#k%5tcnSqgkm4T6g3FKP_1_mYuMg~p>E(S&hZUzPh zHwGpKCI$uuF0JhhJX+dY8TdDX)d(^$Fz_)jGcYi4GO#dkF>o?)GYBy-Fo;1^GYB(? zFn|CT*wlJP21W)^20jKR1~CQ(1{MZJ263?Q^BI`I8Z5Q8Fz|0<kUY-7yPH8gQb>L~ zgW`UOn2M0bHU=#ydmDrPat1yhuo@$fnvD#M3?d9#47v>B49pB5S1B=YFfcIiGjK5o zFo-aSFeosHGB|57h=G;pF-S02Fi0Ue)e`DdJq9iY69!WTMg}tm1_llWW|0VX260d@ Jn1elR0RU6^YF_{V diff --git a/serveurFTP/target/classes/sr/projet2/Request/PASV.class b/serveurFTP/target/classes/sr/projet2/Request/PASV.class new file mode 100644 index 0000000000000000000000000000000000000000..9339601d5975d624f9cdead16ac3b92c8eddb3d2 GIT binary patch literal 1919 zcmX^0Z`VEs1_on>Qg#L=Mh5ZXBK?A*{H)XxBmJP%!qU{@68!+j;4pRu7Dfhvti-ZJ z{hY+SbbbG%tkmQZb_O;^1}Q9BiXd7U8JN>b3K$s_e2~-xrxul^7U{c{6gcPS<)v0+ z=I2>6GO*cX=4F=HF)}D?5K^oe#>l|poS%})#lXzK%frCQz{kkItf3jk$-u}Uz{9}K zz`@AC?~|FA>Q|bZlv)&$n3R*s$ROmCpPZNzmROVt;zI>lN-{Ew85tyz?L_vsH6sH{ zacW))BLkOfMRICENoIatF*}0<BZDwFFf#M?J^kS_TnthSGVBb}j0|%4J<P)(%OJ<d zz?q&}5}co$om#@kAgrP312!@*wL~8xXwAW(z{nurR#Ko)3=TAf)S{yNA}$7T1|^WU zl^GdCH6WV6krG@|l$n=qtr^D7pvuS~iZBhV8Db_Eg9?K>NV5hb1B-^IW*A67i-$p* zL5GonCq1<U97+NCMJ3=c_2gpEV=!Q6&}U@eN0<k8G7p0xgApSGKTMBfN=i{`aWNx< z1hP*&^HNKoGS*xSCJbim45o|>B5<>i<arp(87vqX_|j8LJo1ZSx)>QmVCErvl7qpD zk%1{jkBh;E!H%857A18;0)mIZp22~Ufwj0GC$of+K^<FAMPmjZJA)G=gE-iMNESMk zX6B@%7J;mD;bCxPaARa(FH6iRP4!P>WKcsk8j>}vp|Oc%gf$m~BZCqLgC`>cqYjAe z&BNfs;LFIsmRL{#PGh>r=0H4w#T=+pz{dH5j0j+4kkRnOv=CWg5D!BzD0DeW@*xI; z(rPFVLl{FiBZFXiYKc>6T3TvRYD#!fW=U!hBZCwy)HCz-QRS>T7$O-Nq>YTs6<qU5 zQbB1>At151II}EO!8bo8RY8M;A)1kaMN^NLi;E$aA)cKfj*&qO9HJP8@h~JXC^Is! zmV>MXsZQcyNCstS*0h|`;tURkR7M5?ctN3%mYA87n!?DyRt!#qj11zC2n1&uq-1W* z$iSYLS`JCajGl}PtOfZ+C5BMih>?Lgv!IxfK^RN?Gcqt`7J!Niu!E7~kCA~fm61Ud zVk2tKw`OGE4K7Jc&h||#fEF!W!TF^{$*FFcpu&d}REX+<Ok_}GU}RusU}RurU}Rtd z6;=!k3``7+44e#H42%ri3=9lz3``763=9lhTH6_Tw6wP}@NWdG5oBOs;A3EBU|`^8 zU||4dVqOLz1_lN(h-wC51`!4j-~yY<$iT=T%D~6K#307Nz`(-5$RG|fow135g@K)c zf#I0e76$%p43ftgcy}|1M+(VrXHeX~n?WU#c{_uekM=eOO<Ng3Mur?a5LsZx0#&|^ zL3bO2v5@6925T$U-3*SAlB~=|I~bg|Gq?+RY-8|}WMwhh#^42Ivm&wC;B47#41Qn* zqAc4O{I)R!TCqV)4*?k{6tSJbU6KuCNYpk4uWby0+ZbY?^4k~^moxDBfE}Cya_~k5 zMg|dv?F_pZ#2J_wKp|wsz{kMAAjrVQAjBZTAj%-iAjY7?AkLt{Ai<!|Aj#m&AjQzj zAkDCrL55*FgDk@?204b^4Dt*|85F^x8N|Q=3LR)@$}-GiNMlH6U}R8Yn97jBkjcQr zpuy13kj0S6z|5e}(7}++kjcQp;LK3Mki(G6z{=3epv92Kkk7!zu$zI4p@5-~fsvsI W6q^jpBHtO7vNMQ-;<*?cqa^?zxYL&a literal 0 HcmV?d00001 diff --git a/serveurFTP/target/classes/sr/projet2/Request/PWD.class b/serveurFTP/target/classes/sr/projet2/Request/PWD.class new file mode 100644 index 0000000000000000000000000000000000000000..bd2e0d30b96f623de53d793640eebeab645495a7 GIT binary patch literal 1220 zcmX^0Z`VEs1_omWPj&_-Mh3CsBK?A*{H)XxBmJP%!qU{@68(U17j^~~Mh1bb#Ii*F zoW#6zegCAa)Z`L&1~x_pDJ(jQAUYWtnA1uM7#S3NkkkaH7L}zI>ARH_IOpf(rB-C- z=UFo{u-RnhWtP}6GAL^hQmh%q$iU*9pOVVOz|6qQ!@$YF$H>5}p&7=>z{nuL!@$nK z!N|bxlbM(5SDKrYS`?C)l#|NHAmo#uoR|}qSd<CkLj_q%GBS%986=SHMDn&ZBLhou zYF-K>1D9(>a%w?IW`15VJA(uxgD^NOGV}F4{oyiP3{ng-><rS3408DW%flecAjinS znVwn_oS&SXTEfU6tfA=xHZm`@L?0q(&B36+$ROZWQlL-_4l{++qN4mFE(UQ1C6KR` z85u-1Aez8&5?oT0nU`*@83uBPDi4DigE}LFV0vnaQ)yaSYEf!Rcu{6aY7rxY6wI#7 ze0@|oYjy@rMh0=PLy*jLD$UGENiE`F&}L*{H8M3<P~u|HU{C_tqsPOb&tSmFz>}U@ z;*wdEnp~1!RLRI70<!|i6l;(sBOV501`|dGw#0%0aKP$f^8$vipf0fHU@&83kX2I1 zELJGVNL5HKEh<XQD^W;+*{sLQ1+vA0hrtr$DvpwTNT_fzSToqNGuSXPh=Dza;d34a zI|gM&2G(*=7=ctf@Gv-n5*BM(PHAxl2ZJ*sg8)3iDx@W5=A@=DGBBnxGKfN4i<%a! z85wwkOA?c_eG?0yX^ks5zqBYh)h!d08aV>OUGzXsVNhgXWMF1sWME}rWMBd%UIqpR zCI&_ZP6jRpMh0#M1_n0<CI%)31_myz?F>9x+FKd;H-gm&GB7akF)%YQFmN)kFmN$& zGH^2pF)%QQK~yscGl(#N02kO)Mg~R(Q3gH+CI&GE1_l-eMh0=P={p!$!0LmvwlMH- zV~{+~z`L74JW@!0JA>kWh?vT528~D|t?djt5Wem<216m!Z48Fn7|gdZSV06;wlUZ* zXW;VzYjy%@-pIhnAj06x;Km@%z{~)0tr7zV0|Ns;0~dn;g9w8NgC&C~gENB|ScN-- r1VbQ$6p{~upgwSC;9_uLaAja*aARO#;9y`DDP(652ZfG1I2=3xD$^Uv literal 0 HcmV?d00001 diff --git a/serveurFTP/target/classes/sr/projet2/Request/SYST.class b/serveurFTP/target/classes/sr/projet2/Request/SYST.class new file mode 100644 index 0000000000000000000000000000000000000000..7ce9cc66e0e84ccd84bd25d9f765cbaa16d73086 GIT binary patch literal 1008 zcmX^0Z`VEs1_omWOD+ap1_e$A9tK4&1|<e%b_Nv=230Nw76vsCU!8+NgNs3vK?_7^ zb1>+zGw8B2=&>{CGcquzl@u^CDEJf?=@%5`XQh@H=?AA4m8BNxyOk6;=jY|6R%GVq zSu--Q*<|Krme?^eC~FW>tQp40z~Y>rlFG=y?~|FA>Q|bZlv)&$n3R*s$ROmCpPZNz zmROVt;zI>lN-{Ew85tyzO%6&eEKMyg(GQLc4zXrrU@1<`OJQVS)&QB#n99f?>XVgN zmZ+bZukY#aT9KSuPy%r%Z*WOsa<*?`0n}_RxMVRS16Oc<X;E^jTPDaUoFJq1K&J38 z2r@|WFz_=7urnC&Fc>lzF)|2)B+!g!WDsyGDNrZ|hmb;QQBi&oNUJdqg9(EvBZG*M zp{YWspJ#+ZNM%8)m4c6j9xoR=gBcHlIfF3|g9U>mBZB}uP!-Y=Gjmc?7#YNo0w3Ae zj0^%`H{>MdrR)1AWu+#UFfvGCQCtKGDn<r5BuOmM$jHE%o>~%|pPZdq!pI=3p$Q4X zywnnXh@dqigQx~X5Nv61Nl|8Ax-}@s1=CYYoJ!NuQj1bk!izFXQi~WFq+ljw=If)% zSu-+-f!&TF!^pr|4${uZz?zm*TAab4$iTzE%fQIM$H2(I1d0L%1_mYuMg~C!AqGYU zVFm^UHwGpKCI$uuF0Jhhj9S`T8JISL)rc@KFz_)jGcYi4GO#dkF>o?)Gl()UFo;1^ zGl(&WGk^dW*i=RaMg|E6Nd_jcne!Q#!Ky5^wlFYlV_-hcz`L7)B~plWI|JK(h#0#N z$2JB|D0>?N*K!6vAFvv3keZDQj0_?SS`4}jEDX#HAg3rXa4;}1@H22R2r!5+2s0>v z<s}$&8N?X$7{o!*4|kp(0~do7gERvp0|SF4)S)sA3=A9$%pwu&3@ls>vJ4CiEDVfb JEC=?kJOD`1-vIys literal 0 HcmV?d00001 diff --git a/serveurFTP/target/classes/sr/projet2/Request/TYPE.class b/serveurFTP/target/classes/sr/projet2/Request/TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..defc04d7041d592c233da7c8ed927073ddb924f9 GIT binary patch literal 1699 zcmX^0Z`VEs1_on>G<F6iMh5ZXBK?A*{H)XxBmJP%!qU{@68(_K09SSf7Dfhvti-ZJ z{hY+SbbbG%tkmQZb_O;^1}Q9BiXd7U8JN>b3K$s_e2~-xrxul^7U{c{6gcPS<)v0+ z=I2>6GO(0X7NjyV2>BrF2reng%uBasWMH$&%*!mXV`MPZAY>4xcFizG1{UZ1lvFMT zW(Iy925trcMh0dL%`i>|Mg}1s26hGx5KDxIfs=uYk%8YQGcVPzG&d==C?qi{2kfN$ z<iwn?#G*_PA1cUFl95@=$RLUA9^~)>`KUNGFNKkT%e5jowV)(3Kd+dbL57h*80^8! ze0@)UxC|GA9D@QogFGXH9R7gfVNhgHVr1Y<Pb~?~PtHy)VPp{2(1dt8FSSG;B52LQ zpu)%?;8s$gPz(-ih18;={30#}X$Cb=0H`xEh-yGIfg=+d(3)Xf44Mqu><n5cQ4Nvh zVbEdFWn|#UNG#3(g(f%*JvkWk85tNILHZ1N7>pQ<85!783riDoiqWiqq!(+=C=Lcw zMg~S#4hC~Z21ZW~21`Z;Mjs9aYeoiE$6#kqPYwoKMg}%lCubK=XATB?Mh1!C^30Ot zjLf`rg_3*)r_8*>qDqC_{FGD<21iB))*MjefWpt2hrxxxm61U(J+;KCG%YQ)C^aR# zD6=HBh><}G7Dk!*`lxc&91QM^45B6m1`3&Z$@xV^smUb@prokB%f-du$>7b-;Kj%w z28%OP%{&Y~4C;&wtmPnUK&t(C82mxWi#08$v^ayEA&`+l9IO>7n4L;9b5c@^I2eK% z890p$3=~2t3sM!h7y=m7Ktvc1LpVbOBLiDvK>;}Z=wgd0jL3tUYR$nA#mK-6c6<Os z3=cyrLmVRmM@c>;5*ZmpU?G9zB5MwY1V#n{cy3fkOU%qkO<`nUOl4#cg;<4}Uac7! zc!Nt4le2vj3!oW-D>%QjC^^+F6O?5*K}Cih$ma}-42%rS42%q{3``76pv=a=z`z8` zYG9g?ft!Jcfsuiifq@~Cfr){cfq{WvYdZs<miAT#K`ouF48j}13Pl+h7=##D7#JA1 z7+4s%88{hu82A`?8N?VE7!)Ad7{nPQ7(jp@Yz-sGD6mCL42%qt3<3;H3{ngX3@i+c z4ALMA8Rs&vFfcJNFuc>+!XUVfLH0NU?`{U^NFn9z466IJwlD}s`fOv+SPe3gp&qQ0 zfx(f1fkB&rfx(r5fx(=Cfx(l3fx(%9fx(A?fx%x}NN*d1!7K)?<qY21LMC9g`f>() zZ6Px-TV*+ev9^!}n60>+L0wD8YAb{Aat2c^AsaA5M@z^K%uv=6asV@=AZ~LKa@)q> z0cCGv@ZAVy?qkjnT5CU@UHil54$ZZUv+Zduz6fbAs^8tG-9^|o&3``6n44W7p zF-S9PX1EWgnHfOg8^j>Oz`!8Lz{McMAi^NZP{AP1P{$y_(8wUg(9R&u(8VCjFo8ji zVKRdP!%PN6hB*w%3@aE^7&bAeGHhm0XSm9s!Em2Jli?AA7Q<r(ZHBiDy5RT`gM>0P zejYP$F(fi1F)%VDGcYhnGVqH0VK8QA(B$Uk=H}qw;P}NLmdDN@&BegTkOGeSQ~+sM Bhi?D? literal 0 HcmV?d00001 diff --git a/serveurFTP/target/classes/sr/projet2/Request/USER.class b/serveurFTP/target/classes/sr/projet2/Request/USER.class index 707407981db19149b1dd8e7c2f60544f365cd80d..441896aaf8363cc9b9dbd90ec1aab6ae7bb978f4 100644 GIT binary patch delta 879 zcmcb?{*F`N)W2Q(7#J9g8Qj?!m>3zvCteVjWM^PuWDv+oEKAhSNz6;v_fN`7O)g<) zV4M7sQGTMMraDV$acU7GgOCqGO>jw3W?s5ABLkaFW?p8A9V3IO#zYT=$@7`SG+CVU zQ&PDYm>Kwa7`Pb(7#Wx~G{ZO<7#W0k7}yy&Kr9g+22KX9iSvT_xLhleQwvHm^Ye<? z8Du8+F^X|>F~~6}urtUrGRRHzlw;*#P-IY=tj?rV&%vO=$ROZWQlL<rT2z)=q>x%v zlwZWfAkCl#vPqqhK~w|NjhbN`44RA#oQZk)d6l{OrNvwf+6=nv3_2*DhIojFL61S7 zk%29>urx8J7|lFkNWfTYMuA*t$ira7U_9BA$&ihM!IY6fadIM~d_6B07lS#2B|C!! zBZC+?xH9wgol4WvQj1bk!izFXQj2&PtQgc88Cc6fJdkP|9tK-bFtMiPlon@jFxWFP z2$>oiD3s=9=jE5@DTEfM7V&a%FgP+Y2sr2G<)v0+=I1G-C1&QNrZ6%vrZO^!LVTT> zKY0ct&tw5ck;#UPV)YD)42%rS42%q{3``76prB`9U|<3TJeX!=;AY@qU}WHBU|@)3 zU}9iqU|`_a+RnhIrM;CwP)lbkgYZVMLQw_=1|bF(1_lN$1{MZx22KVZ20jK}1~CQ( z1_g*V25|-n1`yx}Tf+!4svc|;69XfIB!d706N3~30|N^KBZD;9#;Xj>3``6R3~^dp z7zDR5$R20l-OV5!DWtreL3O{@76xG<jcp8CGZ|zc@&-aC+ZfEC>}?Fz%Nf+693eY2 z2|gdNK@N2wlQuFiGKetvGXyb6GcYrNd}74F!@$5G$iT%Q#2~^T%Amj?#-PI>&S1tM z!C=WC#o)>y&EU@<%MipM#}LdQ&k)O?2==KM#JNzP1~YImI59XgFfzC>Ffed3u!yKc Quro+=F)%W?f&<MB0IU<9n*aa+ delta 575 zcmaFId4t{l)W2Q(7#J9g8O*sDco^h48Mqk~xEK@}lt6?s2ZIV1gDQg>h)`!|(BNRu z<YM4p&|+uMW@pf0XV9G(tIfq`lbM%UV#mm!JaL^Or)C%<1B-KhO6p`j#$Xm^4b8C0 zy3G2vt`*6t1tppJdBuzjT*3LJMaijdnK`M944k3Cu0eWPiDijA3<3-iJPdpc{Ok;R zJPi5_20RRg3`UF$3X|tC$@A&4GZ^zQm@t^~Fqkn&OwMN%lVD^JaL&)mORdPv&r?WC z%*;tm0U2UCkylEXkwE}tsD4gjUb?=2QdVkm$wUWvM!AU_<R))sRGOU5WXR0OAU3&? zNsNb)fwjCSvm}*~K~!Vnd9ixdw4Bo73<gC8ZU!C(Mh0F6Mg}I3yBHW4m>3ut1Q-Mv z7#V~Z7#Q3bm>8HC7#O&;wlgqlX>Vm<+6Y!7%)r3F$H2_Mz`)7C!obA<3RV#Y1_m*R zY6ejTF$NIe0-MUnz{nuZAi=-{Hgh6FJu_IDzSb57rfm$&#~GL*EEXZwZ47Ks_BICg z<qUj2yBRnlg*dk}aP8m7z{tSGpunKaz`?-G0CIsG13Lo)13v>7gD`^_g9w8Hg9L*z zgBXJfgE)g8gCqmYMJfzj43Z2|42%p64EhYB45}c<Ni#5j4C0DlXW-yskYQk8U}0cn N;9y{6kOg~D4geN1QqTYZ diff --git a/serveurFTP/target/classes/sr/projet2/Server/ConnectionServer.class b/serveurFTP/target/classes/sr/projet2/Server/ConnectionServer.class index fb513cedff2e5e8f4ddfb49e36019ca6c682dd08..c95e1e168da0667603e791efa370b8bde1fb541e 100644 GIT binary patch delta 1052 zcmaFN`<1)?)W2Q(7#J9g8N#?2#2Ab?8AKV3*%?f@7?>H1K!hn5gD8U;JA*kF13QBS zNZOK<!HU6}gTaQ2!Ir^}oxz@i!GVi`m%$OF!ik;1nTtV?!39LPf`r}J8Qj?!JQx{R z0{nwQ7#SEn85!7%i^_tNvr8BmCiX{a6(#1SFfs`FWF?j*>X(*e=I93{=B4E4S~D{6 z=jG=n6{R}nq$ZZ+XBJI-V#voET#}fa?VDH-l9-f}I$4;}dU712?&PzKz8caD8axc* z3=)hC0_bM(FnBU}@i3?}XfQH}PMj#J&BGwgAj88T$sonf;LXF}!{E!vz*n4FRF+z# zP+XE&RFay)&fv$x;Li{+*^^0|Lz*Fghar$5Xfg-0vVb&0Fb_ir$hJ_Bfl3oUC{2!K z7ENH!ORXsJ%qwAJVA1f@^n|%1CowNwKe)2EBsG_jfjPglgpolM;@ix8{eYs(yprIO zqSQo?hlRloM-^sdU@rhE%E_Btz-(DBq5;vHms+A9oS&SXT4Jpk#>l{2RGP=gzz<dl z4x*5v#N<>4MFvp@F$M+(CI%)@(12Nz3{ngX49pCSpfF%yVvuEEVA#OG#K6M9z+j=Z zoq<tWkcD9hgOIeK{Dege+*;CG8JLzc$n0idj@-^r&*G~iDBZV>fmM)&A;C^db}Ivu z);0#VjbJ0?7#J9o7&sUh7z7wt7z7!F7=#$47(^MA7{nO#7{nQj86+9Z8KfEH85kI} z7+4sT7z7y<7!(<p81xue8I%|#7??qhU{GdIVE_ROu%j6nR2di;_!yY}Gf34lFtIa; zGBPkoFsLywFt9K%GVn4mf?^ixlV%1M1||ju1~skS4D69wTNs$OGjMEW;M~N(CB(gr zfoC}bpU-Xv-bf+7?F{_;H!?6XFffQSNHOp-Ff)LhFU7#dz`&ruz|Ww_AkLu5AjP1} zAkCn{pvs^Qa&|p~7y}c7Gy@ldCW97Ovl`U3AUCozFh#L5@N%KJO`Aaj>bA)Y%wP}7 zX>DQP+{Pf_vztLMQhPgtkgv`*2I1ul96s9H7(^g$5@nEpyGf3L9UNdB4BDv-f($wg zq6`KM5)66_k_`F`vJ6Hbhk?VBgMpVphe4NtkwK7wg+Y%&pMi-%l7R*8RykC+MzAyR MvY@!t0GvV$0q_u}761SM literal 1763 zcmX^0Z`VEs1_on>L@ov?26IjZNd^lp21y1>b_Odh1{MZukcbUCgDnSx9Tx*TgFQ&l zft|sToxzEV!I{B@i-Cv1m5YI!!Hu24ot?o0B<RV-Ajsgw#UQ}o&CcM%#URSy3nKhL z2Kcix1h6v%GBU6P_y>hBGBA2FGO!mHl?5kfmoPGj`(!1SCF<v;mgonk7L}zI1?MMc zr<PbVGO*cX=4F=HF*2}dcxr|*GO#%3r=&76@cU%urTUfTCZ!gIBqrsgGBODH<R>TQ zge4Ybg7{EDmXeIjVnzlPpW-6@f};Ga)Dk181^UkUd3mYHC7Jno5F4!-8Ms_4l2Z#n zLdA>>Y{g)QFfuS}fb3;VWn>VAxH2<e-_swi)S8ijH@GA*Iomg}0BS2QL@U$=kWpaY zFfs^23;=r*EM(2dz?_s8#K<54k;%;0cPdRwOD#%G2}(^&NiBjX2*;)%yeP8-q9CoL zfRRA~iyz%e3c!x2$jr|J`7b!Xv?w{%EfW-8qF@=M0MG+P0S|*bg9Z<SG=mHegF1r- zBZDYN6eD6l$`p7QWEtcb8HB+qPy>aLK>%z#$YO=G#LS%36p)r69)@6s5Jm<um=;ve zGBQZQBs}v9N=t%Eic%AEApyb85X!?4#t;rNCIUo6Vlf61B#aDFFk}2nOW@`}BzYL3 z7@|S?V?abKBZC}f(m)P2kg7NyhImk@B!B`$2~$1Tt4JZq$RGfAKu%&_y1su>R%&ty zBZH_0B#Oa;!6ikRdFj@mgvFMa3`%s248j_k5EUrNgCA@XLWq%pFFmycDR>we#9<mi zaexRnYeohMsGVpMAZvvYQjh=!JBB|!wFEiLKt@1am6@-PEMv{cAc-&nMF!1yNVtQI zcY*3ac*h#zWz2MsA&z7WYjH_pQ3)dhe?d`ZUI{q!g%l+wr!puqNHRz<FfcGNFoBXV zm?g^~$H2hA%)rPX&!E7-#GuH)z~Bc~!N9<$wVi=cOL{8<lh!r{=8a(WN(>APLJTYn z3=I4XEDQn+oD6~tybQt&$_xw)Vhl_S3=Dh>Dh#R&AixK<g^@vxfq{XAfsuioff1Bz zpth7Vuz=OeY3*iUiPYM{z_gu#bt?ngat1!1-3;uJLLA!}IQMU4U<BJG#K6wL%mA`o zjDeMbfkA?SpFxH}h(U@$m_Ztp)8H-;X5eDbWY7ZZlY_cNn}LCWoq;Kcoq?ST#W^|* z8c^rlW?%&y?4h-Vfo&TDm(Okn?#SH?JdxVl7<jic@NH+{_ub7P5V@N{5F{kDok4gz zgNWa52GK}u9o_8=Vpc4YEZZ2wmosqqXm4YXfH>Tq!3pkgH3m)w1_nh24hAI#X$EBm zJq8s9D+W~tdj?GgCkAx}X9f)hcLr^+N9-8b7&sWr8FU%+7#JC(8B`eb84MVh81xtf v84MYW7?>HX7+4vM8B7>h7@Qec;2!os@-Qa@({~0Zb_RA96fc{C<IxNNJ-(AE diff --git a/serveurFTP/target/classes/sr/projet2/Server/FtpConnexion.class b/serveurFTP/target/classes/sr/projet2/Server/FtpConnexion.class index cce33a413af0c96f7751d99c334dcd32341beddc..47d2df0040fc2b08f3e6bb61701ac251be384ea2 100644 GIT binary patch literal 4080 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 literal 2372 zcmX^0Z`VEs1_on>B6bEQMh3a!BK?A*{H)XxBmLmiqO#N?eYcVV=ls09)QZgfJaz^a zMh1bb#Ii*FoW#6z{g8~J)Wj4<2Dak-<m}WEMg~D2uw-6piGDCx$eNLXIVmlOkwF3? zlbNsYRGOBST9ld+l$w~5S_DxLj!i*$QDzBP0h>)`US^3MBZG?u#1tg+Ap)4jVu(Xc z(+p!|U~$e*N#$Z-X5i;x;ARkDWMJ0N4C7>AWDw$EU}azfu|#+n*cmuLEHNGiP6jSU z27aH+yi~u^+@#c^ki?{%R7M6NpZw&+oUp{AOb{O`$WoG#S<J|w;DbLTtr;0u5=%=m z7#X-+E0R+SN;32FirE?D7#W1YA()x3@97Vh;b2f;WDqbiGEi^}2~Y@j4GMD&;^pFE zP-0MFXHaHj5QFJ~g)PLhJPfJ~YK#o5<)DCMWDtdh9yscPONuh{(ycYaK&EK$Fld6p zfi*3sv^ax<L7S051Y{FD;uX>oGjmc?xEN#^bU|UJ#>l{!%E%xJ4`n3BS~D{62A3oz zXZt1=Km&!js5Fm@fsw(Ohe4V_0Az|O4}%%VM*f1L%)An?@{pp$<Ww#O3kEB821_h{ zf}|H725SZzMg|U0!UM$!BZG*BCd3)Y{sP%%$HQO`@;?hmEh7U9$N*5RfddO!F$aS) zBLjzHXo!bGh)*yVgDZnOJA)faN{0j&4}%ATCnEz_aY<rPNpW~4DE_d9Y7{$zHzR{I zQW^+KEi6qfF3|_s5)Zb;i@_HZlzxm1${K`H3n-er7y@`00zrYsQk<HX!od&>b98X9 z4?9CB9{YlWeYhAx7<@rQ00%=PBLholuxk)ILo_3UI2K2OB)J%(KpLVL0yr4r85vjt z9D{?|84|H;07-H&B!Dy|Fa$6%Fcvd1uopqR%*Y^%>^<~=u*N4J9PDGw$RLSLKgf-^ z<Ur1`W@O+@Pc4BILyQc<uvCInb}%vsrl*#m<{3r?DVR#6LIskatWh<9(o<>?b`20Y zYeojH;QZ2}<W#pzP>CUkT$t*C(jkK)10w@70|Nsy0~4t1VPIfj0+l>qnv;Qxfq{XY zfsuimfro*SftP`SA%}s9frWvAK}2gi1D}@mRt7;WovjSQTDn^qL^pzUi8C-Th%vA- zFfa%*urLTQa54xp@G*!m2s4N=NH8!kXhHNdNHRz<fPe_tUPh3aV4Io1ERfyI42+=s z%D}`R!@$76!obKN3wA>V*tHA{@>*LMM1|zHF(`r<+ZfcBGw}KBW{`~((%R0TvwtH4 z$WQ?WVFp<SW(I__q!>8C#>y~=Fvv2<G020RCB^`<SRU#u5e6;>JqCRSMg{|L5HJO^ zGsuE6wIPE5G$d9sFoCtGXl-LKTF$`XqrHv6L~9F!@HPf>A1&=|47SVve+COK|Nk1S zl7)etL6(7sL6SiR?j$7!4h9AWWd;@o6$TClRR&N=D8it{AjzQ3Aj_b`pva&Ob{-_u zRG`k|U|@kd4-|S1436Nifr){f%+0{;&dwmq;t#Tt5mXSN2O}dJ12Z`4leC4LwlTQO zWDwrX;1#L0ox#UfXB&h6at3d0p&*z<2uLCfBoV%x!AM&u0wxg!l86CG#4cx$)E0^Z zO9<>{NB~JBfh3Ya2?G)XP7DIz>YkIqgh7bGltGNaj6ssYoI#1ff<c?Xl0l!riouA% z8dS(KxG>l<cre&8cr(~DgfKWT#4<QCBr>>wgTs!2je&t72^t(ARth)}gcw*DQW?@1 zm>9IdtaJt@1{W|ZgMo=57R<_IU;@V~8v~1^goG#qBSRKLHZ)Q}F%C*KtXf+b1UJCb xGaEQ5xr40+<pc%>R;bmC3^@$BSTu{GYxcsbIgcS9i)LYT&AwPQ7l7SY2mp%7<mmta diff --git a/serveurFTP/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/serveurFTP/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 5b510da..c842725 100644 --- a/serveurFTP/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/serveurFTP/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,8 +1,14 @@ /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Server/ConnectionServer.java -/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/USER.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Main.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/SYST.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/TYPE.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/USER.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/LIST.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/AUTH_TLS.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/request.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/PWD.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/PASS.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/PASV.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/AUTH_SSL.java /home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Server/FtpConnexion.java +/home/hocine/eclipse-workspace/serveurFTP/src/main/java/sr/projet2/Request/FEAT.java diff --git a/serveurFTP/target/serveurFTP-1.0-SNAPSHOT.jar b/serveurFTP/target/serveurFTP-1.0-SNAPSHOT.jar index 43b1e6069ce7c6cbd59e507e3fd2782e542c35c0..85cc54b1bba6e2606a9dd8216b5f5abdb3ce1777 100644 GIT binary patch delta 13485 zcmX@@{G_}-z?+$ci-CiKgJDT^dXU`23Z8rh28J321_luZ1_oc(5Jz24KR10}M?X(D z*WeI6UpLh=2e}Rz@H9NEUif~3ct!!A&6j6o!c|}8uANw<EbA*;Q@uLwzx+NIE%R++ z>tcMn+$26cxEnK5>bb#Q<vHb1VQnt@VG<u(7MEWR-uBIYcXp)9&-kJpPu#_=8lA(1 zI@>ChH*<s)u77&&ZO8pLbIaueyxBRB-34(m0|x`h#S@pQFpK7-PdqEfES8f#@tqp; z>8kX};*5GA?qm-}UFId#>60rMwZQaJMpH0-m(fA!T~&IJ{RKY5b4&~j$5|K{WEmzW z$cj!rC&yLa8XWB}>?rbYnfSKYZ4Ist0;d<PSgODsvPU#f!#g9WbpvZtzW2;SPB+)y z)_vgrQT&IGlIlg5cpslXfyazv9UQLs6g?|S+jn~AOnH0zTE+=&dW(6>7iS!`6?}Kv zBgvp?N{=E>_sM1sx0DPC(L|l5Le7^Qa;E|e6dz7(IW9D>-hjnBuGR5uc<kCoR=4j+ zU*~!Et}uM|XRXNN+kQ4ay&>5au=Z4JTSeXNJH}f#W#(tKJ&*dP_H>q-?(I*@B-AGT zXa4p1#{;g$^trs}F3j4V^KaL--RJH$?TmZYbWU^DQ_;&?kNin7e3Ba(+V<{qjQ5}1 z-f-L8n-`|H+|t@^ej+xgeu1&o<%h!2ebb^Z@OSNb^mAKMTe?_z+{~%MIX`tgc{V+~ zaz|<YW*0TB1@0_eO@1mOM=q{=U}dFZ6Z(ONMa(q!c-{8bS5^tBiP{{W(j;DS^1^(- z{*~R8wYM&WCI_B>_Uzh~LwnZg`AHvpb?8!#&oqOz32c$9n>{AH@BFeNYIAvgPWt_@ z=_@}O&RqDHi<>7m{b;DSn&w@BPn&pR>sRv4{ZY%#{rdKv7lvPAHs1VN-F9UE`zbZ~ zMdu5;tml|*S7-klbo<WbKS$57di}rk@}j_=$YomPDxasbrn22Ph*7>WGiv3L*nJyc zMa`?Ivt9loq_x{p>E#})!vgojo4tLW&x^0$5wb3H`vrgbmAo!J45qu{eq}Ni9`2p@ z;iBtDwzJnV<d*C+E#;XeW#yz`TGR3%F*(`%sD+bAYS-D0OVhI*d2F{V`gOcOc&|gU zN=8JoN(akXU6mE$CigSS8-6*xQf4Y`*{AHWIKd{y{c`n}U#o*`g51BP#I*lmyt};f znRn;3`akI!*&lBhM(vXmn#?2nd5PYQ3v(7(p4j7KWwr9I+HR?p=O#qWopOHiI+<Sy z0SjBE`(2v0_-^eKVLmSPb-$#~9scBSyobeAO(sBA;-kTx%#e%+;-E}~oZ2Co2$b#n zs?&qaJl*Y8SQr@U*`fJBtllv=OfNYnvADQ3<b1evsK~##I$sHP4MmZlI+LYaeHW;j zT@72fmZ{0r*)b@1<JaR8_8f4SHS?TL#`Se~zU(M^eDCoo*Yg)2Xg+^&s;ck*1nd6$ zvst`uM~HvESNs0n@3VXF@BRMw>-ov|8DgBAojnpR6c_hp=X=}FkDmNp`qJm(`qi6{ zPHO8ourasz`kAX|ex>E5CPz=J<uz;+mW{b{O;2FmuRe!e1xJ=?+>L$tOsqEj-n#2g zolmbj&v9g3RO#vcdIeUW>yO=><dAZ2ori2<iS!F6{`x5=r|mi*!JE;+{Y7leu01z* zY*)M+{mjjmONFcK=9;NK*MpvaOFeRblTBkt{X_dtX(@vK*R+{_9Xh<Jq=xN5ri9Q7 z{u3MC+_`jWq1$oJo(u^wiRw~5HaA1H3tKh+E{eT3F=dtgWL=gCr7xdHO*bxFGE-3Y za$Lj2Y3s6gTd^6gyJV+pFhSEs+v{Ta+FxovFMhBJJ%54ex!AHkV~gc;jL+z7o}#<5 zo0EC6g?>W4!Muj0p|`&>`%N$LdC1FaY4ppfgiTNB{A=d<H@%Kdl{+b8HS46%^lfQw z$7k<Y^H8@jMSX9hc184p_6GBu^Y%x)<sQiT8uev1Ubw3%8(tWDc<b|Bn^Th?#O_fS z_&R6S(VTOoi(Z{OT`u*^f?YrEyy==K*Ilp5-%CdvSk$mB`&zwJ(Ne8~ZyF`pCTUhj z)+CEPF4W=d`0VxXgahO0H?@}wo8)$1&^$7I-K~Wz1=?Imp$RQZYnDEo)wn3h{M~Kc zrLV5~^Gqp-UeG_~yy>dYm#0qUUjMZ8^hUdcxw`-M^xav{&GY<o_$BVrd7RVYOl{BK zn)))eFV#x;xNKQ?*{bO4AL}jmUHQ;@;N!UjwtYdhGPMi*PE{Rth~zEV5|v#MU0C4J zFMG~+S5}m%=dz@@>Krz1+1qo9S6_YF9460gBv+~tm-9a7_J*e$w*IodGCw!f^3~24 z3j}-87F<aDwDPsyue8ean<cmWyW_S<=SAv8y}GbeZnEanj^LW5hyE=3<Me7{{iDy) zi|(+_eVuKi`$^`}I{!BZXUzD+y0@Qsw%t10FRW{o0-W#kviKj5zV^ahh(o3IRED9$ zZ-K81Y<C8|c$9rgDu15epPqYaLG_EO<(pr3POi52`rGc@n)dGn+YD~He7of_-{I}9 zsJW*nZmSd)pS5F3#q!RXFJIWDT@Suk@GtyK{riW_M|#!ld|Z_)^Kvb#T>4~BE%v>` z)6&SXRLyQ)-_{HHng@<7KjL+C%E$DW6?u>HqVKo-RIcK3JRmCiA^F+VBXaW$b{8DD zU{cJcI`@vs$padn<(Hc^D?XWU$VU3VVB1Gww-@GK=MCRHR{58ZDl$9U(RJRon=(hg zuSl9)FL^w%{6>?jo$(K`+fxo5`ORiMMakuB;9=XauYzg;?Y$C#r4~E<<IPuiS^PAw zyI`>5)f-mPum4#=r3`Xef+%G`wXM;7qucq+3=Cgc85lGeCNGo~ne3}5R^K`~K3F<b z;@JGjOKxtsD_~|4Fxjm4#wCFXApy}#7wL-i^0IOoJ(_xY(^~FC^UaotueN^gGp=Jk zE}6GBd9vipi`Diax1Yah<GIq~r&j%KPyM{_-}gO#W3T`35BCA3ZKXa5i7b{nSry^# zGTg5|&htC{TPpAMg#!1T_7Vr%BfK8guj}jIu;$@o5xa{MkJ*YA#vktD6P~~7ICE;; z)eke<&a(<hzn&e<v`B5i*5<`+wF<0iuYX^g82VKvGS}kZL}8Pf-v=goGo9SM?)j<I zXH&C{Z^wlFv2|AnF1LLi_`Kjc=e9L>)pT#}%8x#qt6gw)U%n5^wC&4l7S_1$I{QjZ z_n%_@RO5N|JESeX&+1dHH4nJ>$$GnP!QOj(tJWU4U;e~Ne)+CP)$@|QuYXr!{(PA? z^Co+C*y?!i`VUviqO@A1PL@fi3FvEQIo9hn75vT0trb{Rvgkq`>r|<4dI|F+PrbBw z)Sv3Tz@()hbemJ>@`<bNeXwqPyJi=c?suzydxFdY9O`c#P|@S=*=wi3Y+94}K<$)| ze3gaP->ydU3D-YdaFESrS{$gqblVoDmv1sFQW9jPnI1b=rC((%e7Vu}lI_x+i4VMU zxJ3T%b{D;6uwiM`53fMKzyDXx{dRN99`&nV@BS^gC-pVu?Bt80tLJuS*4&?VPVxA= z@+UWi?{LKUo25L6sDGu_%WoLGeQBBRwwc=3&wF^yny<4mdg7KGQ!cJ4>1}hqF8#E> zM@w6-WW~%(*R2(-+nG+6eNfwflC$oR;lGL{52eqyWy?6pihd8@`MWo}>GfPM{zVCD zAG9~Ie!k_u|3T8y4>B8*V=NtOmbV|dH7D}N#%}JOpJh9Xrtb3+KbgL;K5624%_To% z7SHO`sjn3BnV2~5t9ayZv(<6QF0F#WJ(?2@-QKgl(+h6qso=ie_`%nZ`_6;k8cF(^ zVwWcfFDRY0jiom8U#0x-+CL7_J+DiivfT1}%73KF!}j=z_ZK#c?>6W&jIwvEQn$Y4 z{Oo=D8P@D4D}^pTpZH{R3(rcmNb`FCX-t`U8`>7lTTsPlm3Cr%(emGGx&oZvNb_d? zmAUnX;cfb~fVZNark9RNSe}`CQ*Kjsacqyga_IcGkAhmJBsVYjaOGNExO7EoQs2Jl zFXxJ<guc?_X`7jJOy*wNzLR%t_P$yn%zWih<(2iFvn<-HwD-uq-@^pTsgV4r1j&$y ztU9+kJ!td7{3BnP85kC`K^p|3^&yb~uCNwCY;d%zMBTK0H5oouK6%}QY^^O%m^qv_ zYHbz0v|wYVW7Cx@=ba-ST=+7lqUh2kY1#F2KAw_XU-HH3Tt(|GgXHutmn7fsEjt$X zn!iBic)EG!)TSz<-M`=M{#|E#e)rFh=kxb78}#-H%wp-A`Zwj|_id>LQ|n`<y$?yT z^jP;~`X$9J93{E8x4%ibSY|%CJNxz~ftCW7gbxD3`}c8~<g=(YdVG^FFS@i}_3sm> z0I$k*+T}9m=Za=<zMHb7Vd`INH@y$C<&)Fh&snb%juDvA`EUN>=4Ts2t^6xrUve<E z^4+qyJJU6Jb#8)%uwu*9E7^;9+Z@vCuN6MMdg`p{%k?+1UFS{;-_X5!+xr!@&Nqc} zEK?gB-|T;|R7=adJobRcdyy2)grcVca>6ezN?OGkZT|7$$N^6mr;3;dPwKCyKN6WI zka2s8<2mg+6I^zvORW}vdrBcP{9K!%)3yu=&1`wWm%r!bCvc>TFf3-Oy?A(nk$|&O z%a3}yRj-$;9W&4qxVPzaG?#C0qFT?Ah8e+S{<CHrGC8TlRkrbuM@QBEGso7o8#;HF zNIc(h;h&`5O@of`*D-oi7e2H6<#B$wUTRQcjEKd&-EUc1b(aZn?m4mN@vVPzPxz(@ z9Fyto>XK=VKXpWP3G1%Tvo)#7&cBNO&U(*sDZSh7Kz+xC_x8#m`UY1wPo6wc)GXmh zA@{uZ##cM}4m+?-cdqbU@V_8gII=bMb?(;S?dxYnguK1FD{#$}?M@Xl`CkPpJlFOs zjQy4P<iz7E%{$np6}b7XR$KQl)G1-Q*RJ|w{K>BxRy~~hG)CRn>Zj_SyhpryJTEb= zuj|g0v(4~cy#3^l`on77IXC<QjkYM9uD$8}YidsE6Q<n-kGo>CY&evkhyH1bDY&xC z*S3)}^+a8&oy^*dNB#Z1^=7`WR=y0~Ankij_RiCt`Oj`i-amY?;*s92$I0avH?P+J zR=DlLp_>ox__3??U0O4Lmd9P5;{`GoCUGfmS;Dl^fceEEE00+2a%Zjj1wZB#37hUe zy5F&!SG~^RxGm4qwGVCQ{F}FHUd^_)7t?P&uf8QT<FQA<63cUiDHcI8k$p#7Oal); zS>6#|Xqh<o>Zc4*ap7yhQF1GjtP*Y4J`E1-Ikq-EGC|b1@bw<CV~?(}>hc_4`+TcG z#QEHNQ7axEZHqZP^=?}QzjtMJC4arP)?KN%ji2UZRpj1(s@0cPnwY=xP+4TL{=P%{ zE)TQ+tht`n``+lQgSp^ljjxIA9s9g}?yKj?f4J6e(b)gvlAYS4`4euOH|WtfaEf34 zGE>A}(W~CDs^_s?;4jg~v*!P^I>lS}?(+U#(@g;n@)%_I)+boCL|E@P*nj`x`!<6V z;}3^+EsOgHuHunP2Sm96s^Zg{-uve=F)%Q}JJj_)p1~o|aw8}f)UCF?te3O<OY^oG zQBm;#9oJnPi-dYPl~h!;CBy>dryJ>Vmu^4j*I55}@p+XfA>S_-kI1L)*}S%c^VQ)y zGp)bhDL#K^=l%McUrY&%-fWi)CVM2_Il!V;ddK6zGDhCuQ~RenoIGH1>eLyPg6QLG z`nu}*x)tLl`?6i;YrQIRka7CwX@`#rieH<RvyNrodH+2J>Q7wwed4q2&l!oEzSw{G z!q>b_=uKhUnzuh|7Jp5f-kn>%-O;?#dd03@+3<=}@8hzH?sH3aiO<~r<F*+8($w|V zw?pE&ckXwu^6r`&cy2-M1G$~k#3NqMUacN_Z;I@~O!xX-R}ZJ>Z9bhlhka$!Ll)h@ zr`hwmR76W%H!hjrY}l&vtMts$0`|{5t==yrf4y9qCSiN)i4%*{QoSVw;@v#K-Q2}# zn-AWdFuQlbyPwZCs((K#e(u$@oqIlBsoD3&V(ONKkK?$$hhAeA>HM^(IPI)z;+Ino z_kU?TFmYAe>+5UJ-es<jo656zdV_0vy2S7A@qxmxVyqm$P7vM^FzcPk)#sO9#RNIC zdw+Yss83{GeE&WR_nH1tTcyNn-Y@;2BEICQIP=%H=OqMrW91TGScb9R%I*!@(O)R_ z#6-eqOVX?0j1$Qv=M??7Ioy-_X?UymlVn8YGv%b^f@uvoY=xUVrRth<>gCx^O21l= zDbKcOa?(=ELmXWq!E@eg_%EDxN?ssa`5*7g^B3ZtSD(A^du#FX=fb%vyPuo&d_QqR zaG8IiUuPae>Y1RI6)LGroSP!GuKU+9risWa9ud$|Y2EifCayJL@eU^$m4(`0wAQjb zVqRa8!M1MV^1zt28(-|aUJtJ1G?0@dBC$%ur3WP)oMczW%)rpj!@!`!Fj-DcW^%r~ zQ2pAl-2B^S0{`B{AFO2F#xyx&x3m;XS65>82Bwcf3Yi!4*_`L5E)&t5FhwT$M!mde zU{{Lv+Sku!SA4%C{eGwL<n8^e?xq@Nm+Y8v?(t2L#sx;nO8aNj?bzLOZdv~2lPa21 zYZ$U7v~t%P-jxWRmmD)e%Eiaa$y~sD>f_n3RsZSM&$Bd_tNgbjvi)A(_K)AT9@kCV zZ251?o?TnpSUYE2Xyf3z%;|LPQB3v6sY{Oh*t1WH&$hkdN~Cg+jo!BBnOTcfTF*4p z=WzM&)jP<1^T@&?)zzPBr)7!$mNw{S*>1F4{nQ52g~uEnt_G|;y?Zvx_al6w@65Me zm%jV&^YOE9?_V#k=Un%@kwr7%!6EKB&)PMdroXq>y|1`SQHlKskCD(!-USz?%s0Jt zXm1)@fJo(Rua8^GUw-iDn&j-0Ix%7SXT`OpoMwR+&MgzPDF0Y{v_dR9Qj_aFlVs5O zR+f6f%R4fw5|XF(G;>Kr|DMg#zuN6APoU+Dz|9MaOdr$<`b}`;RI1-BQm3_A_^p)V z`nCL16VfgOu79^xU!jfn>w;a6&(++^PP>qm_1TLzBl}K``N;=~W_ydnoA%$@rn=|U z%m^XJA`OQbS1vbt|B_5C(hgXB{VhxOah@RWX$!q>_bphu+j7dmSs`~azIZ#9y^sq~ z%swHrP32UT>r$OK)^}eHz4|5-QSV_X&}b3OeD~)2_=#*EnwK9}^FJtc*~{{OBGbx{ z2J2$ke4m5$U;M(u*KV2aI{o<Mgd4LTT(#_wdJ?gi?QE6o`MV3=m!1~R)W72KhOsoK zGk2@+%ZKOqZhWbE#=k^u=92i6wfg^WX8dDxTN<%>Pf%U%yKGx0N6o1_*ZD-w+&^Pe z{bHS~dVgQue;AX#_L+T-@D|hF*}beMbe`%e<-WOfSt95J?*}8(RZP3z%{pA?_+w|6 zo76K6sTudwUor<yd-lb6<BLCkRL-%jzi2C*cb@gxy&o)LYYVnc%SvrtyDQ=Txm4D( zURREPt`yVvd;0l=POE5j&5zBOkH0k7vo42OXLlcO{r(Q|?jHp|=gHhJdta^pFM%Uh zWLKi;l5gzlI@((c<9+^|?7X(O+;xwN-kZs%YPYlPDE@TEVNS%x`ijE3Kdt}&O)A;^ z-%hXmIJ>>I*^X$|f3{x^*=s-lT>UTf+`o#py_KGM?X3CM`=$kMKDR&fw2bkyw>xVq zA2vVluK(1+?)P0|hL8GxW>EVSIe#K@E~uJO$SfBrnS6>xw>}tArEHlpt%<3LTVtA1 zEK6X=F_xblYT6Rp7TC>P>T}xZ?%K`45AOeXVchAosMBuNkHtOZ+gME%e;9l}_t)zC znYlCP@84I$Y|!q?oH@gDi9uEZ&tt1R)q>j%ZJeq1Jr^V-2)U{*6WXylIm+F${iwkD zQ*6zd?T51JI}+xfjy(PF(FE>nU$be<_n#k+dtjgRqUO!dc{PU&;(o+`dSceRP3BEe zThH5{HG6;NwRdmY9jxwuj!!GE_O|G}O}G7g-&HCe{&4@q>_4@W+b>1k(z36P-X{BK zLF=9Ss^?g*HU`Gd-}_!}*EI2n^X6gw+ItkEQ!e+FXtV3zag(mUzk?%4{4nRNMTf52 zh<eUHJY6J+E0Sl)1jqiqnIi8Jr!D+GNsPy~B+0mkFTY5UX`$EipdI~{ZJj@NN^TB( zo_FGGRlw((&nG5VKby9BSEk<D^)vLR%PgN_R$}AvaN(+`0}PIFJ{Q*Pa_RH4DmiMi zLLn)v{O_!-8#kZVo|O1u5>x%fOFYWq_obaT9a}0K!e^oST}&<d@YkJNqWq+C;t&42 zd}ZRH&)FAC(^r1V+#L0^>HR*Tc~6>l%u&AZ=3lR1!2hR$ZGFmH6=T<$AGYnewAinC z;p{M<SRUIS5^p!3nD|CDyZ4Pm=Hd#rusOeaZg@_atbViC;-pF~OLL0&uM@BGQ|l-1 zV{@@?^?J{F-O$0X^=IR&kZVaFg_D+d{CD`Jy~TWIpK(cD{?9Klk3>#>`zLbDz2tVF z-}F<KiaTt&W-Pn*vE!74kc#n@b?t9#e3XKhv|V;t?6Owepu%yzOJuWz63?OwYE{i) zOdtPb%g$;{++@<V+EhsP`?Gvd@&qM9l@cZf20j)B21NQ4txga6`$4L<kcokT8_^7M zb9IC@gJ5Y^Y+LMhk*Ea?U9KXxKW%L4Vmjus(bp%;Q|I819b1AUR_rb<>;9uG&kIko z>DyUN9BXIX+-dxLp5^yDH|6c^>sbrfv!#-lD&uG7K7D&K;be{G{jw$UGp?R`?90p9 zc+mFu0ki0ByOZnla^9b;TCgxa;Zc*w)xTUvW;;eNNch{f(z8@yY9#Ni*YjSVaz0*s zo#mIj)jDAtp&5Gr_+xGfd911CU8&r+rBQ^fB5>oDsZ6F)7bb|Di0IRfFS(cFy)`p` z`x1w1pI((^pAPer_--bAaNT3>p6L3Ovrh@_E0JcZdb&aHHY4i~srq9qMH40a((P_r zSYI@3)RxlY_W8G)jXB&<bHc5Oj%QcD_qLj<J#9_LrKycK@5Xp9I?y#E;)8NuQ^=`c zt4}-RrrGKm1Z_DtJBWMA<98S42ORfhHr}CXaKw6E$t>TMDUYWXF|E9@>GE!k|L2Y4 zA{SM9cXxjd&19EV{oA@_U9#BcdZ}kDZu)-48w6IptQL3kyt6EJiAKmBH~s394}_Cv z|C+V7Z~yEgw%1CZxh>4J*7fXXwKhtMP0+bLVI6B(?f;#3-<A5Uuapg)9;(h0l(=5( zkc-bp!6TNxERr5ZKX~0&IJfECPoc$Hk0th3{bX^g{3dMVE|}KwnW5M*r|E^r#mIWM z#jz$u5^Re?Pk3#WP_#Q%EO5SFJ?Xzgn?Sr~y~{I+$M+}xYx?v0%~oNb+Sl*yo)GH~ zw2Phn{B^R<zT*v|58t=_P`<>MEUB&1@6MF2!F?j&h=PBSM!~$r6H-rc1g@4i9K7v+ zOvO_5nyHqjclaM;@0rxWZ*KC$IXG<5r|^149Z-rzPL_xS3o1}`BrBxa*cli;@G~%| zK!)b#i3`_<N0$U27rlFZQti{zM-OfC<zZRFz~{uo!qy(d-o$I>nH)E5!{ZBPqMuB~ zZcHjJJ*uqOzs&R265iS+xlWUot>5xW*>~a5BI)g(_j6yoiu(ID{@?G3>!xn~6}jtt zjAvcJ+nS8Db8m{z&6#=g`I)P||M&joYnc0EccYz6Sbv<&y2tgLvi?#(bmkd7IR2dH z$A>Kn=U-HW9e>XHvx$-UyyS}GpPOm|XX&$kX!<gp`Nt-O_=(R}TkR7&(9IV0p|tsd zdCC{x!k?2m^w|rJ9?-4`J)X^W?P2t#J#q)Om)0CVP&M&-_n*5A`_!xMU;o(l#oj>R zApcUuh$|nJnWJ6rX?^N1{ZoJB0H5JK#ZUgFdomXUKk=JbzwEItbG6Go<xl5JV@x-M zzxm!(<9l46r-b{S?kD}ynCpg17wXOTp1)OwxA$*)(DR^=Yn~nv&RXT&{Qk;|hPE*A zlTRMmwq6W8z0Hkn&6SSS-CWLbT+U_30=d4j7u{SlwQP+b@2%!3?nY)u=hOx|*Pk$z z_D}UcF5EZw<h*5$ckj;3Id*gTLdzm=huQ3=Klq=x>F^%>=X1>}Xof}V&68JF7JBb_ zdTHgygHz@T?zDMXe$1$n_u;=ivh%kTr|T?Np10vm@if`@#cH8B;zm1luA5frFInr^ z&h+)~$|mDucU@Cld+VZBS?_tD5jrvKw6LF6eeJh`tWA67o!3jr)O&vTTv)94lWVnI z@pre$=|xn^{k^sGA@7dOAKwX|td{rsroL<1A>q!tM~$7`l~2Q+FMF<cj(z&{fy<)u z1j9EG<xXOGUyro$>7`AR@KX^#{HtoW_|Zv+k5^6SNDcU=(XKh&k8kd_IW9A|`c6D6 zw<mYWu^O%Vtcci)UlzTLVV-{H9$V<6ZpW#&R2q{tcTIR$b!)ELQa7WYs}e3fc%bur zw)VN_@lz(A5Ph@d>U2RP({oE-m|Zk0l;NLc(Nb-?=1X7i@`$BbWt$#c*gADqfuXFb z@Z}#<cl_LHl0SO~|NIXhLT$Hj6>NDBGI!^KPRT!RbN+<QD)+fl-(M%(Uf3cjY+fjG z++@v*7dPbIdCPH6&T8Jve41DIebeqAvK0Zoa+*h*1;4&pcX+X;+|iCT4x1Bi{&~Oj z<Rd}h`Ho$CCfINo`<MJVctrlAI&b#06KWs7qzl(iWQYk~c0ovu>#O&wg6Kry`lI(v z?rifgn_1!i$f{3z%S4e+VWstg@}E1@-_K3hGCk(gwsOJ!DpR&Mb^lOZy+<_0#YrZ{ z#6>CFx;&5ndFW1_^iL0S&T%f+o)e#!5wX1_^y%O8K{l4p!VW)Z%DH;sz?m7&p=>7V zAD=M<^()P52)Vp0a>bk_M$${(@4O-^zWLm9rJy>cdncH_KV77_dF%7kGj%0<Ce%M~ z7MznJXZ_08<JQV8rtevVo(knYnLFj}lXjy|M=I?2o;+(i;cgrG%J58d<h;z>x+0sy zlkYrvdgim^hvEZ=U;H@{x@Vr=orCM=*wrOnUF4P}=x!S19&%o5L6sQO)y;ex;@NsL z4IL~UU%Fl?WRdCebM8L2EI@c}V}1qOzlSeM>#s}+u<qTJ`68G@V1;_Zl*ZJ{2Fo|r zaPbD-7iqe9p-a;wE|^>O=DOx{Wv2T-T>D`CwyZ9Ft*dzY_r<-8?S)M*yvj3qk~jjC zZ#K2DTYTG`|FFMxnanHIx~rXa(%17jTD>wRIdYzLHTiOWL8`@;BB||rt9#uJaG6}Z zv)n22tZhA$w4|H$b7hxzF2-htGtOQ$nDz5urO^D4ZMjby?2gXwlbW_!EIH0+ewxp$ zu9s52s>^yW3Pp8ud^zqFadZQd>Y8``K@q`welDD)bMMdgOJ6Rha{H`#G&6*$r>OA5 z<4gT-UA8MWSeTX>t%$vH+xM*BynC^G-rUuCpkd1VXD6fi=lW0bkFIX=2zj2ed-LoF zw)=|fUfHi&{ULJAUFEfv)0Wk3n03r)`}7UpxMrno$eR(8VZCQ*OF`i3{?>OZ7+$m9 zP&jZ*>7Ow7R_%sm<<mC2{J^7h_@eH=J|Q!I<*Jly&W%cWN1UR?GIHl$y`>iQQR&`; zM%MKYS|c*5Q`gFF3Tt1pwSIHQ^5liFq6>l>cC*}wJ#sVRMY3o@KZCsZg4G?35ij1c zzJ511wtW7YYJb7#q=kRIvJdm@I=aXG48KThQY+s%BcF`7aaW@|Hs1Btd+W^ceS-Dx zO4qwf%K0ZU@7dA(BEhe0;uG5?p9_V4u^4}1e3sHBX?bjp&H0|1DV9Gi^xsO>XT_wM z?K|?jVygBYzqd;3-)ZT;w_3YwCPU4lpR?v3v9H+r|4Hk=ZkC$);r|%(KRH+Z)%Sa- zb}5QMc^0QPcal%Gt6TQrmPMyiO$@^9w_e)weTGzT!Ii^48w^feEHo{jRV}mn+}!Zu z<WJ#Vy+(6(uX0PbsPgYUSM;Us>LX@TbH4idVgZXe759j(TVn1W=^DIn31@O>c6D`h zc6N1kL0r*OgGj%17S#)j){4woef3n(ay9j<*L=bk?rCXjPpp<O*D*O)E%p3ig#^2p z)cnsTdIkT&9zU4P-J@S6HGjR>l-Mg`YxG{F2hP=9-liotJ>&BY8UE5xesLR{A2v2N zj{N=(RaHAW+-=M*>?ru|UzztHaB1nw|DcK-xw=MF<gwN1L8hM`@}FX2U^v3Uz#s!! z(IQqK?xF{o$Pd09B<v_)JDGd-8fiU6#g0YZA0{<y=u*lOnCdWLm4=s&hTQZNChkJ> zGkF60Po%Fhi3nQSANDhFn(gd@z~Em7n=czL-|b&M|L@1or^6Y_H?C1QVDNxzvECfn zcfOLVYt|o(JzueP-vWgr7j`GVo9%XX%l4kBXJzZ-zKN6=@|1oMSgY^6;nh{iFOMvJ zI=gH2dYZz|TW>qduXFsIVaeI3ZBNe{_N4t|Kex`X<&$6QY7V7kid}hLQ%<gPb(AsH z=rH&qqC0zk&YrtZ9`){we9ZH4QLtHd_OcC2?(XBMyglu-LByLFGePd1ch(uK=w?ri z`>wHnb;5*&_v_!cK9xAFy<A_btswHCYMb_dJ;%ca>kM4B?+7nCwR?`#)%hpI{!TFa z-g7Ngk7+KKlKb7S$uD9!+*f!g>aLbc^+@YVH`c5?v}yYa+eybudCdzZFYGTmW4<a> zuOc-zLQdRd<K!5Z|KGRIY0`0ib$-TY-qm3bm6{6MK3w_IGcRmny<^m~nO71Xm^Hgq zis?8mDmYTzcEq#m^O+@=r?>^}cK>Ylx^(|W;kjNvUavaa5LGlk(PC}%x_7z7d+!J| z-JTa`dD2EQICUDkl$=+X;Q7p-t4}=K*c2&L@%)tOnUig8_dUHA&CjY(YZYC0P3m14 zOQqD&mkeK5WnQ(|n7(9T%Esn;F%Qd)lhUV^$Itk>?b?+|mjzPeHY^cTEcNxW@0pO* zyyegqrl37v%-LSZw0iw!-Nco`{$h2XtfRE_|CV{q@|WGK&3`s+P;_$VlvU4O(CTI{ z)KEVuuv2GJ3;zXc4*%kBi|dzdKC-^A*2P~~e7|y8&lR^nuLRxpZGE>+R(Z4F^7=R1 zqrSNamp{6^#nkZfk;P^!I@RSb#D1CkeCcP!rydIae}az$ZSwtn^{c?*xGK*J6DEDJ zd!RhcpyT?I6`Q%jZj0&&)-iUAtaS)uIe27V)08*oCf#p;zMlb<50FzkA|HSnwEAjZ z6?u#d48Ba0KMKm!2j2EN>>yx!ds(k<^yThrzn4C84mDWNFB;$Fq<E{{%dy7manSZH zo;Q~qz5nTGQ<MCI@*lE~a)Q=$Bse`wIXBPJ`0&2^eR~)!T(3Gvt+u+xqq1S$p|(C> z*=U}Z#t%C`%u$TAeqoTo`+uJCjBOu&e66_g^wY7Id>xuM_r2z^>JzEgnm;k>hXPaE zB3X}YmA`iU{%f?|D@v`Tgp5M6%FFK0w77QQV^x^-ltZttE_UmC6PWq4KUqraLD3=A z!~guBm$^jo-v7Kqn(KZy=Ot<Jem!|jtqU7{D{sqtPmkv^O>y%rS+ncOg5<`;_x1iu z@0?5wKY2F(w4ul|<?Xv_S1q<xs`vU4w)v|qw{B$is@TsTtv0KzP;$M#a30GHsm`P} zqwWcU%lMWj_+Q-UXec|;YLiIu#s&lb83&bof>tI;d;VhPTJLd3>}$W~q;D6Ex9mKx zq#5En&1kaBlz7#33%7gBP<<|R>Pm8_QE$P_eO^yCd;(7rAYy=lVe)>i6GEV9vD7R* z8pp)I@PQdVuNWK|4C@#NL6_ad-gtYd=p}Dg7k7oG>#iUd$6kIRPmeH<J6#`k=v>~k z^xd_WVjr&~59XwA+nN>hHSye>)8_Yoo;y?X``<_72GKRIJq~&(bVkY+&j>H{JzOfw zm3QLDvbIHitW%amUMcWCI;m?@J=bK#IPPekwyR=k-YmRwVLr3Fh4s#y-LO^ghn@Xb zrvHqGKRBQNe#o8Y^U?o};$@OkdLK+M?undte!I0k|Be+_?7pX#tUXXVYj@v=lsn#9 z4<}wv)A)1lPtX2WAIdUr{VtpOOFQ?S{G@w}QqoJ*(oN?GAOFHsoc;Xd%G1$_;Tfmu z`DDNUSb6zX;p@Ljr5D~VP>$L6@}!qj&~#OAAz=*_!?r@v?UN(iS{02O<|WQiGre{3 z0-Ly!z^4~pLggDyO<1e5Uh4ez?caJ{%@*6AACdiZ%DP8+Lf=)=cv+QR+@Bm+?7?={ z<mdF2oHCgiR&{spSY{NMr_7LJ5W71!@!5TSXXX0ql^N{s4Al#k?YOYlX@2m24bSV- zwWIdWy0!4bpQ<klgiAgZE)RR$B)?A}?gVS*&yx<@zohqed}`L_abCaFxq9u*O!>rV z`*OK>7H>)V#QDPe_=))rvvS%N`F165dA*c-!=*>;N6snvOnam8C`I_o)zVGMCjzIu zUz9nYMah5DrS<g(MYuvH&&hu|$7SvGd&*^fKf;&TIo|Z=k4^aDZN7Zj)?$^af0kd$ zCAKP^={Pb+Fjh=eC-8NJN-Ce!O~Wj6zd|;*koih3a;cM?&flLNu6D&lPmta71?OHL zZ)cm`%bhM3wkoy0Dmv@(IPNbasLVi4f&t#llF-$!@2b*+q#hpG|C)(`frS;CIzh|e zf}yo%$jhM10TQ;`xig(l1#xj`u@z==3$Ywz4H0uJTxD?WU}L@F-c|?CEU^RbA31-V z?U^Du_u~9>Klt`_JuaWz)D*h>^6r}3KhOP~RP+1eN8<)Vo9PpeomIItQPkVdO|Ds} zO=yRza^FK16G`PAx^EV9_MF_&T)45`hvW2JmUpTJ@rRf>Ckri;Sd_Z{)B>>>_tjS4 z#J;<2RVpvrxmdU2s^#rXKlWutPv+UU>fJ7$mxre9Tb(U>_tu53dC5`IPqJqj>0Yir zVleM-{6hQ7#o8e?=kyBOt~F(Toc`~eRe9X&*P?n4a-7$%dC{l&t~B|~ZIhK#=iT2J z_i=l@UAb*;<+2EoySwga3GQCA;+)2EV-~aA+``Pd`wv3(mrT{F+O_eo)B0=Kr<eOV zP3YeCUZUop$h;*QwmPdcb})oGvd!h%bwT&x!Y22MGZ!v0G%xIB3ApRPJ=MDJZO5NX ztrgMRzUCeO7RzbOm1em70p~NxUGB%-t~BjUj9T?tnytS4?xuK2zmq~@A~r|2G^I1u z3u-xEw>bLi+P2j9k*|z;GtQTJY0eDrHw`~+C8%J!>;EEg*8j6kUHT<vZqs&;?V#Td z<1c@!PaVl^u6DhB<C(~viDz3MMc=vXq|AALX6_%2EpxYDdhEKP>Zt8>VKb|l(a9O= zTO#+zJmb^fTj<koU4P|2r&jOdHT?&6OI1res($29z4OuT**udJEhOcBy-f9PKB3@b zFJ-&8SJ3cpLb}OCxv1)w+q}MOyj}Y<dBdLvf=WLZD!cGEAL!n)OmK1NvaOPy8X1mU z(@!jF%iPgpr(nS;AvT9)Lc>m{z=;gctX<tRp8w?UxFYbo>x%l3@XNmS$0zKYpgYU& z%7mK!#tZt(XJ-ezdM*|8aOG15TlIg}jQ=rj5oxN*U35>;F@1y6okuL%9z8*i6?~68 z*KmHj^2!5&l?IMhKEW=H8fzzHt-kU}s?vLh)Py&SmR;9aJ^x*k)cVV^94ejZY}V<j zM^a-JSNAAA`m$fnqx`WtD62?46h~wTl=^jY7xyDhP?q7%d-fPK60ckz9P9(lDX{TP zy`0@!rfh4d;m})fL+qtehnI=k33rpogBu!trA$Ma=jG~D`<3yi-{{^=u`4YP4#Vbo zXa4;8`m{MiafHEywwW$m$!y0A7d}p7+Rl?PBjn#(7B03f4Nc>z2V`Y0Tb-)6(rK#* zHIwkM7724^`5kjEich>fCSvubjUqqn?7uPn7j%A}eE$0r;kM30{|_9^Wy{sP@svmM z_UE5bpYQUC&wl4Ox2&ivpz!tWbswhOzjx)yJaMC*KWFzGyl-BqvG(ZNv+4P=$JKbF zPW+9%6cZpS@$~D>-|rS?S2ljFseQWRkaYbfRkODq+lxLN%H8s_w_739aLxivt(vRB z6Tev2Mj9@ia5RBS^2>`Eo)7iXBtK1`lJH`o@a)8ripku998;~PAF@4T>~rq?*%`f7 z<<5E6nrA(q?LP00@%A}Wd5a5kZ`SO5Vexd!!pC)7{2|wzd4!(2vY%b${piJ#!{J|= zg_KfDuh*}Sd~N-EkCJ4Yo~OXtnTcOsRVRB~+fmYVic!5_UqFuO_2-wea)Xk8bA6i+ zp6u;jXYD=HfA&=^@tW^b!IQmn8mqqN_jLTy?>8usS;>0#YL)Sw!xFZyOeA(?9=US# zLUaE`t8ST_HkGTN9M3TGN>5n2@_ff!ml<)J?siPB_r2t9aH4Es|DJzhvz}!;YzbQP zWu8HUW0&SR{wd1?xR?5O%vJiw{Br$;drz#+UHG|o>+<J9%RRPTUv6Nx=ysn$ELX8p z$zF}bSzgDLH6MFSI2*82?$c+3#XlGne+8;(eqqsjGL_S`CGn90XYRu5nJNPBYu7p( z8#v8#D>QXm{P>>s4_;7`1*b>&m^>qs2(t(S2m0oQ$yqX{@=L1IgBXwiC!8(7@YZqT z<b5&{pq&MiZ^}rE-C$r~C@#_u@CF&k#Q@rSAeNIpnM+pM>L*01peR2pwZsTT$>}Oo z8-$T;`0J=NIbK#tUMvSyjSz~O;K>VQ6){}OkEG_UWAo$(vU1FzT@H+L(u^A>%gSkj zd7g68j4vk3%E?a7m*<|`E61Y%%CE?4z-8g)FfeRs)MkS2e-Kl^ToR5@xuwyCb#j8N zm??aLI3!dc!3?qjvaE~&y37+<=VngmqE96S%tdC%3M+U)ZZShFIYYMtc~T$M8#@HS zS`n*GkhNmY`Xk#~ATk-U20#v6w1MV#N+wTG5M}a^0GT;iQeH{{b9M*W1a4`NLNml% z53=Q;utDy)s~~hTY-v0$3l5uk;zByenlStH2whtm=c|IELKfD;N7e|k4cr8ud|yG7 zX|u-UZwktjd*$VrQnaAH<ez*)UJRTlkefuPp{b+|_7I|tj&22NlL^^vr*%PYn_Q$I z%KWY>eey?nX(mQPkZF_Gaq~_#P~ZUvGC0421Nj+5a*u+52rC=NAV~&E232+jhLt8D F9sq5hP?Z1x delta 6953 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 diff --git a/serveurFTP/target/surefire-reports/TEST-sr.projet2.AppTest.xml b/serveurFTP/target/surefire-reports/TEST-sr.projet2.AppTest.xml index 7ac22c5..8f8ab53 100644 --- a/serveurFTP/target/surefire-reports/TEST-sr.projet2.AppTest.xml +++ b/serveurFTP/target/surefire-reports/TEST-sr.projet2.AppTest.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="sr.projet2.AppTest" time="0.036" tests="1" errors="0" skipped="0" failures="0"> +<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="sr.projet2.AppTest" time="0.048" tests="1" errors="0" skipped="0" failures="0"> <properties> <property name="sun.desktop" value="gnome"/> <property name="awt.toolkit" value="sun.awt.X11.XToolkit"/> @@ -16,7 +16,7 @@ <property name="sun.java.launcher" value="SUN_STANDARD"/> <property name="user.country" value="FR"/> <property name="sun.boot.library.path" value="/usr/lib/jvm/java-11-openjdk-amd64/lib"/> - <property name="sun.java.command" value="/home/hocine/eclipse-workspace/serveurFTP/target/surefire/surefirebooter4822591889526926263.jar /home/hocine/eclipse-workspace/serveurFTP/target/surefire 2021-02-18T00-17-01_812-jvmRun1 surefire473336015518436635tmp surefire_0141794290096130823tmp"/> + <property name="sun.java.command" value="/home/hocine/eclipse-workspace/serveurFTP/target/surefire/surefirebooter7079129417024759708.jar /home/hocine/eclipse-workspace/serveurFTP/target/surefire 2021-03-07T15-29-07_870-jvmRun1 surefire9845237247780243398tmp surefire_015024554498971470310tmp"/> <property name="jdk.debug" value="release"/> <property name="surefire.test.class.path" value="/home/hocine/eclipse-workspace/serveurFTP/target/test-classes:/home/hocine/eclipse-workspace/serveurFTP/target/classes:/home/hocine/.m2/repository/junit/junit/4.11/junit-4.11.jar:/home/hocine/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:"/> <property name="sun.cpu.endian" value="little"/> @@ -32,12 +32,12 @@ <property name="java.specification.name" value="Java Platform API Specification"/> <property name="java.vm.specification.vendor" value="Oracle Corporation"/> <property name="java.awt.graphicsenv" value="sun.awt.X11GraphicsEnvironment"/> - <property name="surefire.real.class.path" value="/home/hocine/eclipse-workspace/serveurFTP/target/surefire/surefirebooter4822591889526926263.jar"/> + <property name="surefire.real.class.path" value="/home/hocine/eclipse-workspace/serveurFTP/target/surefire/surefirebooter7079129417024759708.jar"/> <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/> <property name="java.runtime.version" value="11.0.10+9-Ubuntu-0ubuntu1.20.04"/> <property name="user.name" value="hocine"/> <property name="path.separator" value=":"/> - <property name="os.version" value="5.4.0-65-generic"/> + <property name="os.version" value="5.4.0-66-generic"/> <property name="java.runtime.name" value="OpenJDK Runtime Environment"/> <property name="file.encoding" value="UTF-8"/> <property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/> @@ -57,5 +57,5 @@ <property name="sun.io.unicode.encoding" value="UnicodeLittle"/> <property name="java.class.version" value="55.0"/> </properties> - <testcase name="shouldAnswerWithTrue" classname="sr.projet2.AppTest" time="0.002"/> + <testcase name="shouldAnswerWithTrue" classname="sr.projet2.AppTest" time="0.003"/> </testsuite> \ No newline at end of file diff --git a/serveurFTP/target/surefire-reports/sr.projet2.AppTest.txt b/serveurFTP/target/surefire-reports/sr.projet2.AppTest.txt index 7e49324..70439b2 100644 --- a/serveurFTP/target/surefire-reports/sr.projet2.AppTest.txt +++ b/serveurFTP/target/surefire-reports/sr.projet2.AppTest.txt @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------- Test set: sr.projet2.AppTest ------------------------------------------------------------------------------- -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.036 s - in sr.projet2.AppTest +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.048 s - in sr.projet2.AppTest diff --git a/serveurFTP/target/test-classes/sr/projet2/AppTest.class b/serveurFTP/target/test-classes/sr/projet2/AppTest.class index 49fd1cc203d5df763b95d89aba9b5c1ce7ddd1a1..61cbc1431ca1510a79c82a93c96feb0872ec69a1 100644 GIT binary patch delta 287 zcmcc2e3?1o)W2Q(7#J9g86?>mm>3y^ii`9Mit@8kON{g#3kpI~i%ZxUSQr@uvJ%S@ z^>Y&Q()In5vQm>v7#Y}XGV?M^>=+rCH8jH*8Cab2Q&PDYm>D>E7+4wDCK_~`a4`rm zh_EvVGcpL|7p3cGmF8uZ=sOk{rxum)Fo-gUF*0x^f_WiDrKyYzEE-XoVH0=DurVky zFfuStwq%sA=Ge%<z`(@7#lXP8#=ywHz`(`8&A`CG17@=_@G$T)FfcGO@G-D4Ffs5$ oRS7UKFtCF?#RyTyvV%boVGtJs69WT-5CaQ?Fjm9F!B$ED0JeN9TL1t6 delta 312 zcmcc2e3{wc)W2Q(7#J9g86>$FSQrGk7=##v*%?IG8AKTw*laTMGE3|j8JIOR!x$M@ zobyvsCq{JFGcs@m=a&{Gr@Ce4q%tz_I2IIyq!yRxWhIs+@-VP6u(30U@i2%pNH8)8 z6&L9j6y;~7mKf<nl`%31fE4QIB<7{-`zK|kCYLZW2;>)~>t~hbWtQkW78j=$l`t}J zC4w0tMWv~X3@jQ^nqdrz49pBH43n)G<*FGsGB7YOF>o+2Ft9N&GB7Z3F>o?4Fz|rc ztPETX+zbp1j0`*sYz#~c>|h@<LgZL>FfbuBb1^V6Ffa%)urLT?F@P6pJRjIFez27S E0Ge7d%K!iX -- GitLab